spforge 0.8.7__tar.gz → 0.8.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of spforge might be problematic. Click here for more details.
- {spforge-0.8.7/spforge.egg-info → spforge-0.8.8}/PKG-INFO +1 -1
- {spforge-0.8.7 → spforge-0.8.8}/pyproject.toml +1 -1
- {spforge-0.8.7 → spforge-0.8.8}/spforge/features_generator_pipeline.py +8 -4
- {spforge-0.8.7 → spforge-0.8.8/spforge.egg-info}/PKG-INFO +1 -1
- {spforge-0.8.7 → spforge-0.8.8}/tests/test_feature_generator_pipeline.py +43 -0
- {spforge-0.8.7 → spforge-0.8.8}/LICENSE +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/MANIFEST.in +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/README.md +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/game_level_example.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/lol/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/lol/data/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/lol/data/subsample_lol_data.parquet +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/lol/data/utils.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/lol/pipeline_transformer_example.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/cross_validation_example.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/data/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/data/game_player_subsample.parquet +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/data/utils.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/feature_engineering_example.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/game_winner_example.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/examples/nba/predictor_transformers_example.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/setup.cfg +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/autopipeline.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/base_feature_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/cross_validator/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/cross_validator/_base.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/cross_validator/cross_validator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/data_structures.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/_negative_binomial_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/_normal_distribution_predictor.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/_student_t_distribution_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_conditional_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_frequency_bucketing_classifier.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_granularity_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_group_by_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_ordinal_classifier.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_sklearn_enhancer_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_base.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_lag.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_net_over_predicted.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_regressor_feature_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_against_opponent.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_mean_binary.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_mean_days.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_window.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_utils.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/hyperparameter_tuning/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/hyperparameter_tuning/_default_search_spaces.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/hyperparameter_tuning/_tuner.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/_performance_manager.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/_performances_transformers.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/_base.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/_player_rating.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/_team_rating.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/enums.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/league_identifier.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/league_start_rating_optimizer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/player_performance_predictor.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/start_rating_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/team_performance_predictor.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/team_start_rating_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/utils.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/scorer/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/scorer/_score.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/__init__.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_base.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_net_over_predicted.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_operator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_other_transformer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_predictor.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_simple_transformer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_team_ratio_predictor.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge/utils.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/SOURCES.txt +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/dependency_links.txt +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/requires.txt +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/top_level.txt +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/cross_validator/test_cross_validator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/distributions/test_distribution.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_estimator_hyperparameter_tuning.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_league_start_rating_optimizer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_lol_player_kills.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_player_points.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_player_ratings_hyperparameter_tuning.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_prediction_consistency.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/estimator/test_sklearn_estimator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_lag.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_regressor_feature_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_against_opponent.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_mean_binary.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_mean_days.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_window.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/hyperparameter_tuning/test_estimator_tuner.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/hyperparameter_tuning/test_rating_tuner.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/performance_transformers/test_performance_manager.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/performance_transformers/test_performances_transformers.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/ratings/test_player_rating_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/ratings/test_ratings_property.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/ratings/test_team_rating_generator.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/scorer/test_score.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/scorer/test_score_aggregation_granularity.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/test_autopipeline.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/test_autopipeline_context.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_estimator_transformer_context.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_net_over_predicted.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_other_transformer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_predictor_transformer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_simple_transformer.py +0 -0
- {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_team_ratio_predictor.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spforge
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.8
|
|
4
4
|
Summary: A flexible framework for generating features, ratings, and building machine learning or other models for training and inference on sports data.
|
|
5
5
|
Author-email: Mathias Holmstrøm <mathiasholmstom@gmail.com>
|
|
6
6
|
License: See LICENSE file
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "spforge"
|
|
7
|
-
version = "0.8.
|
|
7
|
+
version = "0.8.8"
|
|
8
8
|
description = "A flexible framework for generating features, ratings, and building machine learning or other models for training and inference on sports data."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -120,7 +120,8 @@ class FeatureGeneratorPipeline(FeatureGenerator):
|
|
|
120
120
|
|
|
121
121
|
for transformer in self.feature_generators:
|
|
122
122
|
pre_row_count = len(df)
|
|
123
|
-
|
|
123
|
+
native_df = df.to_native()
|
|
124
|
+
df = nw.from_native(transformer.fit_transform(native_df, column_names=column_names))
|
|
124
125
|
assert len(df) == pre_row_count
|
|
125
126
|
for f in transformer.features_out:
|
|
126
127
|
if f in expected_feats_added:
|
|
@@ -151,7 +152,8 @@ class FeatureGeneratorPipeline(FeatureGenerator):
|
|
|
151
152
|
|
|
152
153
|
for transformer in self.feature_generators:
|
|
153
154
|
pre_row_count = len(df)
|
|
154
|
-
|
|
155
|
+
native_df = df.to_native()
|
|
156
|
+
df = nw.from_native(transformer.transform(native_df))
|
|
155
157
|
assert len(df) == pre_row_count
|
|
156
158
|
for f in transformer.features_out:
|
|
157
159
|
if f in expected_feats_added:
|
|
@@ -181,9 +183,11 @@ class FeatureGeneratorPipeline(FeatureGenerator):
|
|
|
181
183
|
for transformer in self.feature_generators:
|
|
182
184
|
pre_row_count = len(df)
|
|
183
185
|
if hasattr(transformer, "future_transform") and callable(transformer.future_transform):
|
|
184
|
-
|
|
186
|
+
native_df = df.to_native()
|
|
187
|
+
df = nw.from_native(transformer.future_transform(native_df))
|
|
185
188
|
else:
|
|
186
|
-
|
|
189
|
+
native_df = df.to_native()
|
|
190
|
+
df = nw.from_native(transformer.transform(native_df))
|
|
187
191
|
assert len(df) == pre_row_count
|
|
188
192
|
for f in transformer.features_out:
|
|
189
193
|
if f in expected_feats_added:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spforge
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.8
|
|
4
4
|
Summary: A flexible framework for generating features, ratings, and building machine learning or other models for training and inference on sports data.
|
|
5
5
|
Author-email: Mathias Holmstrøm <mathiasholmstom@gmail.com>
|
|
6
6
|
License: See LICENSE file
|
|
@@ -16,6 +16,49 @@ def column_names():
|
|
|
16
16
|
)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
class PolarsOnlyGenerator:
|
|
20
|
+
def __init__(self):
|
|
21
|
+
self._features_out = ["polars_only_feature"]
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def features_out(self):
|
|
25
|
+
return self._features_out
|
|
26
|
+
|
|
27
|
+
def fit_transform(self, df, column_names=None):
|
|
28
|
+
if not isinstance(df, pl.DataFrame):
|
|
29
|
+
raise TypeError("Expected polars DataFrame")
|
|
30
|
+
return df.with_columns((pl.col("points") * 2).alias("polars_only_feature"))
|
|
31
|
+
|
|
32
|
+
def transform(self, df):
|
|
33
|
+
if not isinstance(df, pl.DataFrame):
|
|
34
|
+
raise TypeError("Expected polars DataFrame")
|
|
35
|
+
return df.with_columns((pl.col("points") * 2).alias("polars_only_feature"))
|
|
36
|
+
|
|
37
|
+
def future_transform(self, df):
|
|
38
|
+
return self.transform(df)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_feature_generator_pipeline__passes_native_polars_to_custom_generator(column_names):
|
|
42
|
+
data = pl.DataFrame(
|
|
43
|
+
{
|
|
44
|
+
"game_id": [1, 1],
|
|
45
|
+
"team_id": ["A", "B"],
|
|
46
|
+
"player_id": ["p1", "p2"],
|
|
47
|
+
"date": pd.to_datetime(["2023-01-01", "2023-01-01"]),
|
|
48
|
+
"points": [10, 15],
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
pipeline = FeatureGeneratorPipeline(
|
|
53
|
+
feature_generators=[PolarsOnlyGenerator()],
|
|
54
|
+
column_names=column_names,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
result = pipeline.fit_transform(data, column_names=column_names)
|
|
58
|
+
|
|
59
|
+
assert "polars_only_feature" in result.columns
|
|
60
|
+
|
|
61
|
+
|
|
19
62
|
@pytest.mark.parametrize("df_type", [pd.DataFrame, pl.DataFrame])
|
|
20
63
|
def test_feature_generator_pipeline__fit_transform_preserves_row_count(df_type, column_names):
|
|
21
64
|
"""FeatureGeneratorPipeline.fit_transform should preserve row count."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/_performances_transformers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_player_ratings_hyperparameter_tuning.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{spforge-0.8.7 → spforge-0.8.8}/tests/performance_transformers/test_performances_transformers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|