diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm index b3723d4069..2e8f7c1331 100644 --- a/gnu/packages/graph.scm +++ b/gnu/packages/graph.scm @@ -22,6 +22,7 @@ (define-module (gnu packages graph) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix packages) + #:use-module (guix utils) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system python) @@ -42,6 +43,7 @@ (define-module (gnu packages graph) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages statistics) + #:use-module (gnu packages swig) #:use-module (gnu packages time) #:use-module (gnu packages xml)) @@ -322,3 +324,51 @@ (define-public faiss vectors of any size, up to ones that possibly do not fit in RAM. It also contains supporting code for evaluation and parameter tuning.") (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.")))