Skip to content

Commit 467d30b

Browse files
authored
Move to src/irspack layout & always use relative import (#104)
* move to src/ layout * modify setup.py * Fix test * revert wheels.yml
1 parent f466462 commit 467d30b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+110
-114
lines changed

.github/workflows/run-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
run: |
2323
pip install pytest pytest-mock pytest-cov
2424
pip install lightfm jaxlib jax dm-haiku optax
25-
pytest --cov=./irspack tests/
25+
pytest --cov=./src/irspack tests/
2626
- name: Generate coverage (ubuntu)
2727
run: |
2828
coverage xml

.github/workflows/wheels.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
types:
88
- created
99
env:
10-
cibuildwheel_version: "2.2.2"
10+
cibuildwheel_version: "2.7.0"
1111
jobs:
1212
build_sdist:
1313
name: Build source distribution

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ temp/*
88
**.log
99
**.csv
1010
**.db
11-
irspack.egg-info/*
11+
src/irspack.egg-info/*
1212
**.so
1313
.eggs/
1414
.python-version

setup.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,14 @@ def local_scheme(version: Any) -> str:
7979
}, # https://github.com/pypa/setuptools_scm/issues/342
8080
author="Tomoki Ohtsuki",
8181
author_email="tomoki.otsuki129@gmail.com",
82-
description="Implicit feedback-based recommender system pack",
82+
description="Implicit feedback-based recommender systems, packed for practitioners.",
8383
long_description=LONG_DESCRIPTION,
8484
long_description_content_type="text/markdown",
8585
ext_modules=ext_modules,
8686
install_requires=install_requires,
8787
include_package_data=True,
8888
cmdclass={"build_ext": build_ext},
89-
packages=find_packages(),
90-
python_requires=">=3.6",
89+
packages=find_packages("src"),
90+
python_requires=">=3.7",
91+
package_dir={"": "src"},
9192
)

irspack/__init__.py renamed to src/irspack/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
# package is not installed
77
pass # pragma: no cover
88

9-
from irspack.definitions import DenseScoreArray, InteractionMatrix, UserIndexArray
10-
from irspack.evaluation import *
11-
from irspack.recommenders import *
12-
from irspack.split import *
13-
from irspack.utils import *
9+
from .definitions import DenseScoreArray, InteractionMatrix, UserIndexArray
10+
from .evaluation import *
11+
from .recommenders import *
12+
from .split import *
13+
from .utils import *
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

irspack/dataset/movielens/base.py renamed to src/irspack/dataset/movielens/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import pandas as pd
55

6-
from irspack.dataset.downloader import SingleZipDownloader
6+
from ..downloader import SingleZipDownloader
77

88

99
class BaseMovieLenstDataLoader(SingleZipDownloader):
File renamed without changes.
File renamed without changes.
File renamed without changes.

irspack/evaluation/__init__.py renamed to src/irspack/evaluation/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
from ._core import EvaluatorCore, Metrics
2-
from .evaluator import METRIC_NAMES, Evaluator, EvaluatorWithColdUser, TargetMetric
2+
from .evaluator import (
3+
METRIC_NAMES,
4+
Evaluator,
5+
EvaluatorWithColdUser,
6+
Metrics,
7+
TargetMetric,
8+
)
39

410
__all__ = [
511
"Evaluator",
File renamed without changes.

irspack/evaluation/evaluate_df_to_df.py renamed to src/irspack/evaluation/evaluate_df_to_df.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pandas as pd
44

5-
from ..utils.threading import get_n_threads
5+
from .._threading import get_n_threads
66
from ._core import evaluate_list_vs_list
77

88

irspack/evaluation/evaluator.py renamed to src/irspack/evaluation/evaluator.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import numpy as np
77
from scipy import sparse as sps
88

9-
from irspack.definitions import DenseScoreArray, InteractionMatrix
10-
from irspack.evaluation._core import EvaluatorCore, Metrics
11-
from irspack.utils.threading import get_n_threads
9+
from .._threading import get_n_threads
10+
from ..definitions import DenseScoreArray, InteractionMatrix
11+
from ._core import EvaluatorCore, Metrics
1212

1313
if TYPE_CHECKING:
14-
from irspack.recommenders import base as base_recommender
14+
from ..recommenders.base import BaseRecommender
1515

1616

1717
class TargetMetric(Enum):
@@ -172,7 +172,7 @@ def _get_metrics(
172172
else:
173173
raise ValueError("score must be either float32 or float64.")
174174

175-
def get_target_score(self, model: "base_recommender.BaseRecommender") -> float:
175+
def get_target_score(self, model: "BaseRecommender") -> float:
176176
r"""Compute the optimization target score (self.target_metric) with the cutoff being ``self.cutoff``.
177177
178178
Args:
@@ -183,7 +183,7 @@ def get_target_score(self, model: "base_recommender.BaseRecommender") -> float:
183183
"""
184184
return self.get_score(model)[self.target_metric.name]
185185

186-
def get_score(self, model: "base_recommender.BaseRecommender") -> Dict[str, float]:
186+
def get_score(self, model: "BaseRecommender") -> Dict[str, float]:
187187
r"""Compute the score with the cutoff being ``self.cutoff``.
188188
189189
Args:
@@ -195,7 +195,7 @@ def get_score(self, model: "base_recommender.BaseRecommender") -> Dict[str, floa
195195
return self._get_scores_as_list(model, [self.cutoff])[0]
196196

197197
def get_scores(
198-
self, model: "base_recommender.BaseRecommender", cutoffs: List[int]
198+
self, model: "BaseRecommender", cutoffs: List[int]
199199
) -> Dict[str, float]:
200200
r"""Compute the score with the specified cutoffs.
201201
@@ -217,7 +217,7 @@ def get_scores(
217217
return result
218218

219219
def _get_scores_as_list(
220-
self, model: "base_recommender.BaseRecommender", cutoffs: List[int]
220+
self, model: "BaseRecommender", cutoffs: List[int]
221221
) -> List[Dict[str, float]]:
222222
if self.offset + self.n_users > model.n_users:
223223
raise ValueError("evaluator offset + n_users exceeds the model's n_users.")
@@ -343,7 +343,7 @@ def __init__(
343343

344344
def _get_scores_as_list(
345345
self,
346-
model: "base_recommender.BaseRecommender",
346+
model: "BaseRecommender",
347347
cutoffs: List[int],
348348
) -> List[Dict[str, float]]:
349349

irspack/recommenders/optimization/optimizer.py renamed to src/irspack/optimization/optimizer.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55

66
import pandas as pd
77

8-
from irspack.evaluation import Evaluator
9-
from irspack.utils.default_logger import get_default_logger
10-
8+
from ..default_logger import get_default_logger
119
from .parameter_range import is_valid_param_name
1210

1311
if TYPE_CHECKING:
1412
from optuna import Study, Trial
1513

16-
from irspack.recommenders.base import BaseRecommender, InteractionMatrix
14+
from ..evaluation import Evaluator
15+
from ..recommenders.base import BaseRecommender, InteractionMatrix
1716

1817
SparseMatrixSuggestFunction = Callable[["Trial"], "InteractionMatrix"]
1918
ParameterSuggestFunction = Callable[["Trial"], Dict[str, Any]]
@@ -60,7 +59,7 @@ class Optimizer:
6059
Args:
6160
data_suggest_function:
6261
The train data.
63-
val_evaluator (Evaluator):
62+
val_evaluator:
6463
The validation evaluator that measures the performance of the recommenders.
6564
logger:
6665
The logger used during the optimization steps. Defaults to `None`.
@@ -85,14 +84,15 @@ def __init__(
8584
data_suggest_function: SparseMatrixSuggestFunction,
8685
parameter_suggest_function: ParameterSuggestFunction,
8786
fixed_params: Dict[str, Any],
88-
val_evaluator: Evaluator,
87+
val_evaluator: "Evaluator",
8988
logger: Optional[logging.Logger] = None,
9089
max_epoch: int = 128,
9190
validate_epoch: int = 5,
9291
score_degradation_max: int = 5,
9392
):
9493

9594
if logger is None:
95+
9696
logger = get_default_logger()
9797

9898
self.logger = logger

irspack/recommenders/__init__.py renamed to src/irspack/recommenders/__init__.py

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
from irspack.recommenders.base import (
2-
BaseRecommender,
3-
BaseSimilarityRecommender,
4-
get_recommender_class,
5-
)
6-
from irspack.recommenders.base_earlystop import BaseRecommenderWithEarlyStopping
7-
from irspack.recommenders.dense_slim import DenseSLIMConfig, DenseSLIMRecommender
8-
from irspack.recommenders.edlae import EDLAEConfig, EDLAERecommender
9-
from irspack.recommenders.ials import IALSConfig, IALSRecommender
10-
from irspack.recommenders.knn import (
1+
from .base import BaseRecommender, BaseSimilarityRecommender, get_recommender_class
2+
from .base_earlystop import BaseRecommenderWithEarlyStopping
3+
from .dense_slim import DenseSLIMConfig, DenseSLIMRecommender
4+
from .edlae import EDLAEConfig, EDLAERecommender
5+
from .ials import IALSConfig, IALSRecommender
6+
from .knn import (
117
AsymmetricCosineKNNConfig,
128
AsymmetricCosineKNNRecommender,
139
CosineKNNConfig,
@@ -17,7 +13,6 @@
1713
TverskyIndexKNNConfig,
1814
TverskyIndexKNNRecommender,
1915
)
20-
2116
from .p3 import P3alphaConfig, P3alphaRecommender
2217
from .rp3 import RP3betaConfig, RP3betaRecommender
2318
from .slim import SLIMConfig, SLIMRecommender
@@ -63,17 +58,14 @@
6358
]
6459

6560
try:
66-
from irspack.recommenders.truncsvd import (
67-
TruncatedSVDConfig,
68-
TruncatedSVDRecommender,
69-
)
61+
from .truncsvd import TruncatedSVDConfig, TruncatedSVDRecommender
7062

7163
__all__.extend(["TruncatedSVDRecommender", "TruncatedSVDConfig"])
7264
except ImportError: # pragma: no cover
7365
pass # pragma: no cover
7466

7567
try:
76-
from irspack.recommenders.nmf import NMFConfig, NMFRecommender
68+
from .nmf import NMFConfig, NMFRecommender
7769

7870
__all__.extend(["NMFRecommender", "NMFConfig"])
7971
except ImportError: # pragma: no cover
File renamed without changes.
File renamed without changes.

irspack/recommenders/base.py renamed to src/irspack/recommenders/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
InteractionMatrix,
3434
UserIndexArray,
3535
)
36-
from .optimization.parameter_range import ParameterRange
36+
from ..optimization.parameter_range import ParameterRange
3737

3838
R = TypeVar("R", bound="BaseRecommender")
3939

@@ -268,7 +268,7 @@ def tune_with_study(
268268
score_degradation_max: int = 5,
269269
logger: Optional[logging.Logger] = None,
270270
) -> Tuple[Dict[str, Any], pd.DataFrame]:
271-
from .optimization.optimizer import Optimizer
271+
from ..optimization.optimizer import Optimizer
272272

273273
if data is None:
274274
if data_suggest_function is None:

irspack/recommenders/base_earlystop.py renamed to src/irspack/recommenders/base_earlystop.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
from fastprogress import progress_bar
66

7-
from irspack.definitions import InteractionMatrix
8-
from irspack.recommenders.base import BaseRecommender, RecommenderConfig
7+
from ..definitions import InteractionMatrix
8+
from .base import BaseRecommender, RecommenderConfig
99

1010
if TYPE_CHECKING:
1111
from optuna import Trial

irspack/recommenders/bpr.py renamed to src/irspack/recommenders/bpr.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,20 @@
44
import numpy as np
55
from lightfm import LightFM
66

7-
from irspack.utils import get_n_threads
8-
7+
from .._threading import get_n_threads
98
from ..definitions import (
109
DenseMatrix,
1110
DenseScoreArray,
1211
InteractionMatrix,
1312
UserIndexArray,
1413
)
14+
from ..optimization import CategoricalRange, LogUniformFloatRange, UniformIntegerRange
1515
from .base import BaseRecommenderWithItemEmbedding, BaseRecommenderWithUserEmbedding
1616
from .base_earlystop import (
1717
BaseEarlyStoppingRecommenderConfig,
1818
BaseRecommenderWithEarlyStopping,
1919
TrainerBase,
2020
)
21-
from .optimization import CategoricalRange, LogUniformFloatRange, UniformIntegerRange
2221

2322

2423
class BPRFMTrainer(TrainerBase):

irspack/recommenders/dense_slim.py renamed to src/irspack/recommenders/dense_slim.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from scipy import linalg
55

66
from ..definitions import InteractionMatrix
7+
from ..optimization.parameter_range import LogUniformFloatRange
78
from .base import BaseSimilarityRecommender, RecommenderConfig
8-
from .optimization.parameter_range import LogUniformFloatRange
99

1010

1111
class DenseSLIMConfig(RecommenderConfig):

irspack/recommenders/edlae.py renamed to src/irspack/recommenders/edlae.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from scipy import linalg
55

66
from ..definitions import InteractionMatrix
7+
from ..optimization.parameter_range import LogUniformFloatRange, UniformFloatRange
78
from .base import BaseSimilarityRecommender, RecommenderConfig
8-
from .optimization.parameter_range import LogUniformFloatRange, UniformFloatRange
99

1010

1111
class EDLAEConfig(RecommenderConfig):

irspack/recommenders/ials.py renamed to src/irspack/recommenders/ials.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,19 @@
1010
from typing_extensions import Literal # pragma: no cover, type: ignore
1111

1212
from .. import evaluation
13+
from .._threading import get_n_threads
1314
from ..definitions import (
1415
DenseMatrix,
1516
DenseScoreArray,
1617
InteractionMatrix,
1718
UserIndexArray,
1819
)
1920
from ..evaluation.evaluator import Evaluator
20-
from ..utils import get_n_threads
21+
from ..optimization.parameter_range import (
22+
LogUniformFloatRange,
23+
ParameterRange,
24+
UniformIntegerRange,
25+
)
2126
from ._ials import IALSModelConfigBuilder, IALSSolverConfigBuilder
2227
from ._ials import IALSTrainer as CoreTrainer
2328
from ._ials import LossType, SolverType
@@ -31,11 +36,6 @@
3136
BaseRecommenderWithEarlyStopping,
3237
TrainerBase,
3338
)
34-
from .optimization.parameter_range import (
35-
LogUniformFloatRange,
36-
ParameterRange,
37-
UniformIntegerRange,
38-
)
3939

4040
if TYPE_CHECKING:
4141
from optuna import Study, Trial

irspack/recommenders/knn.py renamed to src/irspack/recommenders/knn.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@
22
from abc import abstractmethod
33
from typing import Optional, Union
44

5+
from .._threading import get_n_threads
56
from ..definitions import InteractionMatrix
6-
from ..utils import get_n_threads, okapi_BM_25_weight, remove_diagonal, tf_idf_weight
7+
from ..optimization.parameter_range import (
8+
CategoricalRange,
9+
UniformFloatRange,
10+
default_tune_range_knn,
11+
default_tune_range_knn_with_weighting,
12+
)
13+
from ..utils import okapi_BM_25_weight, remove_diagonal, tf_idf_weight
714
from ._knn import (
815
AsymmetricSimilarityComputer,
916
CosineSimilarityComputer,
1017
JaccardSimilarityComputer,
1118
TverskyIndexComputer,
1219
)
1320
from .base import BaseSimilarityRecommender, RecommenderConfig
14-
from .optimization.parameter_range import (
15-
CategoricalRange,
16-
UniformFloatRange,
17-
default_tune_range_knn,
18-
default_tune_range_knn_with_weighting,
19-
)
2021

2122

2223
class FeatureWeightingScheme(str, enum.Enum):

irspack/recommenders/multvae.py renamed to src/irspack/recommenders/multvae.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
from scipy import sparse as sps
1212

1313
from ..definitions import DenseScoreArray, InteractionMatrix, UserIndexArray
14+
from ..optimization.parameter_range import CategoricalRange
1415
from .base_earlystop import (
1516
BaseEarlyStoppingRecommenderConfig,
1617
BaseRecommenderWithEarlyStopping,
1718
TrainerBase,
1819
)
19-
from .optimization.parameter_range import CategoricalRange
2020

2121

2222
class BaseMLP:

0 commit comments

Comments
 (0)