2021-07-05T14:45:50,745 DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality. 2021-07-05T14:45:51,461 Created temporary directory: /tmp/pip-ephem-wheel-cache-pq6792mh 2021-07-05T14:45:51,466 Created temporary directory: /tmp/pip-req-tracker-vnsiqyvf 2021-07-05T14:45:51,467 Initialized build tracking at /tmp/pip-req-tracker-vnsiqyvf 2021-07-05T14:45:51,468 Created build tracker: /tmp/pip-req-tracker-vnsiqyvf 2021-07-05T14:45:51,468 Entered build tracker: /tmp/pip-req-tracker-vnsiqyvf 2021-07-05T14:45:51,470 Created temporary directory: /tmp/pip-wheel-xro7nguy 2021-07-05T14:45:51,543 1 location(s) to search for versions of matrix-fact: 2021-07-05T14:45:51,543 * https://pypi.org/simple/matrix-fact/ 2021-07-05T14:45:51,544 Fetching project page and analyzing links: https://pypi.org/simple/matrix-fact/ 2021-07-05T14:45:51,546 Getting page https://pypi.org/simple/matrix-fact/ 2021-07-05T14:45:51,551 Found index url https://pypi.org/simple 2021-07-05T14:45:51,873 Found link https://files.pythonhosted.org/packages/11/2e/c979994d0cff31bfb39218e8b5f26b632f651349582bd60a13a24955b285/matrix-fact-1.0.1.tar.gz#sha256=5488e7eca9842f32b0235ddf09c2678f27e900aefe7f00c3d6acf753b1a18c74 (from https://pypi.org/simple/matrix-fact/), version: 1.0.1 2021-07-05T14:45:51,874 Found link https://files.pythonhosted.org/packages/39/8a/e2d537aced3afacdb93d822823580f460ee95fc834d0b0f5ad25e21a1066/matrix-fact-1.1.0.tar.gz#sha256=850c6b9f4a3ca0d9e094e7691403779ed798afb9d0e2cc0c5221946769867e44 (from https://pypi.org/simple/matrix-fact/), version: 1.1.0 2021-07-05T14:45:51,875 Found link https://files.pythonhosted.org/packages/44/6d/a8144f7aa9e57d0de9278a6903f94cf771ba212608e089247fb098f78be7/matrix-fact-1.1.1.tar.gz#sha256=865250a0212fbe372e5c38c9d3979350517b0696def64a87eb6b35af33cbd0b6 (from https://pypi.org/simple/matrix-fact/), version: 1.1.1 2021-07-05T14:45:51,876 Found link https://files.pythonhosted.org/packages/e0/31/1221f472055654406d1c352f5110f031f4f255d5947692df73557b11f15f/matrix-fact-1.1.2.tar.gz#sha256=5ece899deafbb1912f8c01f92b54dddd889c5202447100044f335ccca52abc6e (from https://pypi.org/simple/matrix-fact/), version: 1.1.2 2021-07-05T14:45:51,906 Given no hashes to check 1 links for project 'matrix-fact': discarding no candidates 2021-07-05T14:45:51,939 Collecting matrix-fact==1.1.1 2021-07-05T14:45:51,943 Created temporary directory: /tmp/pip-unpack-0cvyson6 2021-07-05T14:45:52,174 Downloading matrix-fact-1.1.1.tar.gz (34 kB) 2021-07-05T14:45:52,497 Added matrix-fact==1.1.1 from https://files.pythonhosted.org/packages/44/6d/a8144f7aa9e57d0de9278a6903f94cf771ba212608e089247fb098f78be7/matrix-fact-1.1.1.tar.gz#sha256=865250a0212fbe372e5c38c9d3979350517b0696def64a87eb6b35af33cbd0b6 to build tracker '/tmp/pip-req-tracker-vnsiqyvf' 2021-07-05T14:45:52,499 Running setup.py (path:/tmp/pip-wheel-xro7nguy/matrix-fact_3e170dbf62784ade99e0a9cff08304c3/setup.py) egg_info for package matrix-fact 2021-07-05T14:45:52,500 Created temporary directory: /tmp/pip-pip-egg-info-dbfisdig 2021-07-05T14:45:52,501 Running command python setup.py egg_info 2021-07-05T14:45:54,820 ## MatrixFact 2021-07-05T14:45:54,822 ### Install 2021-07-05T14:45:54,822 ``` 2021-07-05T14:45:54,823 pip install matrix-fact 2021-07-05T14:45:54,824 ``` 2021-07-05T14:45:54,825 ### What is matrix-fact? 2021-07-05T14:45:54,825 matrix-fact contains modules for constrained/unconstrained matrix factorization (and related) methods for both sparse and dense matrices. The repository can be found at https://github.com/gentaiscool/matrix_fact. The code is based on https://github.com/ChrisSchinnerl/pymf3 and https://github.com/rikkhill/pymf. We updated the code to support the latest library. It requires cvxopt, numpy, scipy and torch. We just addded the support for PyTorch-based SNMF. 2021-07-05T14:45:54,827 ### Packages 2021-07-05T14:45:54,828 The package includes: 2021-07-05T14:45:54,829 * Non-negative matrix factorization (NMF) [three different optimizations used] 2021-07-05T14:45:54,829 * Convex non-negative matrix factorization (CNMF) 2021-07-05T14:45:54,830 * Semi non-negative matrix factorization (SNMF) 2021-07-05T14:45:54,831 * Archetypal analysis (AA) 2021-07-05T14:45:54,831 * Simplex volume maximization (SiVM) [and SiVM for CUR, GSAT, ... ] 2021-07-05T14:45:54,832 * Convex-hull non-negative matrix factorization (CHNMF) 2021-07-05T14:45:54,833 * Binary matrix factorization (BNMF) 2021-07-05T14:45:54,833 * Singular value decomposition (SVD) 2021-07-05T14:45:54,834 * Principal component analysis (PCA) 2021-07-05T14:45:54,834 * K-means clustering (Kmeans) 2021-07-05T14:45:54,835 * C-means clustering (Cmeans) 2021-07-05T14:45:54,836 * CUR decomposition (CUR) 2021-07-05T14:45:54,836 * Compaxt matrix decomposition (CMD) 2021-07-05T14:45:54,837 * PyTorch SNMF 2021-07-05T14:45:54,838 ### Usage 2021-07-05T14:45:54,839 Given a dataset, most factorization methods try to minimize the Frobenius norm | data - W*H| by finding a suitable set of basis vectors W and coefficients H. The syntax for calling the various methods is quite similar. Usually, one has to submit a desired number of basis vectors and the maximum number of iterations. For example, applying NMF to a dataset data aiming at 2 basis vectors within 10 iterations works as follows: 2021-07-05T14:45:54,840 ```python 2021-07-05T14:45:54,841 >>> import matrix_fact 2021-07-05T14:45:54,841 >>> import numpy as np 2021-07-05T14:45:54,842 >>> data = np.array([[1.0, 0.0, 2.0], [0.0, 1.0, 1.0]]) 2021-07-05T14:45:54,842 >>> nmf_mdl = matrix_fact.NMF(data, num_bases=2, niter=10) 2021-07-05T14:45:54,843 >>> nmf_mdl.initialization() 2021-07-05T14:45:54,844 >>> nmf_mdl.factorize() 2021-07-05T14:45:54,844 ``` 2021-07-05T14:45:54,845 The basis vectors are now stored in nmf_mdl.W, the coefficients in nmf_mdl.H. To compute coefficients for an existing set of basis vectors simply copy W to nmf_mdl.W, and set compW to False: 2021-07-05T14:45:54,847 ```python 2021-07-05T14:45:54,847 >>> data = np.array([[1.5], [1.2]]) 2021-07-05T14:45:54,848 >>> W = np.array([[1.0, 0.0], [0.0, 1.0]]) 2021-07-05T14:45:54,849 >>> nmf_mdl = matrix_fact.NMF(data, num_bases=2, niter=1, compW=False) 2021-07-05T14:45:54,849 >>> nmf_mdl.initialization() 2021-07-05T14:45:54,850 >>> nmf_mdl.W = W 2021-07-05T14:45:54,850 >>> nmf_mdl.factorize() 2021-07-05T14:45:54,851 ``` 2021-07-05T14:45:54,852 By changing py_fact.NMF to e.g. py_fact.AA or py_fact.CNMF Archetypal Analysis or Convex-NMF can be applied. Some methods might allow other parameters, make sure to have a look at the corresponding >>>help(py_fact.AA) documentation. For example, CUR, CMD, and SVD are handled slightly differently, as they factorize into three submatrices which requires appropriate arguments for row and column sampling. 2021-07-05T14:45:54,853 For PyTorch-SNMF 2021-07-05T14:45:54,854 ```python 2021-07-05T14:45:54,855 >>> data = torch.FloatTensor([[1.5], [1.2]]) 2021-07-05T14:45:54,855 >>> nmf_mdl = matrix_fact.NMF(data, num_bases=2) 2021-07-05T14:45:54,856 >>> nmf_mdl.factorize(niter=1000) 2021-07-05T14:45:54,856 ``` 2021-07-05T14:45:54,858 ### Very large datasets 2021-07-05T14:45:54,858 For handling larger datasets py_fact supports hdf5 via h5py. Usage is straight forward as h5py allows to map large numpy matrices to disk. Thus, instead of passing data as a np.array, you can simply send the corresponding hdf5 table. The following example shows how to apply py_fact to a random matrix that is entirely stored on disk. In this example the dataset does not have to fit into memory, the resulting low-rank factors W,H have to. 2021-07-05T14:45:54,860 ```python 2021-07-05T14:45:54,860 >>> import h5py 2021-07-05T14:45:54,861 >>> import numpy as np 2021-07-05T14:45:54,861 >>> import matrix_fact 2021-07-05T14:45:54,862 >>> 2021-07-05T14:45:54,863 >>> file = h5py.File('myfile.hdf5', 'w') 2021-07-05T14:45:54,863 >>> file['dataset'] = np.random.random((100,1000)) 2021-07-05T14:45:54,864 >>> sivm_mdl = matrix_fact.SIVM(file['dataset'], num_bases=10) 2021-07-05T14:45:54,865 >>> sivm_mdl.factorize() 2021-07-05T14:45:54,865 ``` 2021-07-05T14:45:54,866 If the low-rank matrices W,H also do not fit into memory, they can be initialized as a h5py matrix. 2021-07-05T14:45:54,868 ```python 2021-07-05T14:45:54,868 >>> import h5py 2021-07-05T14:45:54,869 >>> import numpy as np 2021-07-05T14:45:54,869 >>> import matrix_fact 2021-07-05T14:45:54,870 >>> 2021-07-05T14:45:54,871 >>> file = h5py.File('myfile.hdf5', 'w') 2021-07-05T14:45:54,871 >>> file['dataset'] = np.random.random((100,1000)) 2021-07-05T14:45:54,872 >>> file['W'] = np.random.random((100,10)) 2021-07-05T14:45:54,872 >>> file['H'] = np.random.random((10,1000)) 2021-07-05T14:45:54,873 >>> sivm_mdl = matrix_fact.SIVM(file['dataset'], num_bases=10) 2021-07-05T14:45:54,873 >>> sivm_mdl.W = file['W'] 2021-07-05T14:45:54,874 >>> sivm_mdl.H = file['H'] 2021-07-05T14:45:54,874 >>> sivm_mdl.factorize() 2021-07-05T14:45:54,875 ``` 2021-07-05T14:45:54,876 Please note that currently not all methods work well with hdf5. While they all accept hdf5 input matrices, they sometimes lead to very high memory consumption on intermediate computation steps. This is difficult to avoid unless we switch to a completely disk-based storage. 2021-07-05T14:45:54,878 running egg_info 2021-07-05T14:45:54,878 creating /tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info 2021-07-05T14:45:54,880 writing top-level names to /tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/top_level.txt 2021-07-05T14:45:54,882 writing requirements to /tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/requires.txt 2021-07-05T14:45:54,885 writing dependency_links to /tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/dependency_links.txt 2021-07-05T14:45:54,887 writing /tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/PKG-INFO 2021-07-05T14:45:54,894 writing manifest file '/tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/SOURCES.txt' 2021-07-05T14:45:55,263 reading manifest file '/tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/SOURCES.txt' 2021-07-05T14:45:55,274 writing manifest file '/tmp/pip-pip-egg-info-dbfisdig/matrix_fact.egg-info/SOURCES.txt' 2021-07-05T14:45:55,411 Source in /tmp/pip-wheel-xro7nguy/matrix-fact_3e170dbf62784ade99e0a9cff08304c3 has version 1.1.1, which satisfies requirement matrix-fact==1.1.1 from https://files.pythonhosted.org/packages/44/6d/a8144f7aa9e57d0de9278a6903f94cf771ba212608e089247fb098f78be7/matrix-fact-1.1.1.tar.gz#sha256=865250a0212fbe372e5c38c9d3979350517b0696def64a87eb6b35af33cbd0b6 2021-07-05T14:45:55,413 Removed matrix-fact==1.1.1 from https://files.pythonhosted.org/packages/44/6d/a8144f7aa9e57d0de9278a6903f94cf771ba212608e089247fb098f78be7/matrix-fact-1.1.1.tar.gz#sha256=865250a0212fbe372e5c38c9d3979350517b0696def64a87eb6b35af33cbd0b6 from build tracker '/tmp/pip-req-tracker-vnsiqyvf' 2021-07-05T14:45:55,422 Created temporary directory: /tmp/pip-unpack-hu8s0p5d 2021-07-05T14:45:55,423 Building wheels for collected packages: matrix-fact 2021-07-05T14:45:55,432 Created temporary directory: /tmp/pip-wheel-d3vknf4r 2021-07-05T14:45:55,433 Building wheel for matrix-fact (setup.py): started 2021-07-05T14:45:55,433 Destination directory: /tmp/pip-wheel-d3vknf4r 2021-07-05T14:45:55,434 Running command /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-wheel-xro7nguy/matrix-fact_3e170dbf62784ade99e0a9cff08304c3/setup.py'"'"'; __file__='"'"'/tmp/pip-wheel-xro7nguy/matrix-fact_3e170dbf62784ade99e0a9cff08304c3/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-d3vknf4r 2021-07-05T14:45:57,291 ## MatrixFact 2021-07-05T14:45:57,293 ### Install 2021-07-05T14:45:57,293 ``` 2021-07-05T14:45:57,294 pip install matrix-fact 2021-07-05T14:45:57,294 ``` 2021-07-05T14:45:57,295 ### What is matrix-fact? 2021-07-05T14:45:57,296 matrix-fact contains modules for constrained/unconstrained matrix factorization (and related) methods for both sparse and dense matrices. The repository can be found at https://github.com/gentaiscool/matrix_fact. The code is based on https://github.com/ChrisSchinnerl/pymf3 and https://github.com/rikkhill/pymf. We updated the code to support the latest library. It requires cvxopt, numpy, scipy and torch. We just addded the support for PyTorch-based SNMF. 2021-07-05T14:45:57,297 ### Packages 2021-07-05T14:45:57,299 The package includes: 2021-07-05T14:45:57,299 * Non-negative matrix factorization (NMF) [three different optimizations used] 2021-07-05T14:45:57,300 * Convex non-negative matrix factorization (CNMF) 2021-07-05T14:45:57,300 * Semi non-negative matrix factorization (SNMF) 2021-07-05T14:45:57,301 * Archetypal analysis (AA) 2021-07-05T14:45:57,302 * Simplex volume maximization (SiVM) [and SiVM for CUR, GSAT, ... ] 2021-07-05T14:45:57,302 * Convex-hull non-negative matrix factorization (CHNMF) 2021-07-05T14:45:57,303 * Binary matrix factorization (BNMF) 2021-07-05T14:45:57,303 * Singular value decomposition (SVD) 2021-07-05T14:45:57,304 * Principal component analysis (PCA) 2021-07-05T14:45:57,305 * K-means clustering (Kmeans) 2021-07-05T14:45:57,305 * C-means clustering (Cmeans) 2021-07-05T14:45:57,306 * CUR decomposition (CUR) 2021-07-05T14:45:57,306 * Compaxt matrix decomposition (CMD) 2021-07-05T14:45:57,307 * PyTorch SNMF 2021-07-05T14:45:57,308 ### Usage 2021-07-05T14:45:57,309 Given a dataset, most factorization methods try to minimize the Frobenius norm | data - W*H| by finding a suitable set of basis vectors W and coefficients H. The syntax for calling the various methods is quite similar. Usually, one has to submit a desired number of basis vectors and the maximum number of iterations. For example, applying NMF to a dataset data aiming at 2 basis vectors within 10 iterations works as follows: 2021-07-05T14:45:57,310 ```python 2021-07-05T14:45:57,311 >>> import matrix_fact 2021-07-05T14:45:57,311 >>> import numpy as np 2021-07-05T14:45:57,312 >>> data = np.array([[1.0, 0.0, 2.0], [0.0, 1.0, 1.0]]) 2021-07-05T14:45:57,313 >>> nmf_mdl = matrix_fact.NMF(data, num_bases=2, niter=10) 2021-07-05T14:45:57,313 >>> nmf_mdl.initialization() 2021-07-05T14:45:57,314 >>> nmf_mdl.factorize() 2021-07-05T14:45:57,314 ``` 2021-07-05T14:45:57,315 The basis vectors are now stored in nmf_mdl.W, the coefficients in nmf_mdl.H. To compute coefficients for an existing set of basis vectors simply copy W to nmf_mdl.W, and set compW to False: 2021-07-05T14:45:57,316 ```python 2021-07-05T14:45:57,317 >>> data = np.array([[1.5], [1.2]]) 2021-07-05T14:45:57,318 >>> W = np.array([[1.0, 0.0], [0.0, 1.0]]) 2021-07-05T14:45:57,318 >>> nmf_mdl = matrix_fact.NMF(data, num_bases=2, niter=1, compW=False) 2021-07-05T14:45:57,319 >>> nmf_mdl.initialization() 2021-07-05T14:45:57,319 >>> nmf_mdl.W = W 2021-07-05T14:45:57,320 >>> nmf_mdl.factorize() 2021-07-05T14:45:57,320 ``` 2021-07-05T14:45:57,322 By changing py_fact.NMF to e.g. py_fact.AA or py_fact.CNMF Archetypal Analysis or Convex-NMF can be applied. Some methods might allow other parameters, make sure to have a look at the corresponding >>>help(py_fact.AA) documentation. For example, CUR, CMD, and SVD are handled slightly differently, as they factorize into three submatrices which requires appropriate arguments for row and column sampling. 2021-07-05T14:45:57,323 For PyTorch-SNMF 2021-07-05T14:45:57,323 ```python 2021-07-05T14:45:57,324 >>> data = torch.FloatTensor([[1.5], [1.2]]) 2021-07-05T14:45:57,324 >>> nmf_mdl = matrix_fact.NMF(data, num_bases=2) 2021-07-05T14:45:57,325 >>> nmf_mdl.factorize(niter=1000) 2021-07-05T14:45:57,325 ``` 2021-07-05T14:45:57,327 ### Very large datasets 2021-07-05T14:45:57,327 For handling larger datasets py_fact supports hdf5 via h5py. Usage is straight forward as h5py allows to map large numpy matrices to disk. Thus, instead of passing data as a np.array, you can simply send the corresponding hdf5 table. The following example shows how to apply py_fact to a random matrix that is entirely stored on disk. In this example the dataset does not have to fit into memory, the resulting low-rank factors W,H have to. 2021-07-05T14:45:57,328 ```python 2021-07-05T14:45:57,329 >>> import h5py 2021-07-05T14:45:57,329 >>> import numpy as np 2021-07-05T14:45:57,330 >>> import matrix_fact 2021-07-05T14:45:57,330 >>> 2021-07-05T14:45:57,331 >>> file = h5py.File('myfile.hdf5', 'w') 2021-07-05T14:45:57,332 >>> file['dataset'] = np.random.random((100,1000)) 2021-07-05T14:45:57,332 >>> sivm_mdl = matrix_fact.SIVM(file['dataset'], num_bases=10) 2021-07-05T14:45:57,333 >>> sivm_mdl.factorize() 2021-07-05T14:45:57,333 ``` 2021-07-05T14:45:57,335 If the low-rank matrices W,H also do not fit into memory, they can be initialized as a h5py matrix. 2021-07-05T14:45:57,336 ```python 2021-07-05T14:45:57,336 >>> import h5py 2021-07-05T14:45:57,337 >>> import numpy as np 2021-07-05T14:45:57,338 >>> import matrix_fact 2021-07-05T14:45:57,338 >>> 2021-07-05T14:45:57,339 >>> file = h5py.File('myfile.hdf5', 'w') 2021-07-05T14:45:57,339 >>> file['dataset'] = np.random.random((100,1000)) 2021-07-05T14:45:57,340 >>> file['W'] = np.random.random((100,10)) 2021-07-05T14:45:57,341 >>> file['H'] = np.random.random((10,1000)) 2021-07-05T14:45:57,341 >>> sivm_mdl = matrix_fact.SIVM(file['dataset'], num_bases=10) 2021-07-05T14:45:57,342 >>> sivm_mdl.W = file['W'] 2021-07-05T14:45:57,342 >>> sivm_mdl.H = file['H'] 2021-07-05T14:45:57,343 >>> sivm_mdl.factorize() 2021-07-05T14:45:57,343 ``` 2021-07-05T14:45:57,344 Please note that currently not all methods work well with hdf5. While they all accept hdf5 input matrices, they sometimes lead to very high memory consumption on intermediate computation steps. This is difficult to avoid unless we switch to a completely disk-based storage. 2021-07-05T14:45:57,743 running bdist_wheel 2021-07-05T14:45:57,759 running build 2021-07-05T14:45:57,760 running build_py 2021-07-05T14:45:58,096 creating build 2021-07-05T14:45:58,097 creating build/lib 2021-07-05T14:45:58,099 creating build/lib/matrix_fact 2021-07-05T14:45:58,101 copying matrix_fact/greedy.py -> build/lib/matrix_fact 2021-07-05T14:45:58,106 copying matrix_fact/cmde.py -> build/lib/matrix_fact 2021-07-05T14:45:58,110 copying matrix_fact/sivm.py -> build/lib/matrix_fact 2021-07-05T14:45:58,115 copying matrix_fact/cur.py -> build/lib/matrix_fact 2021-07-05T14:45:58,119 copying matrix_fact/dist.py -> build/lib/matrix_fact 2021-07-05T14:45:58,124 copying matrix_fact/__init__.py -> build/lib/matrix_fact 2021-07-05T14:45:58,127 copying matrix_fact/greedycur.py -> build/lib/matrix_fact 2021-07-05T14:45:58,132 copying matrix_fact/pmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,138 copying matrix_fact/base.py -> build/lib/matrix_fact 2021-07-05T14:45:58,145 copying matrix_fact/aa.py -> build/lib/matrix_fact 2021-07-05T14:45:58,151 copying matrix_fact/awnmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,156 copying matrix_fact/snmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,162 copying matrix_fact/nndsvd.py -> build/lib/matrix_fact 2021-07-05T14:45:58,167 copying matrix_fact/abnmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,173 copying matrix_fact/kmeans.py -> build/lib/matrix_fact 2021-07-05T14:45:58,178 copying matrix_fact/sivm_gsat.py -> build/lib/matrix_fact 2021-07-05T14:45:58,184 copying matrix_fact/laesa.py -> build/lib/matrix_fact 2021-07-05T14:45:58,190 copying matrix_fact/sivm_cur.py -> build/lib/matrix_fact 2021-07-05T14:45:58,195 copying matrix_fact/wnmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,200 copying matrix_fact/cursl.py -> build/lib/matrix_fact 2021-07-05T14:45:58,206 copying matrix_fact/svd.py -> build/lib/matrix_fact 2021-07-05T14:45:58,212 copying matrix_fact/torch_snmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,217 copying matrix_fact/bnmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,223 copying matrix_fact/cmeans.py -> build/lib/matrix_fact 2021-07-05T14:45:58,228 copying matrix_fact/cnmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,234 copying matrix_fact/nmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,241 copying matrix_fact/sivm_search.py -> build/lib/matrix_fact 2021-07-05T14:45:58,247 copying matrix_fact/pca.py -> build/lib/matrix_fact 2021-07-05T14:45:58,253 copying matrix_fact/chnmf.py -> build/lib/matrix_fact 2021-07-05T14:45:58,260 copying matrix_fact/sivm_sgreedy.py -> build/lib/matrix_fact 2021-07-05T14:45:58,282 installing to build/bdist.linux-armv7l/wheel 2021-07-05T14:45:58,283 running install 2021-07-05T14:45:58,285 running install_lib 2021-07-05T14:45:58,292 creating build/bdist.linux-armv7l 2021-07-05T14:45:58,293 creating build/bdist.linux-armv7l/wheel 2021-07-05T14:45:58,298 creating build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,300 copying build/lib/matrix_fact/greedy.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,305 copying build/lib/matrix_fact/cmde.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,309 copying build/lib/matrix_fact/sivm.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,314 copying build/lib/matrix_fact/cur.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,320 copying build/lib/matrix_fact/dist.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,326 copying build/lib/matrix_fact/__init__.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,331 copying build/lib/matrix_fact/greedycur.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,337 copying build/lib/matrix_fact/pmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,343 copying build/lib/matrix_fact/base.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,350 copying build/lib/matrix_fact/aa.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,356 copying build/lib/matrix_fact/awnmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,362 copying build/lib/matrix_fact/snmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,367 copying build/lib/matrix_fact/nndsvd.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,373 copying build/lib/matrix_fact/abnmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,379 copying build/lib/matrix_fact/kmeans.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,385 copying build/lib/matrix_fact/sivm_gsat.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,391 copying build/lib/matrix_fact/laesa.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,396 copying build/lib/matrix_fact/sivm_cur.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,402 copying build/lib/matrix_fact/wnmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,407 copying build/lib/matrix_fact/cursl.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,413 copying build/lib/matrix_fact/svd.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,419 copying build/lib/matrix_fact/torch_snmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,425 copying build/lib/matrix_fact/bnmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,431 copying build/lib/matrix_fact/cmeans.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,436 copying build/lib/matrix_fact/cnmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,442 copying build/lib/matrix_fact/nmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,449 copying build/lib/matrix_fact/sivm_search.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,455 copying build/lib/matrix_fact/pca.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,463 copying build/lib/matrix_fact/chnmf.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,472 copying build/lib/matrix_fact/sivm_sgreedy.py -> build/bdist.linux-armv7l/wheel/matrix_fact 2021-07-05T14:45:58,477 running install_egg_info 2021-07-05T14:45:58,535 running egg_info 2021-07-05T14:45:58,538 writing top-level names to matrix_fact.egg-info/top_level.txt 2021-07-05T14:45:58,540 writing matrix_fact.egg-info/PKG-INFO 2021-07-05T14:45:58,545 writing dependency_links to matrix_fact.egg-info/dependency_links.txt 2021-07-05T14:45:58,547 writing requirements to matrix_fact.egg-info/requires.txt 2021-07-05T14:45:58,569 reading manifest file 'matrix_fact.egg-info/SOURCES.txt' 2021-07-05T14:45:58,586 writing manifest file 'matrix_fact.egg-info/SOURCES.txt' 2021-07-05T14:45:58,589 Copying matrix_fact.egg-info to build/bdist.linux-armv7l/wheel/matrix_fact-1.1.1-py3.5.egg-info 2021-07-05T14:45:58,613 running install_scripts 2021-07-05T14:45:58,809 creating build/bdist.linux-armv7l/wheel/matrix_fact-1.1.1.dist-info/WHEEL 2021-07-05T14:45:59,141 Building wheel for matrix-fact (setup.py): finished with status 'done' 2021-07-05T14:45:59,145 Created wheel for matrix-fact: filename=matrix_fact-1.1.1-py3-none-any.whl size=57502 sha256=9541cc639e832e63b92907d4e604c43af9e0dde8c1f8fd7f0e067a11ed72fb1c 2021-07-05T14:45:59,146 Stored in directory: /tmp/pip-ephem-wheel-cache-pq6792mh/wheels/f1/fc/a2/dcaac7bdeaf666ca0ef04d7cf14ac4da1b6c9f948a425581a4 2021-07-05T14:45:59,167 Successfully built matrix-fact 2021-07-05T14:45:59,182 Removed build tracker: '/tmp/pip-req-tracker-vnsiqyvf'