Skip to main content

Versatile end-to-end recommender system.

Project description

LibRecommender

Build CI Codecov pypi Downloads Codacy Badge Code style: black Ruff Documentation Status python versions License

Overview

LibRecommender is an easy-to-use recommender system focused on end-to-end recommendation process. It contains a training(libreco) and serving(libserving) module to let users quickly train and deploy different kinds of recommendation models.

The main features are:

  • Implements a number of popular recommendation algorithms such as FM, DIN, LightGCN etc. See full algorithm list.
  • A hybrid recommender system, which allows user to use either collaborative-filtering or content-based features. New features can be added on the fly.
  • Low memory usage, automatically converts categorical and multi-value categorical features to sparse representation.
  • Supports training for both explicit and implicit datasets, as well as negative sampling on implicit data.
  • Provides end-to-end workflow, i.e. data handling / preprocessing -> model training -> evaluate -> save/load -> serving.
  • Supports cold-start prediction and recommendation.
  • Supports dynamic feature and sequence recommendation.
  • Provides unified and friendly API for all algorithms.
  • Easy to retrain model with new users/items from new data.

Usage

pure collaborative-filtering example :

import numpy as np
import pandas as pd
from libreco.data import random_split, DatasetPure
from libreco.algorithms import LightGCN  # pure data, algorithm LightGCN
from libreco.evaluation import evaluate

data = pd.read_csv("examples/sample_data/sample_movielens_rating.dat", sep="::",
                   names=["user", "item", "label", "time"])

# split whole data into three folds for training, evaluating and testing
train_data, eval_data, test_data = random_split(data, multi_ratios=[0.8, 0.1, 0.1])

train_data, data_info = DatasetPure.build_trainset(train_data)
eval_data = DatasetPure.build_evalset(eval_data)
test_data = DatasetPure.build_testset(test_data)
print(data_info)  # n_users: 5894, n_items: 3253, data sparsity: 0.4172 %

lightgcn = LightGCN(
    task="ranking",
    data_info=data_info,
    loss_type="bpr",
    embed_size=16,
    n_epochs=3,
    lr=1e-3,
    batch_size=2048,
    num_neg=1,
    device="cuda",
)
# monitor metrics on eval data during training
lightgcn.fit(
    train_data,
    neg_sampling=True,
    verbose=2,
    eval_data=eval_data,
    metrics=["loss", "roc_auc", "precision", "recall", "ndcg"],
)

# do final evaluation on test data
evaluate(
    model=lightgcn,
    data=test_data,
    neg_sampling=True,
    metrics=["loss", "roc_auc", "precision", "recall", "ndcg"],
)

# predict preference of user 2211 to item 110
lightgcn.predict(user=2211, item=110)
# recommend 7 items for user 2211
lightgcn.recommend_user(user=2211, n_rec=7)

# cold-start prediction
lightgcn.predict(user="ccc", item="not item", cold_start="average")
# cold-start recommendation
lightgcn.recommend_user(user="are we good?", n_rec=7, cold_start="popular")

include features example :

import numpy as np
import pandas as pd
from libreco.data import split_by_ratio_chrono, DatasetFeat
from libreco.algorithms import YouTubeRanking  # feat data, algorithm YouTubeRanking

data = pd.read_csv("examples/sample_data/sample_movielens_merged.csv", sep=",", header=0)
# split into train and test data based on time
train_data, test_data = split_by_ratio_chrono(data, test_size=0.2)

# specify complete columns information
sparse_col = ["sex", "occupation", "genre1", "genre2", "genre3"]
dense_col = ["age"]
user_col = ["sex", "age", "occupation"]
item_col = ["genre1", "genre2", "genre3"]

train_data, data_info = DatasetFeat.build_trainset(
    train_data, user_col, item_col, sparse_col, dense_col
)
test_data = DatasetFeat.build_testset(test_data)
print(data_info)  # n_users: 5962, n_items: 3226, data sparsity: 0.4185 %

ytb_ranking = YouTubeRanking(
    task="ranking",
    data_info=data_info,
    embed_size=16,
    n_epochs=3,
    lr=1e-4,
    batch_size=512,
    use_bn=True,
    hidden_units=(128, 64, 32),
)
ytb_ranking.fit(
    train_data,
    neg_sampling=True,
    verbose=2,
    shuffle=True,
    eval_data=test_data,
    metrics=["loss", "roc_auc", "precision", "recall", "map", "ndcg"],
)

# predict preference of user 2211 to item 110
ytb_ranking.predict(user=2211, item=110)
# recommend 7 items for user 2211
ytb_ranking.recommend_user(user=2211, n_rec=7)

# cold-start prediction
ytb_ranking.predict(user="ccc", item="not item", cold_start="average")
# cold-start recommendation
ytb_ranking.recommend_user(user="are we good?", n_rec=7, cold_start="popular")

Data Format

JUST normal data format, each line represents a sample. One thing is important, the model assumes that user, item, and label column index are 0, 1, and 2, respectively. You may wish to change the column order if that's not the case. Take for Example, the movielens-1m dataset:

1::1193::5::978300760
1::661::3::978302109
1::914::3::978301968
1::3408::4::978300275

Besides, if you want to use some other meta features (e.g., age, sex, category etc.), you need to tell the model which columns are [sparse_col, dense_col, user_col, item_col], which means all features must be in a same table. See above YouTubeRanking for example.

Also note that your data should not contain missing values.

Documentation

The tutorials and API documentation are hosted on librecommender.readthedocs.io.

The example scripts are under examples/ folder.

Installation & Dependencies

From pypi :  

$ pip install -U LibRecommender

Build from source:

$ git clone https://github.com/massquantity/LibRecommender.git
$ cd LibRecommender
$ pip install .

Basic Dependencies for libreco:

  • Python >= 3.6
  • TensorFlow >= 1.15, < 2.16
  • PyTorch >= 1.10
  • Numpy >= 1.19.5
  • Pandas >= 1.0.0
  • Scipy >= 1.2.1, < 1.13.0
  • scikit-learn >= 0.20.0
  • gensim >= 4.0.0
  • tqdm
  • nmslib (optional, used in approximate similarity searching. See Embedding)
  • DGL (optional, used in GraphSage and PinSage. See Implementation Details)
  • Cython >= 0.29.0, < 3 (optional, for building from source)

If you are using Python 3.6, you also need to install dataclasses, which was first introduced in Python 3.7.

LibRecommender has been tested under TensorFlow 1.15, 2.6, 2.10 and 2.12. If you encounter any problem during running, feel free to open an issue.

Tensorflow 2.16 starts using Keras 3.0, so tf1 syntax is no longer supported. Now the supported version is 1.15 - 2.15.

Known issue:

  • Sometimes one may encounter errors like ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject. In this case try upgrading numpy, and version 1.22.0 or higher is probably a safe option.
  • When saving a TensorFlow model for serving, you might encounter the error message: Fatal Python error: Segmentation fault (core dumped). This issue is most likely related to the protobuf library, so you should follow the official recommended version based on your local tensorflow version. In general, it's advisable to use protobuf < 4.24.0.

The table below shows some compatible version combinations:

Python Numpy TensorFlow OS
3.6 1.19.5 1.15, 2.5 linux, windows, macos
3.7 1.20.3, 1.21.6 1.15, 2.6, 2.10 linux, windows, macos
3.8 1.22.4, 1.23.4 2.6, 2.10, 2.12 linux, windows, macos
3.9 1.22.4, 1.23.4 2.6, 2.10, 2.12 linux, windows, macos
3.10 1.22.4, 1.23.4, 1.24.2 2.10, 2.12 linux, windows, macos
3.11 1.23.4, 1.24.2 2.12 linux, windows, macos

Optional Dependencies for libserving:

Docker

One can also use the library in a docker container without installing dependencies, see Docker.

References

Algorithm Category1 Backend Sequence2 Graph3 Embedding4 Paper
userCF / itemCF pure Cython, Rust Item-Based Collaborative Filtering
SVD pure TensorFlow1 :heavy_check_mark: Matrix Factorization Techniques
SVD++ pure TensorFlow1 :heavy_check_mark: Factorization Meets the Neighborhood
ALS pure Cython :heavy_check_mark: 1. Matrix Completion via Alternating Least Square(ALS)
2. Collaborative Filtering for Implicit Feedback Datasets
3. Conjugate Gradient for Implicit Feedback
NCF pure TensorFlow1 Neural Collaborative Filtering
BPR pure Cython, TensorFlow1 :heavy_check_mark: Bayesian Personalized Ranking
Wide & Deep feat TensorFlow1 Wide & Deep Learning for Recommender Systems
FM feat TensorFlow1 Factorization Machines
DeepFM feat TensorFlow1 DeepFM
YouTubeRetrieval feat TensorFlow1 :heavy_check_mark: :heavy_check_mark: Deep Neural Networks for YouTube Recommendations
YouTubeRanking feat TensorFlow1 :heavy_check_mark: Deep Neural Networks for YouTube Recommendations
AutoInt feat TensorFlow1 AutoInt
DIN feat TensorFlow1 :heavy_check_mark: Deep Interest Network
Item2Vec pure / :heavy_check_mark: :heavy_check_mark: Item2Vec
RNN4Rec / GRU4Rec pure TensorFlow1 :heavy_check_mark: :heavy_check_mark: Session-based Recommendations with Recurrent Neural Networks
Caser pure TensorFlow1 :heavy_check_mark: :heavy_check_mark: Personalized Top-N Sequential Recommendation via Convolutional
WaveNet pure TensorFlow1 :heavy_check_mark: :heavy_check_mark: WaveNet: A Generative Model for Raw Audio
DeepWalk pure / :heavy_check_mark: :heavy_check_mark: DeepWalk
NGCF pure PyTorch :heavy_check_mark: :heavy_check_mark: Neural Graph Collaborative Filtering
LightGCN pure PyTorch :heavy_check_mark: :heavy_check_mark: LightGCN
GraphSage feat DGL, PyTorch :heavy_check_mark: :heavy_check_mark: Inductive Representation Learning on Large Graphs
PinSage feat DGL, PyTorch :heavy_check_mark: :heavy_check_mark: Graph Convolutional Neural Networks for Web-Scale
TwoTower feat TensorFlow1 :heavy_check_mark: 1. Sampling-Bias-Corrected Neural Modeling for Large Corpus Item
2. Self-supervised Learning for Large-scale Item
Transformer feat TensorFlow1 :heavy_check_mark: 1. BST
2. Transformers4Rec
3. RMSNorm
SIM feat TensorFlow1 :heavy_check_mark: SIM
Swing pure Rust Swing

[1] Category: pure means collaborative-filtering algorithms which only use behavior data, feat means other side-features can be included.

[2] Sequence: Algorithms that leverage user behavior sequence.

[3] Graph: Algorithms that leverage graph information, including Graph Embedding (GE) and Graph Neural Network (GNN) .

[4] Embedding: Algorithms that can generate final user and item embeddings.

Powered by

JetBrains Logo

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

librecommender-1.5.1.tar.gz (525.9 kB view details)

Uploaded Source

Built Distributions

LibRecommender-1.5.1-cp311-cp311-win_amd64.whl (835.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

LibRecommender-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

LibRecommender-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

LibRecommender-1.5.1-cp310-cp310-win_amd64.whl (837.5 kB view details)

Uploaded CPython 3.10 Windows x86-64

LibRecommender-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

LibRecommender-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

LibRecommender-1.5.1-cp39-cp39-win_amd64.whl (841.1 kB view details)

Uploaded CPython 3.9 Windows x86-64

LibRecommender-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

LibRecommender-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

LibRecommender-1.5.1-cp38-cp38-win_amd64.whl (839.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

LibRecommender-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

LibRecommender-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

LibRecommender-1.5.1-cp37-cp37m-win_amd64.whl (837.6 kB view details)

Uploaded CPython 3.7m Windows x86-64

LibRecommender-1.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

LibRecommender-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

LibRecommender-1.5.1-cp36-cp36m-win_amd64.whl (836.6 kB view details)

Uploaded CPython 3.6m Windows x86-64

LibRecommender-1.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

LibRecommender-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file librecommender-1.5.1.tar.gz.

File metadata

  • Download URL: librecommender-1.5.1.tar.gz
  • Upload date:
  • Size: 525.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.8.13

File hashes

Hashes for librecommender-1.5.1.tar.gz
Algorithm Hash digest
SHA256 2149fe52f36938aa724cccc93cfbbca52e3a3974be368ba835e4d0b36f374208
MD5 d838fafac4321437876488ec861a1813
BLAKE2b-256 db1668c554d973c51ff6ddc2a5843a968248eb8bb89d53441b79e46fe46a816e

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fc42b6f8e209b56f4a1fe0b64a92b1192263d6e94faddb400a8b81598c6a40d8
MD5 69e81d17c79ea0b38686bddd02de8b05
BLAKE2b-256 a4d7cb99b4418c90339ef515072c875efc758ca7f6745333dfcb7dfd207aec2e

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d57b6f2ff2be96ff17495510360b59672d9291e57a80d7545b99745d5cee440e
MD5 bb58a3ffcfe725357e7e0d7f40ff331d
BLAKE2b-256 b667c6d67058f56c0f96266e956de295500e0442a51e8e0f471fa5817984612c

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aaebabdbc8a719d55ab89466ac5a7f8ec19252941ee6cdbf091d65d9d5571097
MD5 4f419a3582f85bfeb2e3968fa7f43810
BLAKE2b-256 c372499dc04f15d1572d5ec7c8d646693d87154d4af38f371c45b91a83c860c3

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7c4293118686a6d799debd05e40f92b05b6a02d9afbe76b57d54c1a1ba024c3c
MD5 adb984a17e96e044e4c44a1ba1e8456f
BLAKE2b-256 0c8429e560dc7366fa97f58bc0d88f336ed92f781877754677cc7213c0b870d2

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2dcdb5ba50dcedbfcfbccedae89d43907e965510c2eaea74d04bf055f6826d43
MD5 57d2ee45b4941b72d99a95eefb3ef40a
BLAKE2b-256 6b28aa90f780eeeb26cb57baabd26177a095816fbca59d2925671d350fa53497

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e5174a0c791567026ab803a21f0f03bee63dc61ef4809e008ae1bf33a8d4f1ce
MD5 94f4f8b7fc2778e96164ca7b21fcde97
BLAKE2b-256 27f8461add2c79b7d7e0006c286a4593175a68b21d1fe3ad7760167f7ac66e36

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 beeb8ad0dce86449222bd29bcbe84f28f1e47df635878f75769b3ab8da594bf2
MD5 35a70ab8c6e1f0f7f7c98f1cbe91be93
BLAKE2b-256 27bf44a24bbdaa91062fe4271fe8df4073c704c3600e2cb435e91c0c6bf09adf

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a7450622083b7ef2983da548a9d875540de4cf8bdd66c7da3dee279c11012680
MD5 09443818019a9b3dd1b3740088395f23
BLAKE2b-256 f3e47e8ae6a932b3b2f7f4c150a85a86accd34f8424736ba1b892a8b82356908

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c7957560405c11d0eb6284047863bfe74492a6bf56318d1e3feb3dd9067954a1
MD5 081c4777b90650f74f4487eb3f2b0bfe
BLAKE2b-256 321a867546448cd0812dc89ef3024d45ce8300b996575d2b0cdfba35e0a42f90

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 be61c209fefbe6ffa3901d9c75d0e7d173223b50bf291d3c580c7220d6309edc
MD5 549fda88e3696527b231550c1bddfbff
BLAKE2b-256 c7e4fd8a35dfa953df085f71e6b4a25a770f246b6844b4b3012d253d2925f82d

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ab6f8025eac057d89fb97a348d7915ac3b3a64e8835005e30022798e6ba6d66
MD5 b37622becb9811df73393d808eb788fe
BLAKE2b-256 b09d84702ecccf47d4407d256441b7673845a41d0a1ee2db915be6c29a2c415f

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cf271c1dc382dd1e3ac40f663b8e1de78b781de953679d218320ae63b94a445e
MD5 01466fc25580bd7c17db70a8892f01c5
BLAKE2b-256 35eb532144101178c3fa3b9d79f078850bc62f4afde4b9eafad33cde3bd714c0

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 cacbd7ab73dd1df513ada6f001f80cf5990b3dd55e6dc819133daac327551e4f
MD5 f00d0373c1eb79516dc8519c91e90b8a
BLAKE2b-256 f37d6c72b1f023a130007494e1eea9648b108f556a890d59708d4fe0cee964b0

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6bef0ad7ebdb671687a54ccb8a064cfcf0f6c5d39c0122d2041fc4db925982eb
MD5 7a3707e3b8cae8b41b3e26dad02869b7
BLAKE2b-256 31ec1fa9dc7e63a64bde6b9b4159e3ce8ccdad57e13a1d6d82c3d10b86caa941

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 be4cbcb8f46c55951dedcda58ac151940ee5aff58000186a9bb8b5f42a866d39
MD5 33fb9b30f3796a6c67d1b8332250f622
BLAKE2b-256 2e0cdd517110b7cd0ba818915af66791340a12db835fd92943f6b7dcd2ac2ef7

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 ad097cc8c91dfca2b613c72a21ab09b1721ebc650cd8db290cc5757bb173181f
MD5 5ac1e1917ad5647bfdbcc3086167bee3
BLAKE2b-256 0ddee2ba1f54483e5c8beac03fd377c6b282695f364bff6929571a509f894ec4

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 511432b433e88090f426a0c5234cbb9cff8444b19ef7702055f1f374843e98ca
MD5 de4716d3c4531c9e66e78475cf2b9400
BLAKE2b-256 3a7a9a821ca7c63b155837e98773bee5182e9ef77630a05f196f098df5dff233

See more details on using hashes here.

File details

Details for the file LibRecommender-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for LibRecommender-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0a575f60307399c244f23b44d51492b3474e5c8c51fbe6863f663658ac0c9c8e
MD5 986fd86f658061286569dd3d13707140
BLAKE2b-256 a4d489537b1e8221ec432b437b478f9762b7c257a4928012f329d0b3baa4066d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page