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.

Files changed (117) hide show
  1. {spforge-0.8.7/spforge.egg-info → spforge-0.8.8}/PKG-INFO +1 -1
  2. {spforge-0.8.7 → spforge-0.8.8}/pyproject.toml +1 -1
  3. {spforge-0.8.7 → spforge-0.8.8}/spforge/features_generator_pipeline.py +8 -4
  4. {spforge-0.8.7 → spforge-0.8.8/spforge.egg-info}/PKG-INFO +1 -1
  5. {spforge-0.8.7 → spforge-0.8.8}/tests/test_feature_generator_pipeline.py +43 -0
  6. {spforge-0.8.7 → spforge-0.8.8}/LICENSE +0 -0
  7. {spforge-0.8.7 → spforge-0.8.8}/MANIFEST.in +0 -0
  8. {spforge-0.8.7 → spforge-0.8.8}/README.md +0 -0
  9. {spforge-0.8.7 → spforge-0.8.8}/examples/__init__.py +0 -0
  10. {spforge-0.8.7 → spforge-0.8.8}/examples/game_level_example.py +0 -0
  11. {spforge-0.8.7 → spforge-0.8.8}/examples/lol/__init__.py +0 -0
  12. {spforge-0.8.7 → spforge-0.8.8}/examples/lol/data/__init__.py +0 -0
  13. {spforge-0.8.7 → spforge-0.8.8}/examples/lol/data/subsample_lol_data.parquet +0 -0
  14. {spforge-0.8.7 → spforge-0.8.8}/examples/lol/data/utils.py +0 -0
  15. {spforge-0.8.7 → spforge-0.8.8}/examples/lol/pipeline_transformer_example.py +0 -0
  16. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/__init__.py +0 -0
  17. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/cross_validation_example.py +0 -0
  18. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/data/__init__.py +0 -0
  19. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/data/game_player_subsample.parquet +0 -0
  20. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/data/utils.py +0 -0
  21. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/feature_engineering_example.py +0 -0
  22. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/game_winner_example.py +0 -0
  23. {spforge-0.8.7 → spforge-0.8.8}/examples/nba/predictor_transformers_example.py +0 -0
  24. {spforge-0.8.7 → spforge-0.8.8}/setup.cfg +0 -0
  25. {spforge-0.8.7 → spforge-0.8.8}/spforge/__init__.py +0 -0
  26. {spforge-0.8.7 → spforge-0.8.8}/spforge/autopipeline.py +0 -0
  27. {spforge-0.8.7 → spforge-0.8.8}/spforge/base_feature_generator.py +0 -0
  28. {spforge-0.8.7 → spforge-0.8.8}/spforge/cross_validator/__init__.py +0 -0
  29. {spforge-0.8.7 → spforge-0.8.8}/spforge/cross_validator/_base.py +0 -0
  30. {spforge-0.8.7 → spforge-0.8.8}/spforge/cross_validator/cross_validator.py +0 -0
  31. {spforge-0.8.7 → spforge-0.8.8}/spforge/data_structures.py +0 -0
  32. {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/__init__.py +0 -0
  33. {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/_negative_binomial_estimator.py +0 -0
  34. {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/_normal_distribution_predictor.py +0 -0
  35. {spforge-0.8.7 → spforge-0.8.8}/spforge/distributions/_student_t_distribution_estimator.py +0 -0
  36. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/__init__.py +0 -0
  37. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_conditional_estimator.py +0 -0
  38. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_frequency_bucketing_classifier.py +0 -0
  39. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_granularity_estimator.py +0 -0
  40. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_group_by_estimator.py +0 -0
  41. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_ordinal_classifier.py +0 -0
  42. {spforge-0.8.7 → spforge-0.8.8}/spforge/estimator/_sklearn_enhancer_estimator.py +0 -0
  43. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/__init__.py +0 -0
  44. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_base.py +0 -0
  45. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_lag.py +0 -0
  46. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_net_over_predicted.py +0 -0
  47. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_regressor_feature_generator.py +0 -0
  48. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_against_opponent.py +0 -0
  49. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_mean_binary.py +0 -0
  50. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_mean_days.py +0 -0
  51. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_rolling_window.py +0 -0
  52. {spforge-0.8.7 → spforge-0.8.8}/spforge/feature_generator/_utils.py +0 -0
  53. {spforge-0.8.7 → spforge-0.8.8}/spforge/hyperparameter_tuning/__init__.py +0 -0
  54. {spforge-0.8.7 → spforge-0.8.8}/spforge/hyperparameter_tuning/_default_search_spaces.py +0 -0
  55. {spforge-0.8.7 → spforge-0.8.8}/spforge/hyperparameter_tuning/_tuner.py +0 -0
  56. {spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/__init__.py +0 -0
  57. {spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/_performance_manager.py +0 -0
  58. {spforge-0.8.7 → spforge-0.8.8}/spforge/performance_transformers/_performances_transformers.py +0 -0
  59. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/__init__.py +0 -0
  60. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/_base.py +0 -0
  61. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/_player_rating.py +0 -0
  62. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/_team_rating.py +0 -0
  63. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/enums.py +0 -0
  64. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/league_identifier.py +0 -0
  65. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/league_start_rating_optimizer.py +0 -0
  66. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/player_performance_predictor.py +0 -0
  67. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/start_rating_generator.py +0 -0
  68. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/team_performance_predictor.py +0 -0
  69. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/team_start_rating_generator.py +0 -0
  70. {spforge-0.8.7 → spforge-0.8.8}/spforge/ratings/utils.py +0 -0
  71. {spforge-0.8.7 → spforge-0.8.8}/spforge/scorer/__init__.py +0 -0
  72. {spforge-0.8.7 → spforge-0.8.8}/spforge/scorer/_score.py +0 -0
  73. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/__init__.py +0 -0
  74. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_base.py +0 -0
  75. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_net_over_predicted.py +0 -0
  76. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_operator.py +0 -0
  77. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_other_transformer.py +0 -0
  78. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_predictor.py +0 -0
  79. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_simple_transformer.py +0 -0
  80. {spforge-0.8.7 → spforge-0.8.8}/spforge/transformers/_team_ratio_predictor.py +0 -0
  81. {spforge-0.8.7 → spforge-0.8.8}/spforge/utils.py +0 -0
  82. {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/SOURCES.txt +0 -0
  83. {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/dependency_links.txt +0 -0
  84. {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/requires.txt +0 -0
  85. {spforge-0.8.7 → spforge-0.8.8}/spforge.egg-info/top_level.txt +0 -0
  86. {spforge-0.8.7 → spforge-0.8.8}/tests/cross_validator/test_cross_validator.py +0 -0
  87. {spforge-0.8.7 → spforge-0.8.8}/tests/distributions/test_distribution.py +0 -0
  88. {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_estimator_hyperparameter_tuning.py +0 -0
  89. {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_league_start_rating_optimizer.py +0 -0
  90. {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_lol_player_kills.py +0 -0
  91. {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_player_points.py +0 -0
  92. {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_player_ratings_hyperparameter_tuning.py +0 -0
  93. {spforge-0.8.7 → spforge-0.8.8}/tests/end_to_end/test_nba_prediction_consistency.py +0 -0
  94. {spforge-0.8.7 → spforge-0.8.8}/tests/estimator/test_sklearn_estimator.py +0 -0
  95. {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_lag.py +0 -0
  96. {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_regressor_feature_generator.py +0 -0
  97. {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_against_opponent.py +0 -0
  98. {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_mean_binary.py +0 -0
  99. {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_mean_days.py +0 -0
  100. {spforge-0.8.7 → spforge-0.8.8}/tests/feature_generator/test_rolling_window.py +0 -0
  101. {spforge-0.8.7 → spforge-0.8.8}/tests/hyperparameter_tuning/test_estimator_tuner.py +0 -0
  102. {spforge-0.8.7 → spforge-0.8.8}/tests/hyperparameter_tuning/test_rating_tuner.py +0 -0
  103. {spforge-0.8.7 → spforge-0.8.8}/tests/performance_transformers/test_performance_manager.py +0 -0
  104. {spforge-0.8.7 → spforge-0.8.8}/tests/performance_transformers/test_performances_transformers.py +0 -0
  105. {spforge-0.8.7 → spforge-0.8.8}/tests/ratings/test_player_rating_generator.py +0 -0
  106. {spforge-0.8.7 → spforge-0.8.8}/tests/ratings/test_ratings_property.py +0 -0
  107. {spforge-0.8.7 → spforge-0.8.8}/tests/ratings/test_team_rating_generator.py +0 -0
  108. {spforge-0.8.7 → spforge-0.8.8}/tests/scorer/test_score.py +0 -0
  109. {spforge-0.8.7 → spforge-0.8.8}/tests/scorer/test_score_aggregation_granularity.py +0 -0
  110. {spforge-0.8.7 → spforge-0.8.8}/tests/test_autopipeline.py +0 -0
  111. {spforge-0.8.7 → spforge-0.8.8}/tests/test_autopipeline_context.py +0 -0
  112. {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_estimator_transformer_context.py +0 -0
  113. {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_net_over_predicted.py +0 -0
  114. {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_other_transformer.py +0 -0
  115. {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_predictor_transformer.py +0 -0
  116. {spforge-0.8.7 → spforge-0.8.8}/tests/transformers/test_simple_transformer.py +0 -0
  117. {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.7
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"
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
- df = nw.from_native(transformer.fit_transform(df, column_names=column_names))
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
- df = nw.from_native(transformer.transform(df))
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
- df = nw.from_native(transformer.future_transform(df))
186
+ native_df = df.to_native()
187
+ df = nw.from_native(transformer.future_transform(native_df))
185
188
  else:
186
- df = nw.from_native(transformer.transform(df))
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.7
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