lenskit / lkpy

Python recommendation toolkit
https://lkpy.lenskit.org
MIT License
270 stars 61 forks source link

Refactor component types and update POPROX code #482

Closed mdekstrand closed 2 months ago

mdekstrand commented 2 months ago

This synchronizes the pipeline code with POPROX:

  1. refactor component types so components extend Component
  2. add lazy inputs
github-actions[bot] commented 2 months ago

The LensKit 🤖 has run the tests on your PR.

✅ Tests covered 97.56% of diff.

🚨 Coverage decreased -0.01% from 92.41% to 92.40%.

origin/main...HEAD, staged and unstaged changes - lenskit/lenskit/pipeline/__init__.py (100%) - lenskit/lenskit/pipeline/common.py (100%) - lenskit/lenskit/pipeline/components.py (90.9%): Missing lines 190 - lenskit/lenskit/pipeline/config.py (100%) - lenskit/lenskit/pipeline/nodes.py (100%) - lenskit/lenskit/pipeline/runner.py (100%) ## Summary - **Total**: 41 lines - **Missing**: 1 line - **Coverage**: 97%
Source Coverage Report | Name | Stmts | Miss | Cover | |----------------------------------------------- | -------: | -------: | ------: | | lenskit/lenskit/util/envcheck.py | 57 | 44 | 23% | | lenskit/lenskit/data/fetch.py | 38 | 28 | 26% | | lenskit/lenskit/data/types.py | 38 | 12 | 68% | | lenskit/lenskit/util/\_\_init\_\_.py | 72 | 19 | 74% | | lenskit/lenskit/pipeline/common.py | 4 | 1 | 75% | | lenskit/lenskit/splitting/split.py | 25 | 6 | 76% | | lenskit/lenskit/topn.py | 109 | 25 | 77% | | lenskit/lenskit/data/movielens.py | 97 | 18 | 81% | | lenskit/lenskit/util/test.py | 104 | 19 | 82% | | lenskit/lenskit/pipeline/state.py | 44 | 8 | 82% | | lenskit/lenskit/parallel/config.py | 65 | 11 | 83% | | lenskit/lenskit/parallel/pool.py | 54 | 9 | 83% | | lenskit/lenskit/algorithms/ranking.py | 75 | 11 | 85% | | lenskit/lenskit/algorithms/\_\_init\_\_.py | 67 | 8 | 88% | | lenskit/lenskit/util/random.py | 26 | 3 | 88% | | lenskit-implicit/lenskit/implicit.py | 94 | 9 | 90% | | lenskit/lenskit/batch/\_recommend.py | 46 | 4 | 91% | | lenskit/lenskit/data/vocab.py | 84 | 7 | 92% | | lenskit/lenskit/splitting/holdout.py | 56 | 4 | 93% | | lenskit/lenskit/parallel/worker.py | 43 | 3 | 93% | | lenskit/lenskit/batch/\_predict.py | 30 | 2 | 93% | | lenskit/lenskit/math/sparse.py | 60 | 4 | 93% | | lenskit/lenskit/pipeline/components.py | 45 | 3 | 93% | | lenskit/lenskit/parallel/invoker.py | 31 | 2 | 94% | | lenskit/lenskit/algorithms/knn/user.py | 177 | 11 | 94% | | lenskit/lenskit/data/items.py | 177 | 11 | 94% | | lenskit/lenskit/algorithms/knn/item.py | 302 | 17 | 94% | | lenskit/lenskit/data/dataset.py | 131 | 7 | 95% | | lenskit/lenskit/algorithms/svd.py | 75 | 4 | 95% | | lenskit/lenskit/data/mtarray.py | 57 | 3 | 95% | | lenskit/lenskit/data/matrix.py | 233 | 12 | 95% | | lenskit/lenskit/pipeline/types.py | 79 | 4 | 95% | | lenskit/lenskit/parallel/chunking.py | 20 | 1 | 95% | | lenskit-funksvd/lenskit/funksvd.py | 187 | 8 | 96% | | lenskit/lenskit/pipeline/\_\_init\_\_.py | 297 | 12 | 96% | | lenskit/lenskit/data/lazy.py | 34 | 1 | 97% | | lenskit/lenskit/algorithms/basic.py | 161 | 4 | 98% | | lenskit/lenskit/algorithms/als/explicit.py | 121 | 3 | 98% | | lenskit/lenskit/pipeline/runner.py | 86 | 2 | 98% | | lenskit/lenskit/algorithms/bias.py | 150 | 3 | 98% | | lenskit/lenskit/parallel/serialize.py | 51 | 1 | 98% | | lenskit/lenskit/algorithms/als/common.py | 128 | 2 | 98% | | lenskit/lenskit/crossfold.py | 136 | 2 | 99% | | lenskit/lenskit/pipeline/config.py | 83 | 1 | 99% | | lenskit/lenskit/algorithms/als/implicit.py | 112 | 1 | 99% | | lenskit/lenskit/metrics/topn.py | 212 | 1 | 99% | | lenskit-hpf/lenskit/hpf.py | 24 | 0 | 100% | | lenskit/lenskit/algorithms/als/\_\_init\_\_.py | 3 | 0 | 100% | | lenskit/lenskit/algorithms/knn/\_\_init\_\_.py | 3 | 0 | 100% | | lenskit/lenskit/algorithms/mf\_common.py | 61 | 0 | 100% | | lenskit/lenskit/batch/\_\_init\_\_.py | 2 | 0 | 100% | | lenskit/lenskit/data/\_\_init\_\_.py | 9 | 0 | 100% | | lenskit/lenskit/data/checks.py | 37 | 0 | 100% | | lenskit/lenskit/data/convert.py | 50 | 0 | 100% | | lenskit/lenskit/data/tables.py | 25 | 0 | 100% | | lenskit/lenskit/diagnostics.py | 4 | 0 | 100% | | lenskit/lenskit/math/\_\_init\_\_.py | 0 | 0 | 100% | | lenskit/lenskit/math/solve.py | 6 | 0 | 100% | | lenskit/lenskit/metrics/\_\_init\_\_.py | 0 | 0 | 100% | | lenskit/lenskit/metrics/predict.py | 32 | 0 | 100% | | lenskit/lenskit/parallel/\_\_init\_\_.py | 4 | 0 | 100% | | lenskit/lenskit/parallel/sequential.py | 22 | 0 | 100% | | lenskit/lenskit/pipeline/nodes.py | 54 | 0 | 100% | | lenskit/lenskit/splitting/\_\_init\_\_.py | 4 | 0 | 100% | | lenskit/lenskit/splitting/records.py | 57 | 0 | 100% | | lenskit/lenskit/splitting/users.py | 61 | 0 | 100% | | lenskit/lenskit/types.py | 5 | 0 | 100% | | lenskit/lenskit/util/logging.py | 19 | 0 | 100% | | lenskit/lenskit/util/timing.py | 28 | 0 | 100% | | **TOTAL** | **4883** | **371** | **92%** |