Thursday, December 2, 2021

Метрики для оценки алгоритмов машинного обучения в Python

 (.env) [boris@fedora34server YANDEXQ]$ cat predict.py

import pandas

from sklearn import model_selection

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import classification_report

url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"

names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']

dataframe = pandas.read_csv(url, names=names)

array = dataframe.values

X = array[:,0:8]

Y = array[:,8]

test_size = 0.33

seed = 7

X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)

model = LogisticRegression(solver='lbfgs', max_iter=120)

model.fit(X_train, Y_train)

predicted = model.predict(X_test)

report = classification_report(Y_test, predicted)

print(report)

(.env) [boris@fedora34server YANDEXQ]$ python predict.py

              precision    recall  f1-score   support


         0.0       0.81      0.88      0.84       162

         1.0       0.74      0.63      0.68        92


    accuracy                           0.79       254

   macro avg       0.78      0.75      0.76       254

weighted avg       0.78      0.79      0.78       254

















































































(.env) [boris@fedora34server YANDEXQ]$ cat regres01.py

import pandas

from sklearn import model_selection

from sklearn.linear_model import LinearRegression

url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"

names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)

array = dataframe.values

X = array[:,0:13]

Y = array[:,13]

seed = 7

kfold = \ model_selection.KFold(n_splits=10,shuffle=True,random_state=seed)

model = LinearRegression()

scoring = 'neg_mean_absolute_error'

results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)

print(("MAE: %.3f (%.3f)") % (results.mean(), results.std()))

(.env) [boris@fedora34server YANDEXQ]$ python regres01.py

MAE: -3.387 (0.667)

(.env) [boris@fedora34server YANDEXQ]$ cat regres02.py

# Cross Validation Regression MSE

import pandas

from sklearn import model_selection

from sklearn.linear_model import LinearRegression

url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"

names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)

array = dataframe.values

X = array[:,0:13]

Y = array[:,13]

seed = 7

kfold = \ model_selection.KFold(n_splits=10,shuffle=True,random_state=seed)

model = LinearRegression()

scoring = 'neg_mean_squared_error'

results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)

print(("MSE: %.3f (%.3f)") % (results.mean(), results.std()))

(.env) [boris@fedora34server YANDEXQ]$ python regres02.py

MSE: -23.747 (11.143)


(.env) [boris@fedora34server YANDEXQ]$ cat regres03.py
import pandas
from sklearn import model_selection
from sklearn.linear_model import LinearRegression
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)

array = dataframe.values

X = array[:,0:13]
Y = array[:,13]

seed = 7
kfold    \ =  model_selection.KFold(n_splits=10,shuffle=True,random_state=seed)

model = LinearRegression()

scoring = 'r2'

results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)

print(("R^2: %.3f (%.3f)") % (results.mean(), results.std()))

(.env) [boris@fedora34server YANDEXQ]$ python regres03.py
R^2: 0.718 (0.099)















References

https://machinelearningmastery.com/metrics-evaluate-machine-learning-algorithms-python/




Monday, November 22, 2021

Решение задачи 17 369 Вариант Ларина с помощью Python (numpy,matplotlib,sympy)

Решение с помощью Пайтон, импортируя numpy,matplotlib,sympy в пайтон виртуальное окружение.

Совмещая условие задачи с геометрией плота получаем значения для параметра а = {-2;2; -3*6^(1/2)/4; -3*6^(1/2)/4}. Рассчеты ординат точек экстремума и точек пересечения голубой и красной кривых проделаны стандартными средствами мат. анализа. Plot строит график числителя дроби в аОх плоскости a(x)= x^3/(4-2x^2) и знаменателя dvr(x) = x/(3-x^2). Аналитически находятся корни a'(x) как {-6^(1/2); 6^(1/2} и их ординаты по оси "а" {-3*6^(1/2)/4; 3*6^(1/2)/4}, прямые а=-3*6^(1/2)/4 и а=3*6^(1/2)/4 пересекут график а(х) только в 2-ух точках, а также точки пересечения a(x)=dvr(x) {-1,1,-2,2}. В силу условия задачи нас интересуют ординаты по "a" только {-2,2}. Эти точки лежащие на кривой а(х) вне [-3*6^(1/2)/4; -3*6^(1/2)/4] по оси "a" следует выколоть и тогда а =2 и а =-2 пересекут график а(х) ровно 2-ух точках, а значения их ординат дадут еще два значения а - это {-2,2}, так как в них dvr(x)=a(x) иначе говоря

a(x)=x/(3-x^2) <=> a(x)*(3-x^2)=x <=> a(x)*x^2-3*a(x)+x=0

import matplotlib.pyplot as plt

import numpy as np

from sympy import sympify, lambdify

from sympy.abc import x

fig = plt.figure('a0x - plane')

ax = fig.add_subplot(111)

ax.spines['left'].set_position('zero')

ax.spines['right'].set_color('none')

ax.spines['bottom'].set_position('zero')

ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')

ax.yaxis.set_ticks_position('left')

# setup x and y ranges and precision

xline = np.arange(-5.5,5.5,0.01)

plt.axhline(y = (3*6**(0.5))/4, color = 'green', linestyle = '-')

plt.axhline(y = -(3*6**(0.5))/4, color = 'green', linestyle = '-')

plt.axhline(y =  2.0, color = 'green', linestyle = '-')

plt.axhline(y = -2.0, color = 'green', linestyle = '-')

myfunction=sympify(x**3/(4-2*x**2))

myfunctionDvr=sympify(x/(3-x**2))

mylambdifiedfunction=lambdify(x,myfunction,'numpy')

mylambdifiedfunctionDvr=lambdify(x,myfunctionDvr,'numpy')

ax.plot(xline, mylambdifiedfunction(xline),zorder=100,linewidth=2,color='blue')

ax.plot(xline, mylambdifiedfunctionDvr(xline),zorder=100,linewidth=1,color='red')

ax.set_xbound(-10,10)

ax.set_ybound(-5,5)

plt.show()





































Tuesday, November 9, 2021

Buiding graph via python module importing networkx,plotly

 (.env) [boris@fedora34server NUMPY]$ cat  graphYQ1011.py

import plotly.graph_objects as go

import networkx as nx

G = nx.random_geometric_graph(200, 0.125)

edge_x = []

edge_y = []

for edge in G.edges():

    x0, y0 = G.nodes[edge[0]]['pos']

    x1, y1 = G.nodes[edge[1]]['pos']

    edge_x.append(x0)

    edge_x.append(x1)

    edge_x.append(None)

    edge_y.append(y0)

    edge_y.append(y1)

    edge_y.append(None)

edge_trace = go.Scatter(

    x=edge_x, y=edge_y,

    line=dict(width=0.5, color='#888'),

    hoverinfo='none',

    mode='lines')

node_x = []

node_y = []

for node in G.nodes():

    x, y = G.nodes[node]['pos']

    node_x.append(x)

    node_y.append(y)

node_trace = go.Scatter(

    x=node_x, y=node_y,

    mode='markers',

    hoverinfo='text',

    marker=dict(

        showscale=True,

        # colorscale options

        #'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' |

        #'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' |

        #'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' |

        colorscale='YlGnBu',

        reversescale=True,

        color=[],

        size=10,

        colorbar=dict(

            thickness=15,

            title='Node Connections',

            xanchor='left',

            titleside='right'

        ),

        line_width=2))

node_adjacencies = []

node_text = []

for node, adjacencies in enumerate(G.adjacency()):

    node_adjacencies.append(len(adjacencies[1]))

    node_text.append('# of connections: '+str(len(adjacencies[1])))

node_trace.marker.color = node_adjacencies

node_trace.text = node_text

fig = go.Figure(data=[edge_trace, node_trace],

             layout=go.Layout(

                title='<br>Network graph made with Python',

                titlefont_size=16,

                showlegend=False,

                hovermode='closest',

                margin=dict(b=20,l=5,r=5,t=40),

                annotations=[ dict(

                    text="Python code: <a href='https://plotly.com/ipython-notebooks/network-graphs/'> https://plotly.com/ipython-notebooks/network-graphs/</a>",

                    showarrow=False,

                    xref="paper", yref="paper",

                    x=0.005, y=-0.002 ) ],

                xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),

                yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))

                )

fig.show()



































































Wednesday, September 15, 2021

Linux versus Unix briefly

 Поскольку Linux - это просто ядро, стоит обсудить основные различия между ядром Linux и ядром  Unix. Существует три типа ядра: монолитное, микро и гибридное (сочетание монолитного и микро), как показано на изображении ниже.






В монолитной архитектуре ядра вся ОС работает в пространстве одного ядра. Оно единолично определяет высокоуровневый виртуальный интерфейс поверх компьютерного оборудования.Хотя ядро ​​Linux заимствует большинство своих характеристик от Unix / Unix-подобных ядер, однако между ними есть некоторые существенные различия. В архитектуре микроядра основные службы ОС работают в одном процессе, а другие службы - в разных процессах. В ядре µ почти минимальное количество механизмов включено в режим ядра. Эти механизмы включают базовый IPC (межпроцессное взаимодействие), планирование и низкоуровневое управление адресным пространством.С точки зрения размера исходного кода, как правило, микроядро меньше монолитного ядра.











Добавление / удаление функций ядра Предоставляет отличную функцию, с помощью которой компоненты ядра, такие как диски устройств, могут быть динамически добавлены и удалены как модули. Эта функция называется загружаемыми модулями ядра (LDM). Это избавляет от необходимости заново компилировать все ядро. Эта функция, в свою очередь, дает Linux большую гибкость.

Традиционное ядро систем Unix требует статической компоновки добавляемых новых систем. В Linux нет подсистемы потокового ввода-вывода. В большинство ядер Unix включена подсистема потокового ввода-вывода, которая оказывается желаемым интерфейсом для написания драйверов устройств, драйверов терминалов и т. д.

Превентивный подход или подход без вытеснения Обычно ядро ​​Linux не является вытесняющим. Однако в последнее время ОС реального времени Linux начала использовать вытесняющие ядра. Некоторые системы Unix полностью вытесняют.Например, Solaris 2.x. и т.п.

Поток ядра Linux использует поток ядра только для периодического запуска некоторого кода ядра. Многие Unix-подобные операционные системы используют поток ядра для переключения контекста процесса. Способы обработки многопоточной среды Благодаря многопоточности создается несколько независимых потоков выполнения, которые называются облегченными процессами (LWP). В Linux LWP создается путем вызова функции clone (). Эти процессы в Linux могут совместно использовать физическую память, открытые файлы, адресное пространство и т. д. В Unix LWP основан на потоках ядра.

В Linux нет подсистемы потокового ввода-вывода. В большинство ядер Unix включена подсистема потокового ввода-вывода, которая оказывается желаемым интерфейсом для написания драйверов устройств, драйверов терминалов и т. д.

Способы обработки многопоточной среды - 
Благодаря многопоточности создается несколько независимых потоков выполнения, которые называются облегченными процессами (LWP). В Linux LWP создается путем вызова функции clone (). Эти процессы в Linux могут совместно использовать физическую память, открытые файлы, адресное пространство и т. д. В Unix LWP основан на потоках ядра.

Примеры

До сих пор в этой лекции мы видели общие основные различия между Linux и Unix. 
Эти различия могут быть более конкретными, если мы сравним их точные версии. Давайте посмотрим на это на нескольких примерах.

Солярис против Linux
Solaris, которая теперь называется Oracle Solaris, - это операционная система семейства Unix. Давайте сравним Linux с Solaris.
Linux поддерживает больше системных архитектур, чем Solaris. Следовательно, Linux более портативен.
Говоря о стабильности и интеграции оборудования, Solaris, похоже, здесь лучше. Linux также быстрее развивается по сравнению с Solaris.
Между ними есть несколько других технических различий, но здесь мы ограничиваем наше сравнение только производительностью.

MacOS против Linux
MacOS - это сертифицированная ОС Unix. У него есть собственное ядро ​​под названием XNU. 
Он используется в компьютерах Apple, которые считаются самыми надежными.MacOS относительно легко настроить. С другой стороны, Linux дешевле и предлагает много программного обеспечения с открытым исходным кодом по сравнению с проприетарными решениями Apple. Кроме того, Linux более гибок, поскольку его можно запускать практически на любом оборудовании, тогда как MacOS может работать только на оборудовании Apple. Например, айфоны.MacOS использует HFS + в качестве файловой системы по умолчанию, тогда как Linux использует ext4.

Ссылки

https://www.softwaretestinghelp.com/unix-vs-linux/




Tuesday, September 14, 2021

Solving one problem from YandexQ as 14/09/2021

 















[boris@fedora34server ~]$ cat  yandexPlot.py

import matplotlib.pyplot as plt

from matplotlib.ticker import (MultipleLocator, FormatStrFormatter,

                               AutoMinorLocator)

import numpy as np

x = np.linspace(0, 30, 30)

y1 = np.cos(np.cos(np.cos(np.cos(x))))

y2 = np.sin(np.sin(np.sin(np.sin(x))))

fig, ax = plt.subplots(figsize=(8, 6))

ax.set_title("Графики зависимостей: y1, y2", fontsize=16)

ax.set_xlabel("x", fontsize=14)        

ax.set_ylabel("y1, y2", fontsize=14)

ax.grid(which="major", linewidth=1.2)

ax.grid(which="minor", linestyle="--", color="gray", linewidth=0.5)

ax.scatter(x, y1, c="red", label="y1")

ax.plot(x, y2, label="y2")

ax.legend()

ax.xaxis.set_minor_locator(AutoMinorLocator())

ax.yaxis.set_minor_locator(AutoMinorLocator())

ax.tick_params(which='major', length=10, width=2)

ax.tick_params(which='minor', length=5, width=1)


plt.show()

[boris@fedora34server ~]$ python  yandexPlot.py


















Next iteration

[boris@fedora34server ~]$ cat  yandexPlot5.py

import numpy as np # import numpy package

import matplotlib.pyplot as plt # import matplotlib.pyplot package

x = np.arange(0,9 * np.pi, 0.1) # create x array of angels from range 0 to 9*3.14

y = np.cos(np.cos(np.cos(np.cos(x)))) -   np.sin(np.sin(np.sin(np.sin(x)))) 

plt.plot(x, y) # plot grah 

plt.title(" Graphical Representation of sine function")

plt.xlabel("x axis ")

plt.ylabel("y axis ")

plt.show() # show plotted graph






























Thursday, September 2, 2021

HTML CONVERSION

Условие Расшифровать пример на умножение, если буквой Ч зашифрованы чётные числа, а буквой Н – нечётные.
Решение Запишем пример в виде

(строчные буквы соответствуют чётным цифрам, а прописные – нечётным).
A < 5,так как Abc·d – трёхзначное число. Но A > 1, так как Abc·d – четырёхзначное число.Следовательно,A=3,d=2,j = 6. Abc·6 = 3·Abc·2 = 3·jKl < 2000 < fGhj, поэтому e = 8, f = 2.
Из нечётности K следует, что c > 5. Так как j = 6, то b < 6, но b ≠ 0 (иначе цифра K была бы чётной). Таким образом, для Abc имеется четыре варианта: 326, 328, 346, 348. Умножая на 28, находим единственное решение: 348·28 = 9744.
Ответ 348·28 = 9744.

Thursday, August 5, 2021

Python Wrapper for C++ solving the recent YandexQ problem

 Problem itself

ABCDEF is a six-digit number. They are all different and are arranged from left to right in ascending order. The number is a complete square.

(.env) [boris@fedora33server VOICE]$ cat Strike.h

#pragma once

#include <cstddef>

#include <cstdio>

namespace abc {

    class Strike {

    public:

        double *mem;

        long fftSize;

        Strike(long fftSize);

        ~Strike();

        long filter(long freq);

        long CaughIt(int n);

    };

}

(.env) [boris@fedora33server VOICE]$ cat Strike.cpp

#include <cstdio>

#include <cstddef>

#include <string>

#include "Strike.h"

namespace abc

    Strike::Strike(long fftSize) {

        printf("c++ constructor of Strike\n");

        this->fftSize=fftSize;

        mem=new double[fftSize];

        } 

    Strike::~Strike() { delete [] mem; } 

    long Strike::filter(long freq) {

        printf("c++ Strike filter method\n");

        return (CaughIt(1000));

    }

    long Strike::CaughIt(int n) 

    { 

     for (int i=200; i < n; i++)

     {

     std::string ans = std::to_string(i*i);

      if ((int(ans[0])< int(ans[1])) && \ 

         (int(ans[1]) < int(ans[2])) && \

         (int(ans[2]) < int(ans[3])) && \

         (int(ans[3]) < int(ans[4])) && \

         (int(ans[4]) < int(ans[5])))    

             return (i*i);

     }

    }

}

(.env) [boris@fedora33server VOICE]$ cat strikeWrapper.cpp

#include <Python.h>

#include <cstdio>

#include <string.h>

#include "Strike.h"

using abc::Strike;

typedef struct {

    PyObject_HEAD

    Strike * ptrObj;

} PyStrike;

static PyModuleDef volumemodule = {

    PyModuleDef_HEAD_INIT,

    "volume",

    "Example module that wrapped a C++ object",

    -1,

    NULL, NULL, NULL, NULL, NULL

};

static int PyStrike_init(PyStrike *self, PyObject *args, PyObject *kwds)

// initialize PyStrike Object

{

    long fftSize;

    if (! PyArg_ParseTuple(args, "l", &fftSize))

        return -1;

    self->ptrObj=new Strike(fftSize);

    return 0;

}

static void PyStrike_dealloc(PyStrike * self)

// destruct the object

{

    delete self->ptrObj;

    Py_TYPE(self)->tp_free(self);

}

static PyObject * PyStrike_filter(PyStrike* self, PyObject* args)

{

    long freq;

    long retval;

    if (! PyArg_ParseTuple(args, "l", &freq))

        return Py_False;

    retval = (self->ptrObj)->filter(freq);

    return Py_BuildValue("l",retval);

}

static PyMethodDef PyStrike_methods[] = {

    { "filter", (PyCFunction)PyStrike_filter,METH_VARARGS,"filter the mem volume" },

    {NULL}  /* Sentinel */

};

static PyTypeObject PyStrikeType = { PyVarObject_HEAD_INIT(NULL, 0)

                                    "volume.Strike"   /* tp_name */

                                };

PyMODINIT_FUNC PyInit_volume(void)

// create the module

{

    PyObject* m;

    PyStrikeType.tp_new = PyType_GenericNew;

    PyStrikeType.tp_basicsize=sizeof(PyStrike);

    PyStrikeType.tp_dealloc=(destructor) PyStrike_dealloc;

    PyStrikeType.tp_flags=Py_TPFLAGS_DEFAULT;

    PyStrikeType.tp_doc="Strike objects";

    PyStrikeType.tp_methods=PyStrike_methods;

    //~ PyStrikeType.tp_members=Noddy_members;

    PyStrikeType.tp_init=(initproc)PyStrike_init;

    if (PyType_Ready(&PyStrikeType) < 0)

        return NULL;

    m = PyModule_Create(&volumemodule);

    if (m == NULL)

        return NULL;

    Py_INCREF(&PyStrikeType);

    PyModule_AddObject(m, "Strike", (PyObject *)&PyStrikeType); 

    return m;

}

(.env) [boris@fedora33server VOICE]$ cat setup.py

from distutils.core import setup, Extension

setup(name='volumePkg', version='1.0',  \

      ext_modules=[Extension('volume', ['strikeWrapper.cpp','Strike.cpp'])])

$ python setup.py install

running install

running build

running build_ext

building 'volume' extension

creating build

creating build/temp.linux-x86_64-3.9

gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/home/boris/VOICE/.env/include -I/usr/include/python3.9 -c Strike.cpp -o build/temp.linux-x86_64-3.9/Strike.o

gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -O2 -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/home/boris/VOICE/.env/include -I/usr/include/python3.9 -c strikeWrapper.cpp -o build/temp.linux-x86_64-3.9/strikeWrapper.o

creating build/lib.linux-x86_64-3.9

g++ -pthread -shared -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -g -Wl,-z,relro -Wl,--as-needed -Wl,-z,now -g build/temp.linux-x86_64-3.9/Strike.o build/temp.linux-x86_64-3.9/strikeWrapper.o -L/usr/lib64 -o build/lib.linux-x86_64-3.9/volume.cpython-39-x86_64-linux-gnu.so

running install_lib

copying build/lib.linux-x86_64-3.9/volume.cpython-39-x86_64-linux-gnu.so -> /home/boris/VOICE/.env/lib64/python3.9/site-packages

running install_egg_info

Removing /home/boris/VOICE/.env/lib64/python3.9/site-packages/volumePkg-1.0-py3.9.egg-info

Writing /home/boris/VOICE/.env/lib64/python3.9/site-packages/volumePkg-1.0-py3.9.egg-info



A