gnu: Add python-faiss.

* gnu/packages/graph.scm (python-faiss): New variable.
This commit is contained in:
Ricardo Wurmus 2019-03-28 23:50:33 +01:00
parent 3e40318772
commit 51a9971ccb
No known key found for this signature in database
GPG Key ID: 197A5888235FACAC
1 changed files with 50 additions and 0 deletions

View File

@ -22,6 +22,7 @@
#:use-module (guix download) #:use-module (guix download)
#:use-module (guix git-download) #:use-module (guix git-download)
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (guix utils)
#:use-module (guix build-system cmake) #:use-module (guix build-system cmake)
#:use-module (guix build-system gnu) #:use-module (guix build-system gnu)
#:use-module (guix build-system python) #:use-module (guix build-system python)
@ -42,6 +43,7 @@
#:use-module (gnu packages python-web) #:use-module (gnu packages python-web)
#:use-module (gnu packages python-xyz) #:use-module (gnu packages python-xyz)
#:use-module (gnu packages statistics) #:use-module (gnu packages statistics)
#:use-module (gnu packages swig)
#:use-module (gnu packages time) #:use-module (gnu packages time)
#:use-module (gnu packages xml)) #:use-module (gnu packages xml))
@ -322,3 +324,51 @@ clustering of dense vectors. It contains algorithms that search in sets of
vectors of any size, up to ones that possibly do not fit in RAM. It also vectors of any size, up to ones that possibly do not fit in RAM. It also
contains supporting code for evaluation and parameter tuning.") contains supporting code for evaluation and parameter tuning.")
(license license:bsd-3))) (license license:bsd-3)))
(define-public python-faiss
(package (inherit faiss)
(name "python-faiss")
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _ (chdir "python") #t))
(add-after 'chdir 'build-swig
(lambda* (#:key inputs #:allow-other-keys)
(with-output-to-file "../makefile.inc"
(lambda ()
(let ((python-version ,(version-major+minor (package-version python))))
(format #t "\
PYTHONCFLAGS =-I~a/include/python~am/ -I~a/lib/python~a/site-packages/numpy/core/include
LIBS = -lpython~am -lfaiss
SHAREDFLAGS = -shared -fopenmp
CXXFLAGS = -fpermissive -std=c++11 -fopenmp -fPIC
CPUFLAGS = ~{~a ~}~%"
(assoc-ref inputs "python*") python-version
(assoc-ref inputs "python-numpy") python-version
python-version
(cons "-mpopcnt"
(list ,@(let ((system (or (%current-target-system)
(%current-system))))
(cond
((string-prefix? "x86_64" system)
'("-mavx" "-msse2"))
((string-prefix? "i686" system)
'("-msse2"))
(else
'())))))))))
(substitute* "Makefile"
(("../libfaiss.a") ""))
(invoke "make" "cpu"))))))
(inputs
`(("faiss" ,faiss)
("openblas" ,openblas)
("python*" ,python)
("swig" ,swig)))
(propagated-inputs
`(("python-matplotlib" ,python-matplotlib)
("python-numpy" ,python-numpy)))
(description "Faiss is a library for efficient similarity search and
clustering of dense vectors. This package provides Python bindings to the
Faiss library.")))