fastFM: A Library for Factorization Machines

Overview

Citing fastFM

The library fastFM is an academic project. The time and resources spent developing fastFM are therefore justified by the number of citations of the software. If you publish scientific articles using fastFM, please cite the following article (bibtex entry citation.bib).

Bayer, I. "fastFM: A Library for Factorization Machines" Journal of Machine Learning Research 17, pp. 1-5 (2016)

fastFM: A Library for Factorization Machines

https://travis-ci.org/ibayer/fastFM.svg?branch=master

This repository allows you to use Factorization Machines in Python (2.7 & 3.x) with the well known scikit-learn API. All performance critical code has been written in C and wrapped with Cython. fastFM provides stochastic gradient descent (SGD) and coordinate descent (CD) optimization routines as well as Markov Chain Monte Carlo (MCMC) for Bayesian inference. The solvers can be used for regression, classification and ranking problems. Detailed usage instructions can be found in the online documentation and on arXiv.

Supported Operating Systems

fastFM has a continuous integration / testing servers (Travis) for Linux (Ubuntu 14.04 LTS) and OS X Mavericks. Other OSs are not actively supported.

Usage

from fastFM import als
fm = als.FMRegression(n_iter=1000, init_stdev=0.1, rank=2, l2_reg_w=0.1, l2_reg_V=0.5)
fm.fit(X_train, y_train)
y_pred = fm.predict(X_test)

Tutorials and other information are available here. The C code is available as subrepository and provides a stand alone command line interface. If you still have questions after reading the documentation please open an issue at GitHub.

Task Solver Loss
Regression als, mcmc, sgd Square Loss
Classification als, mcmc, sgd Probit(Map), Probit, Sigmoid
Ranking sgd BPR

Supported solvers and tasks

Installation

binary install (64bit only)

pip install fastFM

source install

Please make sure, that Python and OS bit version agree, e.g. 32bit Python on 64bit OS won't work.

# Install cblas and python-dev header (Linux only).
# - cblas can be installed with libatlas-base-dev or libopenblas-dev (Ubuntu)
$ sudo apt-get install python-dev libopenblas-dev

# Clone the repo including submodules (or clone + `git submodule update --init --recursive`)
$ git clone --recursive https://github.com/ibayer/fastFM.git

# Enter the root directory
$ cd fastFM

# Install Python dependencies (Cython>=0.22, numpy, pandas, scipy, scikit-learn)
$ pip install -r ./requirements.txt

# Compile the C extension.
$ make                      # build with default python version (python)
$ PYTHON=python3 make       # build with custom python version (python3)

# Install fastFM
$ pip install .

Tests

The Python tests (pip install nose) can be run with: nosetests fastFM/fastFM/tests

Please refer to the fastFM-core README for instruction on how to run the C tests at fastFM/fastFM-core/src/tests.

Contribution

  • Star this repository: keeps contributors motivated
  • Open an issue: report bugs or suggest improvements
  • Fix errors in the documentation: small changes matter
  • Contribute code

Contributions are very welcome! Since this project lives on GitHub we recommend to open a pull request (PR) for code contributions as early as possible. This is the fastest way to get feedback and allows Travis CI to run checks on your changes.

Most information you need to setup your development environment can be learned by adapting the great instructions on https://github.com/scikit-learn/scikit-learn/blob/master/CONTRIBUTING.md . Please ensure that your contribution conforms to the PEP8 Coding Style and includes unit tests where appropriate. More valuable guidelines that apply to fastFM can be found at http://scikit-learn.org/stable/developers/contributing.html#coding-guidelines .

Contributors

License: BSD

Comments
  • Easy installation on mac

    Easy installation on mac

    Hello,

    I was wondering if there was an easy way to install FastFM on mac, because I have followed all the instructions of the updated readme but only the last command fails :

    In my terminal, when I exectue in the FastFM folder 'sudo pip install -e .' , I get :

    fastFM/ffm.c:7789:32: warning: unused function '__pyx_f_5numpy_get_array_base' [-Wunused-function] static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { ^ 21 warnings generated. gcc -bundle -undefined dynamic_lookup -L/Users/edmondjacoupeau/anaconda/lib -arch x86_64 -arch x86_64 build/temp.macosx-10.5-x86_64-2.7/fastFM/ffm.o -LfastFM/ -LfastFM-core/bin/ -LfastFM-core/externals/CXSparse/Lib/ -L/usr/lib/ -L/usr/lib/atlas-base/ -L/Users/edmondjacoupeau/anaconda/lib -lm -lfastfm -lcxsparse -lgsl -lgslcblas -lglib-2.0 -o /Users/edmondjacoupeau/fastFM/ffm.so ld: warning: directory not found for option '-LfastFM-core/bin/' ld: warning: directory not found for option '-L/usr/lib/atlas-base/' ld: library not found for -lfastfm clang: error: linker command failed with exit code 1 (use -v to see invocation) error: command 'gcc' failed with exit status 1


    Command "/Users/edmondjacoupeau/anaconda/bin/python -c "import setuptools, tokenize; file='/Users/edmondjacoupeau/fastFM/setup.py'; exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" develop --no-deps" failed with error code 1 in /Users/edmondjacoupeau/fastFM

    Do I have forgotten something ?

    opened by edmondja 23
  • Error Installing on CentOS and RHEL platforms

    Error Installing on CentOS and RHEL platforms

    I followed all the install directions. Running make for the C parts seemed to finish without error but running python setup.py install creates the following error. I am on 64 bit Linux (mint). Any ideas?

    python setup.py install running install running build running build_py running build_ext skipping 'fastFM/ffm.c' Cython extension (up-to-date) building 'ffm' extension gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -IfastFM/ -IfastFM-core/include/ -IfastFM-core/externals/CXSparse/Include/ -I/usr/include/ -I/home/anaconda/lib/python2.7/site-packages/numpy/core/include -I/home/anaconda/include/python2.7 -c fastFM/ffm.c -o build/temp.linux-x86_64-2.7/fastFM/ffm.o In file included from /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1781:0, from /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:18, from /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:4, from fastFM/ffm.c:252: /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] #warning "Using deprecated NumPy API, disable it by "
    ^ In file included from /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:27:0, from /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:4, from fastFM/ffm.c:252: /home/anaconda/lib/python2.7/site-packages/numpy/core/include/numpy/__multiarray_api.h:1634:1: warning: ‘_import_array’ defined but not used [-Wunused-function] _import_array(void) ^ gcc -pthread -shared -L/home/anaconda/lib -Wl,-rpath=/home/anaconda/lib,--no-as-needed build/temp.linux-x86_64-2.7/fastFM/ffm.o -LfastFM/ -LfastFM-core/bin/ -LfastFM-core/externals/CXSparse/Lib/ -L/usr/lib/ -L/usr/lib/atlas-base/ -L/home/anaconda/lib -lm -lfastfm -lcxsparse -lcblas -lpython2.7 -o build/lib.linux-x86_64-2.7/ffm.so /usr/bin/ld: cannot find -lfastfm collect2: error: ld returned 1 exit status error: command 'gcc' failed with exit status 1

    opened by BrianMiner 21
  • Understanding MCMC and n_more_iter

    Understanding MCMC and n_more_iter

    MCMC seems to be sensitive to the number of iterations between fit_predict calls. Setting n_more_iter=1 has an optimal RMSE of 0.884 at step 27. With n_more_iter=10, RMSE is at 0.860 and still improving at 10 iterations (equivalent to 100 with a step of 1). The documentation mentions "We can warm_start every fastFM model which allows us to calculate custom statistics during the model fitting process efficiently", which seems to suggest this sensitivity shouldn't be present.

    Code excerpts and results below:

    fm = mcmc.FMRegression(n_iter=0, rank=10)
    fm.fit_predict(X_train, y_train, X_test)
    for i in range(100):
        y_pred = fm.fit_predict(X_train, y_train, X_test, n_more_iter=1)
        y_pred[y_pred > 5] = 5
        y_pred[y_pred < 1] = 1
        print(i, np.sqrt(mean_squared_error(y_pred, y_test)))
    
    0 1.04720819915
    1 0.97778708587
    2 0.948017085861
    3 0.93420488937
    4 0.927061672571
    5 0.922935100294
    6 0.920257539721
    7 0.918207455438
    8 0.916209819939
    9 0.913894249208
    10 0.911193471613
    11 0.908216022258
    12 0.905165877765
    13 0.902210412052
    14 0.899446393313
    15 0.896925703595
    16 0.894664102177
    17 0.892659400427
    18 0.890901483694
    19 0.889378630713
    20 0.888077107425
    21 0.886984550257
    22 0.886090970488
    23 0.88538765354
    24 0.884863438543
    25 0.884506506975
    26 0.884306239634
    27 0.884247226983
    28 0.884317448473
    29 0.884505712397
    30 0.884800603791
    31 0.885189631326
    32 0.885661840403
    33 0.886204648292
    34 0.886803484806
    35 0.8874511923
    36 0.888143165709
    37 0.888869261405
    38 0.889633023158
    39 0.890425723873
    40 0.891229955936
    41 0.892040331705
    42 0.892863900969
    43 0.893707463792
    44 0.894571302645
    45 0.895459171301
    46 0.896382680339
    47 0.897345726293
    48 0.8983542138
    49 0.899390885256
    50 0.900449139443
    51 0.90153494656
    52 0.902640912205
    53 0.903777024948
    54 0.904930834814
    55 0.906096794935
    56 0.907275765877
    57 0.9084718919
    58 0.909667324754
    59 0.910873466425
    60 0.912084967428
    61 0.913287204773
    62 0.914474364239
    63 0.915653122817
    64 0.916826161945
    65 0.917994888944
    66 0.919162248375
    67 0.920329277189
    68 0.92149676688
    69 0.922659246729
    70 0.923810308867
    71 0.924949669371
    72 0.926074311282
    73 0.927179794147
    74 0.928264040074
    75 0.929326802974
    76 0.930376434434
    77 0.9314191654
    78 0.932455845704
    79 0.933482129994
    80 0.93449735718
    81 0.935486636427
    82 0.936467682892
    83 0.937443712518
    84 0.938410321158
    85 0.939356840954
    86 0.94027321806
    87 0.941148746045
    88 0.942005000857
    89 0.9428498981
    90 0.943684777878
    91 0.944508612458
    92 0.945317518167
    93 0.946115254746
    94 0.946898829726
    95 0.947669244301
    96 0.948434140619
    97 0.949193065287
    98 0.949947628213
    99 0.950688137695
    
    fm = mcmc.FMRegression(n_iter=0, rank=10)
    fm.fit_predict(X_train, y_train, X_test)
    for i in range(10):
        y_pred = fm.fit_predict(X_train, y_train, X_test, n_more_iter=10)
        y_pred[y_pred > 5] = 5
        y_pred[y_pred < 1] = 1
        print(i, np.sqrt(mean_squared_error(y_pred, y_test)))
    
    0 0.911849673248
    1 0.902846141012
    2 0.89065879739
    3 0.880330818455
    4 0.874373355886
    5 0.870324418211
    6 0.866544031989
    7 0.863735153323
    8 0.861829622252
    9 0.860483981533
    
    opened by merrellb 15
  • nosetest failed

    nosetest failed

    [email protected]:~/github$ sudo pip install -e fastFM/ Obtaining file:///home/ubgpu/github/fastFM Installing collected packages: fastFM Running setup.py develop for fastFM Successfully installed fastFM [email protected]:~/github$

    [email protected]:~/github/fastFM/fastFM/tests$ sudo pip install nose Requirement already satisfied (use --upgrade to upgrade): nose in /usr/lib/python3/dist-packages [email protected]:~/github/fastFM/fastFM/tests$ [email protected]:~/github/fastFM/fastFM/tests$ [email protected]:~/github/fastFM/fastFM/tests$ sudo pip2 install nose You are using pip version 7.0.3, however version 7.1.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Requirement already satisfied (use --upgrade to upgrade): nose in /usr/lib/python2.7/dist-packages [email protected]:~/github/fastFM/fastFM/tests$ [email protected]:~/github/fastFM/fastFM/tests$ [email protected]:~/github/fastFM/fastFM/tests$ [email protected]:~/github/fastFM/fastFM/tests$ nosetests

    EEEEEEEEE

    ERROR: Failure: ImportError (No module named fastFM)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_als.py", line 7, in from fastFM import als ImportError: No module named fastFM

    ERROR: Failure: ImportError (No module named fastFM)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_base.py", line 7, in from fastFM import als ImportError: No module named fastFM

    ERROR: Failure: ImportError (No module named fastFM.datasets)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_datasets.py", line 4, in from fastFM.datasets import make_user_item_regression ImportError: No module named fastFM.datasets

    ERROR: Failure: ImportError (No module named ffm)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_ffm.py", line 8, in import ffm ImportError: No module named ffm

    ERROR: Failure: ImportError (No module named fastFM)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_mcmc.py", line 7, in from fastFM import mcmc ImportError: No module named fastFM

    ERROR: Failure: ImportError (No module named fastFM)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_ranking.py", line 6, in from fastFM import bpr ImportError: No module named fastFM

    ERROR: Failure: ImportError (No module named fastFM)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_sgd.py", line 7, in from fastFM import sgd ImportError: No module named fastFM

    ERROR: Failure: ImportError (No module named fastFM.bpr)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_transform.py", line 10, in from fastFM.bpr import FMRecommender ImportError: No module named fastFM.bpr

    ERROR: Failure: ImportError (No module named fastFM.utils)

    Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/home/ubgpu/github/fastFM/fastFM/tests/test_utils.py", line 5, in from fastFM.utils import kendall_tau ImportError: No module named fastFM.utils


    Ran 9 tests in 0.305s

    FAILED (errors=9) [email protected]:~/github/fastFM/fastFM/tests$

    invalid 
    opened by andyyuan78 15
  • ubuntu 16.04: installation by pip - problem with cython

    ubuntu 16.04: installation by pip - problem with cython

    I've tried to install fastFM by pip, but I've got error from Cython:

     sudo -H pip install fastFM
    Collecting fastFM
      Using cached fastFM-0.2.6.tar.gz
    Requirement already satisfied: numpy in /usr/local/lib/python2.7/dist-packages (from fastFM)
    Requirement already satisfied: scikit-learn in /usr/local/lib/python2.7/dist-packages (from fastFM)
    Requirement already satisfied: scipy in /usr/local/lib/python2.7/dist-packages (from fastFM)
    Building wheels for collected packages: fastFM
      Running setup.py bdist_wheel for fastFM ... error
      Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-bekvHl/fastFM/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/tmpzTr2wHpip-wheel- --python-tag cp27:
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-2.7
      creating build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/datasets.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/utils.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/sgd.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/bpr.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/__init__.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/als.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/base.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/mcmc.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/validation.py -> build/lib.linux-x86_64-2.7/fastFM
      copying fastFM/transform_.py -> build/lib.linux-x86_64-2.7/fastFM
      running build_ext
      cythoning fastFM/ffm.pyx to fastFM/ffm.c
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Author: Immanuel Bayer
      # License: BSD 3 clause
      
      cimport cffm
             ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:4:8: 'cffm.pxd' not found
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Author: Immanuel Bayer
      # License: BSD 3 clause
      
      cimport cffm
      from cffm cimport cs_di, ffm_param
      ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:5:0: 'cffm/cs_di.pxd' not found
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Author: Immanuel Bayer
      # License: BSD 3 clause
      
      cimport cffm
      from cffm cimport cs_di, ffm_param
      ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:5:0: 'cffm/ffm_param.pxd' not found
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          free(<void *> pt)
      
      
      # Create a CsMatrix object and return as a capsule
      def CsMatrix(X not None):
          cdef cffm.cs_di *p
              ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:23:9: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Create a FFMParam object and return as a capsule
      def FFMParam(fm):
          map_flags = {'classification': 10,
                       'regression': 20,
                       'ranking': 30}
          cdef cffm.ffm_param *p
              ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:57:9: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      import numpy as np
      
      
      # Destructor for cleaning up CsMatrix objects
      cdef del_CsMatrix(object obj):
          pt = <cffm.cs_di *> PyCapsule_GetPointer(obj, "CsMatrix")
               ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:17:10: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      
      
      # Create a CsMatrix object and return as a capsule
      def CsMatrix(X not None):
          cdef cffm.cs_di *p
          p = <cffm.cs_di *> malloc(sizeof(cffm.cs_di))
              ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:24:9: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          # Put the scipy data into the CSparse struct. This is just copying some
          # pointers.
          p.nzmax = X.data.shape[0]
          p.m = X.shape[0]
          p.n = X.shape[1]
          p.p = &indptr[0]
               ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:38:10: Cannot convert 'int *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          # pointers.
          p.nzmax = X.data.shape[0]
          p.m = X.shape[0]
          p.n = X.shape[1]
          p.p = &indptr[0]
          p.i = &indices[0]
               ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:39:10: Cannot convert 'int *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          p.nzmax = X.data.shape[0]
          p.m = X.shape[0]
          p.n = X.shape[1]
          p.p = &indptr[0]
          p.i = &indices[0]
          p.x = &data[0]
               ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:40:10: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                               <PyCapsule_Destructor>del_CsMatrix)
      
      
      # Destructor for cleaning up FFMParam objects
      cdef del_FFMParam(object obj):
          pt = <cffm.ffm_param *> PyCapsule_GetPointer(obj, "FFMParam")
               ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:48:10: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      def FFMParam(fm):
          map_flags = {'classification': 10,
                       'regression': 20,
                       'ranking': 30}
          cdef cffm.ffm_param *p
          p = <cffm.ffm_param *> malloc(sizeof(cffm.ffm_param))
              ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:58:9: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                      np.ndarray[np.float64_t, ndim = 2] V, X):
          assert X.shape[1] == len(w)
          assert X.shape[1] == V.shape[1]
          X_ = CsMatrix(X)
          k = V.shape[0]
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                 ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:84:12: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          X_ = CsMatrix(X)
          k = V.shape[0]
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
               np.zeros(X.shape[0], dtype=np.float64)
          cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                          ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:87:21: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          X_ = CsMatrix(X)
          k = V.shape[0]
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
               np.zeros(X.shape[0], dtype=np.float64)
          cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:87:27: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          X_ = CsMatrix(X)
          k = V.shape[0]
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
               np.zeros(X.shape[0], dtype=np.float64)
          cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                                       ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:87:34: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          X_ = CsMatrix(X)
          k = V.shape[0]
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
               np.zeros(X.shape[0], dtype=np.float64)
          cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                                                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:87:59: Cannot convert 'float64_t *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          assert X.shape[0] == len(y) # test shapes
          n_features = X.shape[1]
          X_ = CsMatrix(X)
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          param = FFMParam(fm)
          pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                     ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:97:16: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      
      def ffm_als_fit(fm, X, double[:] y):
          assert X.shape[0] == len(y) # test shapes
          n_features = X.shape[1]
          X_ = CsMatrix(X)
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                 ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:95:12: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          else:
              w_0 = 0
              w = np.zeros(n_features, dtype=np.float64)
              V = np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                          ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:112:21: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          else:
              w_0 = 0
              w = np.zeros(n_features, dtype=np.float64)
              V = np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:112:27: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          else:
              w_0 = 0
              w = np.zeros(n_features, dtype=np.float64)
              V = np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                                                   ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:112:46: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              w_0 = 0
              w = np.zeros(n_features, dtype=np.float64)
              V = np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                           pt_X, &y[0], pt_param)
                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:113:27: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          assert X.shape[1] == len(y) # test shapes
          n_features = X.shape[0]
          X_ = CsMatrix(X)
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          param = FFMParam(fm)
          pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                     ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:128:16: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          sample access.
          """
          assert X.shape[1] == len(y) # test shapes
          n_features = X.shape[0]
          X_ = CsMatrix(X)
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                 ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:126:12: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                          ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:137:21: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:137:27: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                                                   ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:137:46: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                           pt_X, &y[0], pt_param)
                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:138:27: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      def ffm_fit_sgd_bpr(fm, X, np.ndarray[np.float64_t, ndim=2, mode='c'] pairs):
          n_features = X.shape[0]
          X_ = CsMatrix(X)
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
          param = FFMParam(fm)
          pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                     ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:147:16: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      
      
      def ffm_fit_sgd_bpr(fm, X, np.ndarray[np.float64_t, ndim=2, mode='c'] pairs):
          n_features = X.shape[0]
          X_ = CsMatrix(X)
          pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                 ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:145:12: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                              ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:156:25: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                                    ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:156:31: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                                                       ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:156:50: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
               np.zeros(n_features, dtype=np.float64)
          cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
               np.zeros((fm.rank, n_features), dtype=np.float64)
      
          cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                               pt_X, <double *> pairs.data, pairs.shape[0], pt_param)
                                    ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:157:31: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          assert X_train.shape[1] == X_test.shape[1]
          n_features = X_train.shape[1]
          param = FFMParam(fm)
          pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
          X_train_ = CsMatrix(X_train)
          pt_X_train = <cffm.cs_di *> PyCapsule_GetPointer(X_train_, "CsMatrix")
                       ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:168:18: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          param = FFMParam(fm)
          pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
          X_train_ = CsMatrix(X_train)
          pt_X_train = <cffm.cs_di *> PyCapsule_GetPointer(X_train_, "CsMatrix")
          X_test_ = CsMatrix(X_test)
          pt_X_test = <cffm.cs_di *> PyCapsule_GetPointer(X_test_, "CsMatrix")
                      ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:170:17: 'cs_di' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      def ffm_mcmc_fit_predict(fm, X_train, X_test, double[:] y):
          assert X_train.shape[0] == len(y)
          assert X_train.shape[1] == X_test.shape[1]
          n_features = X_train.shape[1]
          param = FFMParam(fm)
          pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                     ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:166:16: 'ffm_param' is not a type identifier
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          if fm.warm_start:
              hyper_param = fm.hyper_param_
          else:
              hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
          pt_param.n_hyper_param = n_hyper_param
          pt_param.hyper_param = <double *> hyper_param.data
                                ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:204:27: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          else:
              hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
          pt_param.n_hyper_param = n_hyper_param
          pt_param.hyper_param = <double *> hyper_param.data
      
          cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                   ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:206:30: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          else:
              hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
          pt_param.n_hyper_param = n_hyper_param
          pt_param.hyper_param = <double *> hyper_param.data
      
          cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                         ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:206:36: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          else:
              hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
          pt_param.n_hyper_param = n_hyper_param
          pt_param.hyper_param = <double *> hyper_param.data
      
          cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                                            ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:206:55: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          pt_param.n_hyper_param = n_hyper_param
          pt_param.hyper_param = <double *> hyper_param.data
      
          cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                    pt_X_train, pt_X_test,
                                    &y[0], <double *> y_pred.data,
                                   ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:208:30: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          pt_param.n_hyper_param = n_hyper_param
          pt_param.hyper_param = <double *> hyper_param.data
      
          cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                    pt_X_train, pt_X_test,
                                    &y[0], <double *> y_pred.data,
                                          ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:208:37: Cannot convert 'double *' to Python object
      
      Error compiling Cython file:
      ------------------------------------------------------------
      ...
          return (w_0, w, V), y_pred
      
      
      def cs_norm(X):
          X = CsMatrix(X)
          pt = <cffm.cs_di *> PyCapsule_GetPointer(X, "CsMatrix")
               ^
      ------------------------------------------------------------
      
      fastFM/ffm.pyx:216:10: 'cs_di' is not a type identifier
      building 'ffm' extension
      creating build/temp.linux-x86_64-2.7
      creating build/temp.linux-x86_64-2.7/fastFM
      x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -IfastFM/ -IfastFM-core/include/ -IfastFM-core/externals/CXSparse/Include/ -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c fastFM/ffm.c -o build/temp.linux-x86_64-2.7/fastFM/ffm.o
      fastFM/ffm.c:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.
       #error Do not use this file, it is the result of a failed Cython compilation.
        ^
      error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
      
      ----------------------------------------
      Failed building wheel for fastFM
      Running setup.py clean for fastFM
    Failed to build fastFM
    Installing collected packages: fastFM
      Running setup.py install for fastFM ... error
        Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-bekvHl/fastFM/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-_kRa9a-record/install-record.txt --single-version-externally-managed --compile:
        running install
        running build
        running build_py
        creating build
        creating build/lib.linux-x86_64-2.7
        creating build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/datasets.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/utils.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/sgd.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/bpr.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/__init__.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/als.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/base.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/mcmc.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/validation.py -> build/lib.linux-x86_64-2.7/fastFM
        copying fastFM/transform_.py -> build/lib.linux-x86_64-2.7/fastFM
        running build_ext
        cythoning fastFM/ffm.pyx to fastFM/ffm.c
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        # Author: Immanuel Bayer
        # License: BSD 3 clause
        
        cimport cffm
               ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:4:8: 'cffm.pxd' not found
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        # Author: Immanuel Bayer
        # License: BSD 3 clause
        
        cimport cffm
        from cffm cimport cs_di, ffm_param
        ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:5:0: 'cffm/cs_di.pxd' not found
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        # Author: Immanuel Bayer
        # License: BSD 3 clause
        
        cimport cffm
        from cffm cimport cs_di, ffm_param
        ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:5:0: 'cffm/ffm_param.pxd' not found
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            free(<void *> pt)
        
        
        # Create a CsMatrix object and return as a capsule
        def CsMatrix(X not None):
            cdef cffm.cs_di *p
                ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:23:9: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        # Create a FFMParam object and return as a capsule
        def FFMParam(fm):
            map_flags = {'classification': 10,
                         'regression': 20,
                         'ranking': 30}
            cdef cffm.ffm_param *p
                ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:57:9: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        import numpy as np
        
        
        # Destructor for cleaning up CsMatrix objects
        cdef del_CsMatrix(object obj):
            pt = <cffm.cs_di *> PyCapsule_GetPointer(obj, "CsMatrix")
                 ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:17:10: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        
        
        # Create a CsMatrix object and return as a capsule
        def CsMatrix(X not None):
            cdef cffm.cs_di *p
            p = <cffm.cs_di *> malloc(sizeof(cffm.cs_di))
                ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:24:9: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            # Put the scipy data into the CSparse struct. This is just copying some
            # pointers.
            p.nzmax = X.data.shape[0]
            p.m = X.shape[0]
            p.n = X.shape[1]
            p.p = &indptr[0]
                 ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:38:10: Cannot convert 'int *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            # pointers.
            p.nzmax = X.data.shape[0]
            p.m = X.shape[0]
            p.n = X.shape[1]
            p.p = &indptr[0]
            p.i = &indices[0]
                 ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:39:10: Cannot convert 'int *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            p.nzmax = X.data.shape[0]
            p.m = X.shape[0]
            p.n = X.shape[1]
            p.p = &indptr[0]
            p.i = &indices[0]
            p.x = &data[0]
                 ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:40:10: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
                                 <PyCapsule_Destructor>del_CsMatrix)
        
        
        # Destructor for cleaning up FFMParam objects
        cdef del_FFMParam(object obj):
            pt = <cffm.ffm_param *> PyCapsule_GetPointer(obj, "FFMParam")
                 ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:48:10: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        def FFMParam(fm):
            map_flags = {'classification': 10,
                         'regression': 20,
                         'ranking': 30}
            cdef cffm.ffm_param *p
            p = <cffm.ffm_param *> malloc(sizeof(cffm.ffm_param))
                ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:58:9: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
                        np.ndarray[np.float64_t, ndim = 2] V, X):
            assert X.shape[1] == len(w)
            assert X.shape[1] == V.shape[1]
            X_ = CsMatrix(X)
            k = V.shape[0]
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                   ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:84:12: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            X_ = CsMatrix(X)
            k = V.shape[0]
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
                 np.zeros(X.shape[0], dtype=np.float64)
            cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                            ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:87:21: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            X_ = CsMatrix(X)
            k = V.shape[0]
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
                 np.zeros(X.shape[0], dtype=np.float64)
            cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:87:27: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            X_ = CsMatrix(X)
            k = V.shape[0]
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
                 np.zeros(X.shape[0], dtype=np.float64)
            cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                                         ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:87:34: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            X_ = CsMatrix(X)
            k = V.shape[0]
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y =\
                 np.zeros(X.shape[0], dtype=np.float64)
            cffm.ffm_predict(&w_0, &w[0], <double *> V.data, pt_X, &y[0], k)
                                                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:87:59: Cannot convert 'float64_t *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            assert X.shape[0] == len(y) # test shapes
            n_features = X.shape[1]
            X_ = CsMatrix(X)
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            param = FFMParam(fm)
            pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                       ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:97:16: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        
        def ffm_als_fit(fm, X, double[:] y):
            assert X.shape[0] == len(y) # test shapes
            n_features = X.shape[1]
            X_ = CsMatrix(X)
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                   ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:95:12: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            else:
                w_0 = 0
                w = np.zeros(n_features, dtype=np.float64)
                V = np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                            ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:112:21: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            else:
                w_0 = 0
                w = np.zeros(n_features, dtype=np.float64)
                V = np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:112:27: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            else:
                w_0 = 0
                w = np.zeros(n_features, dtype=np.float64)
                V = np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                                                     ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:112:46: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
                w_0 = 0
                w = np.zeros(n_features, dtype=np.float64)
                V = np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_als_fit(&w_0, <double *> w.data, <double *> V.data,
                             pt_X, &y[0], pt_param)
                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:113:27: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            sample access.
            """
            assert X.shape[1] == len(y) # test shapes
            n_features = X.shape[0]
            X_ = CsMatrix(X)
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                   ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:126:12: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            assert X.shape[1] == len(y) # test shapes
            n_features = X.shape[0]
            X_ = CsMatrix(X)
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            param = FFMParam(fm)
            pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                       ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:128:16: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                            ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:137:21: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:137:27: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                                                     ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:137:46: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_fit(&w_0, <double *> w.data, <double *> V.data,
                             pt_X, &y[0], pt_param)
                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:138:27: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        def ffm_fit_sgd_bpr(fm, X, np.ndarray[np.float64_t, ndim=2, mode='c'] pairs):
            n_features = X.shape[0]
            X_ = CsMatrix(X)
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
            param = FFMParam(fm)
            pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                       ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:147:16: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        
        
        def ffm_fit_sgd_bpr(fm, X, np.ndarray[np.float64_t, ndim=2, mode='c'] pairs):
            n_features = X.shape[0]
            X_ = CsMatrix(X)
            pt_X = <cffm.cs_di *> PyCapsule_GetPointer(X_, "CsMatrix")
                   ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:145:12: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                                ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:156:25: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                                      ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:156:31: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            cdef np.ndarray[np.float64_t, ndim=1, mode='c'] w =\
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                                                         ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:156:50: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
                 np.zeros(n_features, dtype=np.float64)
            cdef np.ndarray[np.float64_t, ndim=2, mode='c'] V =\
                 np.zeros((fm.rank, n_features), dtype=np.float64)
        
            cffm.ffm_sgd_bpr_fit(&w_0, <double *> w.data, <double *> V.data,
                                 pt_X, <double *> pairs.data, pairs.shape[0], pt_param)
                                      ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:157:31: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            assert X_train.shape[1] == X_test.shape[1]
            n_features = X_train.shape[1]
            param = FFMParam(fm)
            pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
            X_train_ = CsMatrix(X_train)
            pt_X_train = <cffm.cs_di *> PyCapsule_GetPointer(X_train_, "CsMatrix")
                         ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:168:18: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            param = FFMParam(fm)
            pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
            X_train_ = CsMatrix(X_train)
            pt_X_train = <cffm.cs_di *> PyCapsule_GetPointer(X_train_, "CsMatrix")
            X_test_ = CsMatrix(X_test)
            pt_X_test = <cffm.cs_di *> PyCapsule_GetPointer(X_test_, "CsMatrix")
                        ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:170:17: 'cs_di' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
        def ffm_mcmc_fit_predict(fm, X_train, X_test, double[:] y):
            assert X_train.shape[0] == len(y)
            assert X_train.shape[1] == X_test.shape[1]
            n_features = X_train.shape[1]
            param = FFMParam(fm)
            pt_param = <cffm.ffm_param *> PyCapsule_GetPointer(param, "FFMParam")
                       ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:166:16: 'ffm_param' is not a type identifier
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            if fm.warm_start:
                hyper_param = fm.hyper_param_
            else:
                hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
            pt_param.n_hyper_param = n_hyper_param
            pt_param.hyper_param = <double *> hyper_param.data
                                  ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:204:27: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            else:
                hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
            pt_param.n_hyper_param = n_hyper_param
            pt_param.hyper_param = <double *> hyper_param.data
        
            cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                     ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:206:30: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            else:
                hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
            pt_param.n_hyper_param = n_hyper_param
            pt_param.hyper_param = <double *> hyper_param.data
        
            cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                           ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:206:36: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            else:
                hyper_param = np.zeros(n_hyper_param, dtype=np.float64)
            pt_param.n_hyper_param = n_hyper_param
            pt_param.hyper_param = <double *> hyper_param.data
        
            cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                                              ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:206:55: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            pt_param.n_hyper_param = n_hyper_param
            pt_param.hyper_param = <double *> hyper_param.data
        
            cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                      pt_X_train, pt_X_test,
                                      &y[0], <double *> y_pred.data,
                                     ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:208:30: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            pt_param.n_hyper_param = n_hyper_param
            pt_param.hyper_param = <double *> hyper_param.data
        
            cffm.ffm_mcmc_fit_predict(&w_0, <double *> w.data, <double *> V.data,
                                      pt_X_train, pt_X_test,
                                      &y[0], <double *> y_pred.data,
                                            ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:208:37: Cannot convert 'double *' to Python object
        
        Error compiling Cython file:
        ------------------------------------------------------------
        ...
            return (w_0, w, V), y_pred
        
        
        def cs_norm(X):
            X = CsMatrix(X)
            pt = <cffm.cs_di *> PyCapsule_GetPointer(X, "CsMatrix")
                 ^
        ------------------------------------------------------------
        
        fastFM/ffm.pyx:216:10: 'cs_di' is not a type identifier
        building 'ffm' extension
        creating build/temp.linux-x86_64-2.7
        creating build/temp.linux-x86_64-2.7/fastFM
        x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -IfastFM/ -IfastFM-core/include/ -IfastFM-core/externals/CXSparse/Include/ -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c fastFM/ffm.c -o build/temp.linux-x86_64-2.7/fastFM/ffm.o
        fastFM/ffm.c:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.
         #error Do not use this file, it is the result of a failed Cython compilation.
          ^
        error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
        
        ----------------------------------------
    Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-bekvHl/fastFM/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-_kRa9a-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-bekvHl/fastFM/
    
    
    bug help wanted 
    opened by mglowacki100 12
  • Pip install: Problems on OSX (Symbol not found: _cs_di_norm)

    Pip install: Problems on OSX (Symbol not found: _cs_di_norm)

    Installed from PyPI ("pip install fastfm") and I get the following error:

    Python 3.5.1 (default, Dec  9 2015, 00:25:02) 
    [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import ffm
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: dlopen(/Users/merrellb/.virtualenv/python3/lib/python3.5/site-packages/ffm.cpython-35m-darwin.so, 2): Symbol not found: _cs_di_norm
      Referenced from: /Users/merrellb/.virtualenv/python3/lib/python3.5/site-packages/ffm.cpython-35m-darwin.so
      Expected in: flat namespace
     in /Users/merrellb/.virtualenv/python3/lib/python3.5/site-packages/ffm.cpython-35m-darwin.so
    >>> 
    
    opened by merrellb 12
  • Cython wrapper build fix

    Cython wrapper build fix

    Hello. Seems user keys works only for private root repos, so I managed to make it work with user credentials encrypted via travis. Is it possible to make the dedicated user for that purpose?

    And the second question, why shouldn't we use Hunter? Maybe we can add eigen via ExternalProject_Add in cmake or smth similar specially for travis build, but does it worth it? Or you just want to cut out Hunter away?

    opened by AlexJoz 10
  • [Request] submit wheel for (many)Linux to PyPI

    [Request] submit wheel for (many)Linux to PyPI

    Please submit wheel for not only macos, but also linux to PyPI

    because installing fastFM on Docker fails, (installing on Ubuntu and Debian works fine)

    [email protected]:/# pip install fastFM
    Collecting fastFM
      Downloading fastFM-0.2.10.tar.gz (1.6MB)
        100% |████████████████████████████████| 1.6MB 784kB/s
    Requirement already satisfied: numpy in /usr/local/lib/python3.6/site-packages (from fastFM)
    Collecting scikit-learn (from fastFM)
      Downloading scikit_learn-0.19.1-cp36-cp36m-manylinux1_x86_64.whl (12.4MB)
        100% |████████████████████████████████| 12.4MB 125kB/s
    Requirement already satisfied: scipy in /usr/local/lib/python3.6/site-packages (from fastFM)
    Requirement already satisfied: cython in /usr/local/lib/python3.6/site-packages (from fastFM)
    Building wheels for collected packages: fastFM
      Running setup.py bdist_wheel for fastFM ... error
      Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ahqg4ru8/fastFM/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/tmpwpss_4uhpip-wheel- --python-tag cp36:
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-3.6
      creating build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/sgd.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/datasets.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/als.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/validation.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/utils.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/base.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/__init__.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/bpr.py -> build/lib.linux-x86_64-3.6/fastFM
      copying fastFM/mcmc.py -> build/lib.linux-x86_64-3.6/fastFM
      running build_ext
      skipping 'fastFM/ffm.c' Cython extension (up-to-date)
      building 'ffm' extension
      creating build/temp.linux-x86_64-3.6
      creating build/temp.linux-x86_64-3.6/fastFM
      gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -IfastFM/ -IfastFM-core/include/ -IfastFM-core/externals/CXSparse/Include/ -I/usr/local/lib/python3.6/site-packages/numpy/core/include -I/usr/local/include/python3.6m -c fastFM/ffm.c -o build/temp.linux-x86_64-3.6/fastFM/ffm.o
      In file included from /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/ndarraytypes.h:1809:0,
                       from /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/ndarrayobject.h:18,
                       from /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                       from fastFM/ffm.c:528:
      /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
       #warning "Using deprecated NumPy API, disable it by " \
        ^
      gcc -pthread -shared build/temp.linux-x86_64-3.6/fastFM/ffm.o -LfastFM/ -LfastFM-core/bin/ -L/usr/local/lib -lm -lfastfm -lpython3.6m -o build/lib.linux-x86_64-3.6/ffm.cpython-36m-x86_64-linux-gnu.so
      /usr/bin/ld: fastFM-core/bin//libfastfm.a(ffm_utils.o): unrecognized relocation (0x2a) in section `.text'
      /usr/bin/ld: final link failed: Bad value
      collect2: error: ld returned 1 exit status
      error: command 'gcc' failed with exit status 1
    
      ----------------------------------------
      Failed building wheel for fastFM
      Running setup.py clean for fastFM
    Failed to build fastFM
    Installing collected packages: scikit-learn, fastFM
      Running setup.py install for fastFM ... error
        Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ahqg4ru8/fastFM/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-ej8i3sar-record/install-record.txt --single-version-externally-managed --compile:
        running install
        running build
        running build_py
        creating build
        creating build/lib.linux-x86_64-3.6
        creating build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/sgd.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/datasets.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/als.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/validation.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/utils.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/base.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/__init__.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/bpr.py -> build/lib.linux-x86_64-3.6/fastFM
        copying fastFM/mcmc.py -> build/lib.linux-x86_64-3.6/fastFM
        running build_ext
        skipping 'fastFM/ffm.c' Cython extension (up-to-date)
        building 'ffm' extension
        creating build/temp.linux-x86_64-3.6
        creating build/temp.linux-x86_64-3.6/fastFM
        gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -IfastFM/ -IfastFM-core/include/ -IfastFM-core/externals/CXSparse/Include/ -I/usr/local/lib/python3.6/site-packages/numpy/core/include -I/usr/local/include/python3.6m -c fastFM/ffm.c -o build/temp.linux-x86_64-3.6/fastFM/ffm.o
        In file included from /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/ndarraytypes.h:1809:0,
                         from /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/ndarrayobject.h:18,
                         from /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                         from fastFM/ffm.c:528:
        /usr/local/lib/python3.6/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
         #warning "Using deprecated NumPy API, disable it by " \
          ^
        gcc -pthread -shared build/temp.linux-x86_64-3.6/fastFM/ffm.o -LfastFM/ -LfastFM-core/bin/ -L/usr/local/lib -lm -lfastfm -lpython3.6m -o build/lib.linux-x86_64-3.6/ffm.cpython-36m-x86_64-linux-gnu.so
        /usr/bin/ld: fastFM-core/bin//libfastfm.a(ffm_utils.o): unrecognized relocation (0x2a) in section `.text'
        /usr/bin/ld: final link failed: Bad value
        collect2: error: ld returned 1 exit status
        error: command 'gcc' failed with exit status 1
    
        ----------------------------------------
    Command "/usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ahqg4ru8/fastFM/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-ej8i3sar-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-ahqg4ru8/fastFM/
    
    help wanted 
    opened by henry0312 9
  • I get an error when I try to import it

    I get an error when I try to import it

    "dlopen(/Users/tanle/Desktop/recommender/lib/python2.7/site-packages/ffm.so, 2): Symbol not found: _cs_di_norm Referenced from: /Users/tanle/Desktop/recommender/lib/python2.7/site-packages/ffm.so Expected in: flat namespace in /Users/tanle/Desktop/recommender/lib/python2.7/site-packages/ffm.so"

    opened by tanql 8
  • sgd.FMRegression always predicts NaN values

    sgd.FMRegression always predicts NaN values

    I trained a SGD FM regression model, and when I made predictions with the model, all the predicted values are NaN. Upon a quick look on the model's learned coefficients (i.e., w0_, w_, and V_), most of them are NaNs.

    from __future__ import division
    from fastFM import sgd
    
    model = sgd.FMRegression()
    model.fit(Xtrain, ytrain)
    model.predict(Xvalid)  # all predicted values are NaNs.
    
    # Both Xtrain and Xvalid are CSC sparse matrices.
    

    MCMC and ALS work fine and actually produce reasonably good predictions for my particular task. Any thought on possible problems with SGD?

    OS: Ubuntu 16.04 Python version: 2.7.12 fastFM version: 0.2.5

    opened by chialikuo 8
  • Add manylinux1 build on travis

    Add manylinux1 build on travis

    This PR adds building manlinux1 wheels on travis-ci.

    This work mostly depends on @chittti 's work https://gist.github.com/chittti/c95de0bd1bab8340c34b59d1be21bb26 https://gist.github.com/chittti/bfa4f4fdc2d8ab9e8be01ce2dd087cce

    close https://github.com/ibayer/fastFM/issues/122

    opened by chezou 7
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • doc/index.rst
    • doc/tutorial.rst
    • examples/warm_start_als.py
    • examples/warm_start_mcmc.py
    • fastFM/bpr.py
    • fastFM/sgd.py
    • fastFM/tests/test_als.py
    • fastFM/validation.py

    Fixes:

    • Should read tuning rather than tunning.
    • Should read initialize rather than initalize.
    • Should read representation rather than reprensentation.
    • Should read refer rather than refere.
    • Should read continuous rather than continous.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 0
  • Update travis.yml for latest python releases.

    Update travis.yml for latest python releases.

    This PR will update the travis build process for new python versions ( i.e python 3.7, python 3.8, python 3.9 and python 3.10 ) and stop supporting the python 2 versions who went deprecated.

    opened by Carloscerq 0
  • will it work for third order categorical features interaction ?

    will it work for third order categorical features interaction ?

    Great code, thanks !

    Plese help to understand 1 will it work for third order categorical features interaction ? 2 will it run on Windows computer ?

    3 will it work for sparse data ?

    opened by Sandy4321 0
  • Source file type in PyPi

    Source file type in PyPi

    I trying to use the fastFM library. In Pypi https://pypi.org/project/fastFM/#files, I could see the download file is available only in .whl format. Is it possible to upload the source file type as well to pypi. It would be of great help if you can do that.

    Thanks

    opened by fcherat 0
Releases(0.2.11)
An Efficient and Effective Framework for Session-based Social Recommendation

SEFrame This repository contains the code for the paper "An Efficient and Effective Framework for Session-based Social Recommendation". Requirements P

Tianwen CHEN 23 Oct 26, 2022
Plex-recommender - Get movie recommendations based on your current PleX library

plex-recommender Description: Get movie/tv recommendations based on your current

5 Jul 19, 2022
Implementation of a hadoop based movie recommendation system

Implementation-of-a-hadoop-based-movie-recommendation-system 通过编写代码,设计一个基于Hadoop的电影推荐系统,通过此推荐系统的编写,掌握在Hadoop平台上的文件操作,数据处理的技能。windows 10 hadoop 2.8.3 p

汝聪(Ricardo) 5 Oct 02, 2022
A TensorFlow recommendation algorithm and framework in Python.

TensorRec A TensorFlow recommendation algorithm and framework in Python. NOTE: TensorRec is not under active development TensorRec will not be receivi

James Kirk 1.2k Jan 04, 2023
A tensorflow implementation of the RecoGCN model in a CIKM'19 paper, titled with "Relation-Aware Graph Convolutional Networks for Agent-Initiated Social E-Commerce Recommendation".

This repo contains a tensorflow implementation of RecoGCN and the experiment dataset Running the RecoGCN model python train.py Example training outp

xfl15 30 Nov 25, 2022
Spark-movie-lens - An on-line movie recommender using Spark, Python Flask, and the MovieLens dataset

A scalable on-line movie recommender using Spark and Flask This Apache Spark tutorial will guide you step-by-step into how to use the MovieLens datase

Jose A Dianes 794 Dec 23, 2022
A library of Recommender Systems

A library of Recommender Systems This repository provides a summary of our research on Recommender Systems. It includes our code base on different rec

MilaGraph 980 Jan 05, 2023
Detecting Beneficial Feature Interactions for Recommender Systems, AAAI 2021

Detecting Beneficial Feature Interactions for Recommender Systems (L0-SIGN) This is our implementation for the paper: Su, Y., Zhang, R., Erfani, S., &

26 Nov 22, 2022
QRec: A Python Framework for quick implementation of recommender systems (TensorFlow Based)

QRec is a Python framework for recommender systems (Supported by Python 3.7.4 and Tensorflow 1.14+) in which a number of influential and newly state-of-the-art recommendation models are implemented.

Yu 1.4k Dec 27, 2022
Movie Recommender System

Movie-Recommender-System Movie-Recommender-System is a web application using which a user can select his/her watched movie from list and system will r

1 Jul 14, 2022
It is a movie recommender web application which is developed using the Python.

Movie Recommendation 🍿 System Watch Tutorial for this project Source IMDB Movie 5000 Dataset Inspired from this original repository. Features Simple

Kushal Bhavsar 10 Dec 26, 2022
Pytorch domain library for recommendation systems

TorchRec (Experimental Release) TorchRec is a PyTorch domain library built to provide common sparsity & parallelism primitives needed for large-scale

Meta Research 1.3k Jan 05, 2023
Spotify API Recommnder System

This project will access your last listened songs on Spotify using its API, then it will request the user to select 5 favorite songs in that list, on which the API will proceed to make 50 recommendat

Kevin Luke 1 Dec 14, 2021
Deep recommender models using PyTorch.

Spotlight uses PyTorch to build both deep and shallow recommender models. By providing both a slew of building blocks for loss functions (various poin

Maciej Kula 2.8k Dec 29, 2022
Attentive Social Recommendation: Towards User And Item Diversities

ASR This is a Tensorflow implementation of the paper: Attentive Social Recommendation: Towards User And Item Diversities Preprint, https://arxiv.org/a

Dongsheng Luo 1 Nov 14, 2021
fastFM: A Library for Factorization Machines

Citing fastFM The library fastFM is an academic project. The time and resources spent developing fastFM are therefore justified by the number of citat

1k Dec 24, 2022
Knowledge-aware Coupled Graph Neural Network for Social Recommendation

KCGN AAAI-2021 《Knowledge-aware Coupled Graph Neural Network for Social Recommendation》 Environments python 3.8 pytorch-1.6 DGL 0.5.3 (https://github.

xhc 22 Nov 18, 2022
The official implementation of "DGCN: Diversified Recommendation with Graph Convolutional Networks" (WWW '21)

DGCN This is the official implementation of our WWW'21 paper: Yu Zheng, Chen Gao, Liang Chen, Depeng Jin, Yong Li, DGCN: Diversified Recommendation wi

FIB LAB, Tsinghua University 37 Dec 18, 2022
Code for MB-GMN, SIGIR 2021

MB-GMN Code for MB-GMN, SIGIR 2021 For Beibei data, run python .\labcode.py For Tmall data, run python .\labcode.py --data tmall --rank 2 For IJCAI

32 Dec 04, 2022
[ICDMW 2020] Code and dataset for "DGTN: Dual-channel Graph Transition Network for Session-based Recommendation"

DGTN: Dual-channel Graph Transition Network for Session-based Recommendation This repository contains PyTorch Implementation of ICDMW 2020 (NeuRec @ I

Yujia 25 Nov 17, 2022