summaryrefslogtreecommitdiff
path: root/python-nanopq.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-11 17:16:03 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-11 17:16:03 +0000
commit46d42ab667ed9e999bb53f296eac97fc2e9d68bc (patch)
tree7a063b8d1f5ecb3da25933a465cc6549bb8a7aaa /python-nanopq.spec
parent74cbebdcd2c7fd351d69cdf81b532c0d3fd6186f (diff)
automatic import of python-nanopq
Diffstat (limited to 'python-nanopq.spec')
-rw-r--r--python-nanopq.spec263
1 files changed, 263 insertions, 0 deletions
diff --git a/python-nanopq.spec b/python-nanopq.spec
new file mode 100644
index 0000000..33bdb74
--- /dev/null
+++ b/python-nanopq.spec
@@ -0,0 +1,263 @@
+%global _empty_manifest_terminate_build 0
+Name: python-nanopq
+Version: 0.1.11
+Release: 1
+Summary: Pure python implementation of product quantization for nearest neighbor search
+License: MIT
+URL: https://github.com/matsui528/nanopq
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c4/bb/187f489194c27d3dd233bd40081e1e7ba6c5899830428539664c7204a2d1/nanopq-0.1.11.tar.gz
+BuildArch: noarch
+
+Requires: python3-numpy
+Requires: python3-scipy
+
+%description
+# nanopq
+
+[![Build Status](https://github.com/matsui528/nanopq/actions/workflows/build.yml/badge.svg)](https://github.com/matsui528/nanopq/actions)
+[![Documentation Status](https://readthedocs.org/projects/nanopq/badge/?version=latest)](https://nanopq.readthedocs.io/en/latest/?badge=latest)
+[![PyPI version](https://badge.fury.io/py/nanopq.svg)](https://badge.fury.io/py/nanopq)
+[![Downloads](https://pepy.tech/badge/nanopq)](https://pepy.tech/project/nanopq)
+
+Nano Product Quantization (nanopq): a vanilla implementation of Product Quantization (PQ) and Optimized Product Quantization (OPQ) written in pure python without any third party dependencies.
+
+
+## Installing
+You can install the package via pip. This library works with Python 3.5+ on linux.
+```
+pip install nanopq
+```
+
+## [Documentation](https://nanopq.readthedocs.io/en/latest/index.html)
+- [Tutorial](https://nanopq.readthedocs.io/en/latest/source/tutorial.html)
+- [API](https://nanopq.readthedocs.io/en/latest/source/api.html)
+
+## Example
+
+```python
+import nanopq
+import numpy as np
+
+N, Nt, D = 10000, 2000, 128
+X = np.random.random((N, D)).astype(np.float32) # 10,000 128-dim vectors to be indexed
+Xt = np.random.random((Nt, D)).astype(np.float32) # 2,000 128-dim vectors for training
+query = np.random.random((D,)).astype(np.float32) # a 128-dim query vector
+
+# Instantiate with M=8 sub-spaces
+pq = nanopq.PQ(M=8)
+
+# Train codewords
+pq.fit(Xt)
+
+# Encode to PQ-codes
+X_code = pq.encode(X) # (10000, 8) with dtype=np.uint8
+
+# Results: create a distance table online, and compute Asymmetric Distance to each PQ-code
+dists = pq.dtable(query).adist(X_code) # (10000, )
+```
+
+## Author
+- [Yusuke Matsui](http://yusukematsui.me)
+
+## Contributors
+- [@calvinmccarter](https://github.com/calvinmccarter) implemented parametric initialization for OPQ ([#14](https://github.com/matsui528/nanopq/pull/14))
+- [@de9uch1](https://github.com/de9uch1) exntended the interface to the faiss so that OPQ can be handled ([#19](https://github.com/matsui528/nanopq/pull/19))
+
+
+## Reference
+- [H. Jegou, M. Douze, and C. Schmid, "Product Quantization for Nearest Neighbor Search", IEEE TPAMI 2011](https://ieeexplore.ieee.org/document/5432202/) (the original paper of PQ)
+- [T. Ge, K. He, Q. Ke, and J. Sun, "Optimized Product Quantization", IEEE TPAMI 2014](https://ieeexplore.ieee.org/document/6678503/) (the original paper of OPQ)
+- [Y. Matsui, Y. Uchida, H. Jegou, and S. Satoh, "A Survey of Product Quantization", ITE MTA 2018](https://www.jstage.jst.go.jp/article/mta/6/1/6_2/_pdf/) (a survey paper of PQ)
+- [PQ in faiss](https://github.com/facebookresearch/faiss/wiki/Faiss-building-blocks:-clustering,-PCA,-quantization#pq-encoding--decoding) (Faiss contains an optimized implementation of PQ. [See the difference to ours here](https://nanopq.readthedocs.io/en/latest/source/tutorial.html#difference-from-pq-in-faiss))
+- [Rayuela.jl](https://github.com/una-dinosauria/Rayuela.jl) (Julia implementation of several encoding algorithms including PQ and OPQ)
+- [PQk-means](https://github.com/DwangoMediaVillage/pqkmeans) (clustering on PQ-codes. The implementation of nanopq is compatible to [that of PQk-means](https://github.com/DwangoMediaVillage/pqkmeans/blob/master/tutorial/1_pqkmeans.ipynb))
+- [Rii](https://github.com/matsui528/rii) (IVFPQ-based ANN algorithm using nanopq)
+- [Product quantization in Faiss and from scratch](https://www.youtube.com/watch?v=PNVJvZEkuXo) (Related tutorial)
+
+
+
+
+%package -n python3-nanopq
+Summary: Pure python implementation of product quantization for nearest neighbor search
+Provides: python-nanopq
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-nanopq
+# nanopq
+
+[![Build Status](https://github.com/matsui528/nanopq/actions/workflows/build.yml/badge.svg)](https://github.com/matsui528/nanopq/actions)
+[![Documentation Status](https://readthedocs.org/projects/nanopq/badge/?version=latest)](https://nanopq.readthedocs.io/en/latest/?badge=latest)
+[![PyPI version](https://badge.fury.io/py/nanopq.svg)](https://badge.fury.io/py/nanopq)
+[![Downloads](https://pepy.tech/badge/nanopq)](https://pepy.tech/project/nanopq)
+
+Nano Product Quantization (nanopq): a vanilla implementation of Product Quantization (PQ) and Optimized Product Quantization (OPQ) written in pure python without any third party dependencies.
+
+
+## Installing
+You can install the package via pip. This library works with Python 3.5+ on linux.
+```
+pip install nanopq
+```
+
+## [Documentation](https://nanopq.readthedocs.io/en/latest/index.html)
+- [Tutorial](https://nanopq.readthedocs.io/en/latest/source/tutorial.html)
+- [API](https://nanopq.readthedocs.io/en/latest/source/api.html)
+
+## Example
+
+```python
+import nanopq
+import numpy as np
+
+N, Nt, D = 10000, 2000, 128
+X = np.random.random((N, D)).astype(np.float32) # 10,000 128-dim vectors to be indexed
+Xt = np.random.random((Nt, D)).astype(np.float32) # 2,000 128-dim vectors for training
+query = np.random.random((D,)).astype(np.float32) # a 128-dim query vector
+
+# Instantiate with M=8 sub-spaces
+pq = nanopq.PQ(M=8)
+
+# Train codewords
+pq.fit(Xt)
+
+# Encode to PQ-codes
+X_code = pq.encode(X) # (10000, 8) with dtype=np.uint8
+
+# Results: create a distance table online, and compute Asymmetric Distance to each PQ-code
+dists = pq.dtable(query).adist(X_code) # (10000, )
+```
+
+## Author
+- [Yusuke Matsui](http://yusukematsui.me)
+
+## Contributors
+- [@calvinmccarter](https://github.com/calvinmccarter) implemented parametric initialization for OPQ ([#14](https://github.com/matsui528/nanopq/pull/14))
+- [@de9uch1](https://github.com/de9uch1) exntended the interface to the faiss so that OPQ can be handled ([#19](https://github.com/matsui528/nanopq/pull/19))
+
+
+## Reference
+- [H. Jegou, M. Douze, and C. Schmid, "Product Quantization for Nearest Neighbor Search", IEEE TPAMI 2011](https://ieeexplore.ieee.org/document/5432202/) (the original paper of PQ)
+- [T. Ge, K. He, Q. Ke, and J. Sun, "Optimized Product Quantization", IEEE TPAMI 2014](https://ieeexplore.ieee.org/document/6678503/) (the original paper of OPQ)
+- [Y. Matsui, Y. Uchida, H. Jegou, and S. Satoh, "A Survey of Product Quantization", ITE MTA 2018](https://www.jstage.jst.go.jp/article/mta/6/1/6_2/_pdf/) (a survey paper of PQ)
+- [PQ in faiss](https://github.com/facebookresearch/faiss/wiki/Faiss-building-blocks:-clustering,-PCA,-quantization#pq-encoding--decoding) (Faiss contains an optimized implementation of PQ. [See the difference to ours here](https://nanopq.readthedocs.io/en/latest/source/tutorial.html#difference-from-pq-in-faiss))
+- [Rayuela.jl](https://github.com/una-dinosauria/Rayuela.jl) (Julia implementation of several encoding algorithms including PQ and OPQ)
+- [PQk-means](https://github.com/DwangoMediaVillage/pqkmeans) (clustering on PQ-codes. The implementation of nanopq is compatible to [that of PQk-means](https://github.com/DwangoMediaVillage/pqkmeans/blob/master/tutorial/1_pqkmeans.ipynb))
+- [Rii](https://github.com/matsui528/rii) (IVFPQ-based ANN algorithm using nanopq)
+- [Product quantization in Faiss and from scratch](https://www.youtube.com/watch?v=PNVJvZEkuXo) (Related tutorial)
+
+
+
+
+%package help
+Summary: Development documents and examples for nanopq
+Provides: python3-nanopq-doc
+%description help
+# nanopq
+
+[![Build Status](https://github.com/matsui528/nanopq/actions/workflows/build.yml/badge.svg)](https://github.com/matsui528/nanopq/actions)
+[![Documentation Status](https://readthedocs.org/projects/nanopq/badge/?version=latest)](https://nanopq.readthedocs.io/en/latest/?badge=latest)
+[![PyPI version](https://badge.fury.io/py/nanopq.svg)](https://badge.fury.io/py/nanopq)
+[![Downloads](https://pepy.tech/badge/nanopq)](https://pepy.tech/project/nanopq)
+
+Nano Product Quantization (nanopq): a vanilla implementation of Product Quantization (PQ) and Optimized Product Quantization (OPQ) written in pure python without any third party dependencies.
+
+
+## Installing
+You can install the package via pip. This library works with Python 3.5+ on linux.
+```
+pip install nanopq
+```
+
+## [Documentation](https://nanopq.readthedocs.io/en/latest/index.html)
+- [Tutorial](https://nanopq.readthedocs.io/en/latest/source/tutorial.html)
+- [API](https://nanopq.readthedocs.io/en/latest/source/api.html)
+
+## Example
+
+```python
+import nanopq
+import numpy as np
+
+N, Nt, D = 10000, 2000, 128
+X = np.random.random((N, D)).astype(np.float32) # 10,000 128-dim vectors to be indexed
+Xt = np.random.random((Nt, D)).astype(np.float32) # 2,000 128-dim vectors for training
+query = np.random.random((D,)).astype(np.float32) # a 128-dim query vector
+
+# Instantiate with M=8 sub-spaces
+pq = nanopq.PQ(M=8)
+
+# Train codewords
+pq.fit(Xt)
+
+# Encode to PQ-codes
+X_code = pq.encode(X) # (10000, 8) with dtype=np.uint8
+
+# Results: create a distance table online, and compute Asymmetric Distance to each PQ-code
+dists = pq.dtable(query).adist(X_code) # (10000, )
+```
+
+## Author
+- [Yusuke Matsui](http://yusukematsui.me)
+
+## Contributors
+- [@calvinmccarter](https://github.com/calvinmccarter) implemented parametric initialization for OPQ ([#14](https://github.com/matsui528/nanopq/pull/14))
+- [@de9uch1](https://github.com/de9uch1) exntended the interface to the faiss so that OPQ can be handled ([#19](https://github.com/matsui528/nanopq/pull/19))
+
+
+## Reference
+- [H. Jegou, M. Douze, and C. Schmid, "Product Quantization for Nearest Neighbor Search", IEEE TPAMI 2011](https://ieeexplore.ieee.org/document/5432202/) (the original paper of PQ)
+- [T. Ge, K. He, Q. Ke, and J. Sun, "Optimized Product Quantization", IEEE TPAMI 2014](https://ieeexplore.ieee.org/document/6678503/) (the original paper of OPQ)
+- [Y. Matsui, Y. Uchida, H. Jegou, and S. Satoh, "A Survey of Product Quantization", ITE MTA 2018](https://www.jstage.jst.go.jp/article/mta/6/1/6_2/_pdf/) (a survey paper of PQ)
+- [PQ in faiss](https://github.com/facebookresearch/faiss/wiki/Faiss-building-blocks:-clustering,-PCA,-quantization#pq-encoding--decoding) (Faiss contains an optimized implementation of PQ. [See the difference to ours here](https://nanopq.readthedocs.io/en/latest/source/tutorial.html#difference-from-pq-in-faiss))
+- [Rayuela.jl](https://github.com/una-dinosauria/Rayuela.jl) (Julia implementation of several encoding algorithms including PQ and OPQ)
+- [PQk-means](https://github.com/DwangoMediaVillage/pqkmeans) (clustering on PQ-codes. The implementation of nanopq is compatible to [that of PQk-means](https://github.com/DwangoMediaVillage/pqkmeans/blob/master/tutorial/1_pqkmeans.ipynb))
+- [Rii](https://github.com/matsui528/rii) (IVFPQ-based ANN algorithm using nanopq)
+- [Product quantization in Faiss and from scratch](https://www.youtube.com/watch?v=PNVJvZEkuXo) (Related tutorial)
+
+
+
+
+%prep
+%autosetup -n nanopq-0.1.11
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-nanopq -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1.11-1
+- Package Spec generated