From 46d42ab667ed9e999bb53f296eac97fc2e9d68bc Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Tue, 11 Apr 2023 17:16:03 +0000 Subject: automatic import of python-nanopq --- .gitignore | 1 + python-nanopq.spec | 263 +++++++++++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 265 insertions(+) create mode 100644 python-nanopq.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..959daba 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/nanopq-0.1.11.tar.gz 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 - 0.1.11-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..0beb998 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +12176bfad2e1f8de71c7c1c70ae8af45 nanopq-0.1.11.tar.gz -- cgit v1.2.3