autogluon.tabular 1.2.1b20250304__py3-none-any.whl → 1.2.1b20250306__py3-none-any.whl

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.
Files changed (31) hide show
  1. autogluon/tabular/models/automm/automm_model.py +5 -1
  2. autogluon/tabular/models/automm/ft_transformer.py +1 -0
  3. autogluon/tabular/models/catboost/catboost_model.py +2 -0
  4. autogluon/tabular/models/fasttext/fasttext_model.py +7 -1
  5. autogluon/tabular/models/image_prediction/image_predictor.py +6 -0
  6. autogluon/tabular/models/imodels/imodels_models.py +6 -0
  7. autogluon/tabular/models/knn/knn_model.py +2 -0
  8. autogluon/tabular/models/lr/lr_model.py +2 -0
  9. autogluon/tabular/models/rf/rf_model.py +4 -2
  10. autogluon/tabular/models/tab_transformer/tab_transformer_model.py +5 -0
  11. autogluon/tabular/models/tabpfn/tabpfn_model.py +4 -7
  12. autogluon/tabular/models/tabpfnmix/tabpfnmix_model.py +2 -16
  13. autogluon/tabular/models/tabular_nn/torch/tabular_nn_torch.py +4 -2
  14. autogluon/tabular/models/text_prediction/text_prediction_v1_model.py +6 -0
  15. autogluon/tabular/models/vowpalwabbit/vowpalwabbit_model.py +6 -1
  16. autogluon/tabular/models/xgboost/xgboost_model.py +7 -4
  17. autogluon/tabular/models/xt/xt_model.py +2 -0
  18. autogluon/tabular/testing/__init__.py +2 -0
  19. autogluon/tabular/testing/fit_helper.py +476 -0
  20. autogluon/tabular/testing/generate_datasets.py +141 -0
  21. autogluon/tabular/testing/model_fit_helper.py +86 -0
  22. autogluon/tabular/version.py +1 -1
  23. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/METADATA +11 -11
  24. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/RECORD +31 -27
  25. /autogluon.tabular-1.2.1b20250304-py3.9-nspkg.pth → /autogluon.tabular-1.2.1b20250306-py3.9-nspkg.pth +0 -0
  26. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/LICENSE +0 -0
  27. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/NOTICE +0 -0
  28. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/WHEEL +0 -0
  29. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/namespace_packages.txt +0 -0
  30. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/top_level.txt +0 -0
  31. {autogluon.tabular-1.2.1b20250304.dist-info → autogluon.tabular-1.2.1b20250306.dist-info}/zip-safe +0 -0
@@ -1,4 +1,5 @@
1
1
  """Wrapper of the MultiModalPredictor."""
2
+ from __future__ import annotations
2
3
 
3
4
  import logging
4
5
  import os
@@ -83,11 +84,14 @@ class MultiModalPredictorModel(AbstractModel):
83
84
  default_ag_args = super()._get_default_ag_args()
84
85
  extra_ag_args = {
85
86
  "valid_stacker": False,
86
- "problem_types": [BINARY, MULTICLASS, REGRESSION],
87
87
  }
88
88
  default_ag_args.update(extra_ag_args)
89
89
  return default_ag_args
90
90
 
91
+ @classmethod
92
+ def supported_problem_types(cls) -> list[str] | None:
93
+ return ["binary", "multiclass", "regression"]
94
+
91
95
  # FIXME: Enable parallel bagging once AutoMM supports being run within Ray without hanging
92
96
  @classmethod
93
97
  def _get_default_ag_args_ensemble(cls, **kwargs) -> dict:
@@ -1,4 +1,5 @@
1
1
  """Wrapper of the MultiModalPredictor."""
2
+ from __future__ import annotations
2
3
 
3
4
  import logging
4
5
  from typing import Dict
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
  import math
3
5
  import os
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  __all__ = ["FastTextModel"]
2
4
 
3
5
  import contextlib
@@ -49,10 +51,14 @@ class FastTextModel(AbstractModel):
49
51
  @classmethod
50
52
  def _get_default_ag_args(cls) -> dict:
51
53
  default_ag_args = super()._get_default_ag_args()
52
- extra_ag_args = {"valid_stacker": False, "problem_types": [BINARY, MULTICLASS]}
54
+ extra_ag_args = {"valid_stacker": False}
53
55
  default_ag_args.update(extra_ag_args)
54
56
  return default_ag_args
55
57
 
58
+ @classmethod
59
+ def supported_problem_types(cls) -> list[str] | None:
60
+ return ["binary", "multiclass"]
61
+
56
62
  def _fit(self, X, y, sample_weight=None, **kwargs):
57
63
  if self.problem_type not in (BINARY, MULTICLASS):
58
64
  raise ValueError("FastText model only supports binary or multiclass classification")
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
 
3
5
  import numpy as np
@@ -123,3 +125,7 @@ class ImagePredictorModel(MultiModalPredictorModel):
123
125
  else:
124
126
  raise NotImplementedError(f"Computing dummy pred_proba is not implemented for {self.problem_type}.")
125
127
  return pred_proba_mean
128
+
129
+ @classmethod
130
+ def supported_problem_types(cls) -> list[str] | None:
131
+ return ["binary", "multiclass", "regression"]
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from abc import abstractmethod
2
4
 
3
5
  import numpy as np
@@ -63,6 +65,10 @@ class _IModelsModel(AbstractModel):
63
65
  for param, val in default_params.items():
64
66
  self._set_default_param_value(param, val)
65
67
 
68
+ @classmethod
69
+ def supported_problem_types(cls) -> list[str] | None:
70
+ return ["binary", "multiclass", "regression"]
71
+
66
72
  def _get_default_auxiliary_params(self) -> dict:
67
73
  default_auxiliary_params = super()._get_default_auxiliary_params()
68
74
  extra_auxiliary_params = dict(
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
  import math
3
5
  import time
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
  import re
3
5
  import time
@@ -399,8 +399,10 @@ class RFModel(AbstractModel):
399
399
  tags["valid_oof"] = True
400
400
  return tags
401
401
 
402
- def _valid_compilers(self):
402
+ @classmethod
403
+ def _valid_compilers(cls):
403
404
  return [RFNativeCompiler, RFOnnxCompiler]
404
405
 
405
- def _default_compiler(self):
406
+ @classmethod
407
+ def _default_compiler(cls):
406
408
  return RFNativeCompiler
@@ -1,4 +1,5 @@
1
1
  """TabTransformer model"""
2
+ from __future__ import annotations
2
3
 
3
4
  import logging
4
5
  import os
@@ -486,6 +487,10 @@ class TabTransformerModel(AbstractNeuralNetworkModel):
486
487
  def _get_default_searchspace(self):
487
488
  return get_default_searchspace()
488
489
 
490
+ @classmethod
491
+ def supported_problem_types(cls) -> list[str] | None:
492
+ return ["binary", "multiclass", "regression"]
493
+
489
494
  def save(self, path: str = None, verbose=True) -> str:
490
495
  import torch
491
496
 
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import numpy as np
2
4
  import pandas as pd
3
5
 
@@ -97,13 +99,8 @@ class TabPFNModel(AbstractModel):
97
99
  self._set_default_param_value(param, val)
98
100
 
99
101
  @classmethod
100
- def _get_default_ag_args(cls) -> dict:
101
- default_ag_args = super()._get_default_ag_args()
102
- extra_ag_args = {
103
- "problem_types": [BINARY, MULTICLASS],
104
- }
105
- default_ag_args.update(extra_ag_args)
106
- return default_ag_args
102
+ def supported_problem_types(cls) -> list[str] | None:
103
+ return ["binary", "multiclass"]
107
104
 
108
105
  def _get_default_auxiliary_params(self) -> dict:
109
106
  """
@@ -297,13 +297,8 @@ class TabPFNMixModel(AbstractModel):
297
297
  return os.path.join(self.path, self.weights_file_name)
298
298
 
299
299
  @classmethod
300
- def _get_default_ag_args(cls) -> dict:
301
- default_ag_args = super()._get_default_ag_args()
302
- extra_ag_args = {
303
- "problem_types": [BINARY, MULTICLASS, REGRESSION],
304
- }
305
- default_ag_args.update(extra_ag_args)
306
- return default_ag_args
300
+ def supported_problem_types(cls) -> list[str] | None:
301
+ return ["binary", "multiclass", "regression"]
307
302
 
308
303
  def _get_default_auxiliary_params(self) -> dict:
309
304
  default_auxiliary_params = super()._get_default_auxiliary_params()
@@ -314,15 +309,6 @@ class TabPFNMixModel(AbstractModel):
314
309
  )
315
310
  return default_auxiliary_params
316
311
 
317
- @classmethod
318
- def _get_default_ag_args_ensemble(cls, **kwargs) -> dict:
319
- default_ag_args_ensemble = super()._get_default_ag_args_ensemble(**kwargs)
320
- extra_ag_args_ensemble = {
321
- # "fold_fitting_strategy": "sequential_local", # FIXME: Comment out after debugging for large speedup
322
- }
323
- default_ag_args_ensemble.update(extra_ag_args_ensemble)
324
- return default_ag_args_ensemble
325
-
326
312
  def _get_maximum_resources(self) -> dict[str, int | float]:
327
313
  # torch model trains slower when utilizing virtual cores and this issue scale up when the number of cpu cores increases
328
314
  return {"num_cpus": ResourceManager.get_cpu_count_psutil(logical=False)}
@@ -897,10 +897,12 @@ class TabularNeuralNetTorchModel(AbstractNeuralNetworkModel):
897
897
  minimum_resources["num_gpus"] = 1
898
898
  return minimum_resources
899
899
 
900
- def _valid_compilers(self):
900
+ @classmethod
901
+ def _valid_compilers(cls):
901
902
  return [TabularNeuralNetTorchNativeCompiler, TabularNeuralNetTorchOnnxCompiler]
902
903
 
903
- def _default_compiler(self):
904
+ @classmethod
905
+ def _default_compiler(cls):
904
906
  return TabularNeuralNetTorchNativeCompiler
905
907
 
906
908
  def _ag_params(self) -> set:
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
 
3
5
  from autogluon.common.features.types import (
@@ -30,3 +32,7 @@ class TextPredictorModel(MultiModalPredictorModel):
30
32
  )
31
33
  default_auxiliary_params.update(extra_auxiliary_params)
32
34
  return default_auxiliary_params
35
+
36
+ @classmethod
37
+ def supported_problem_types(cls) -> list[str] | None:
38
+ return ["binary", "multiclass", "regression"]
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
  import os
3
5
  import time
@@ -267,11 +269,14 @@ class VowpalWabbitModel(AbstractModel):
267
269
  default_ag_args = super()._get_default_ag_args()
268
270
  extra_ag_args = {
269
271
  "valid_stacker": False,
270
- "problem_types": [BINARY, MULTICLASS, REGRESSION],
271
272
  }
272
273
  default_ag_args.update(extra_ag_args)
273
274
  return default_ag_args
274
275
 
276
+ @classmethod
277
+ def supported_problem_types(cls) -> list[str] | None:
278
+ return ["binary", "multiclass", "regression"]
279
+
275
280
  def _more_tags(self):
276
281
  # `can_refit_full=True` because best epoch is communicated at end of `_fit`: `self.params_trained['passes'] = epoch`
277
282
  return {"can_refit_full": True}
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import logging
2
4
  import math
3
5
  import os
@@ -141,10 +143,11 @@ class XGBoostModel(AbstractModel):
141
143
  eval_set["test"] = (X_test, y_test)
142
144
 
143
145
  if num_gpus != 0:
144
- params["tree_method"] = "gpu_hist"
145
- if "gpu_id" not in params:
146
- params["gpu_id"] = 0
147
- elif "tree_method" not in params:
146
+ if "device" not in params:
147
+ # FIXME: figure out which GPUs are available to this model instead of hardcoding GPU 0.
148
+ # Need to update BaggedEnsembleModel
149
+ params["device"] = "cuda:0"
150
+ if "tree_method" not in params:
148
151
  params["tree_method"] = "hist"
149
152
 
150
153
  try_import_xgboost()
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from autogluon.core.constants import QUANTILE, REGRESSION
2
4
 
3
5
  from ..rf.rf_model import RFModel
@@ -0,0 +1,2 @@
1
+ from .fit_helper import FitHelper
2
+ from .model_fit_helper import ModelFitHelper
@@ -0,0 +1,476 @@
1
+ from __future__ import annotations
2
+
3
+ import copy
4
+ import os
5
+ import pandas as pd
6
+ import shutil
7
+ import uuid
8
+ from typing import Any, Type
9
+
10
+ from autogluon.common.utils.path_converter import PathConverter
11
+ from autogluon.core.constants import BINARY, MULTICLASS, REGRESSION
12
+ from autogluon.core.metrics import METRICS
13
+ from autogluon.core.models import AbstractModel, BaggedEnsembleModel
14
+ from autogluon.core.stacked_overfitting.utils import check_stacked_overfitting_from_leaderboard
15
+ from autogluon.core.utils import download, generate_train_test_split_combined, infer_problem_type, unzip
16
+
17
+ from autogluon.tabular import TabularDataset, TabularPredictor
18
+ from autogluon.tabular.testing.generate_datasets import (
19
+ generate_toy_binary_dataset,
20
+ generate_toy_binary_10_dataset,
21
+ generate_toy_multiclass_dataset,
22
+ generate_toy_regression_dataset,
23
+ generate_toy_quantile_dataset,
24
+ generate_toy_multiclass_10_dataset,
25
+ generate_toy_regression_10_dataset,
26
+ generate_toy_quantile_10_dataset,
27
+ generate_toy_multiclass_30_dataset,
28
+ )
29
+
30
+
31
+ class DatasetLoaderHelper:
32
+ dataset_info_dict = dict(
33
+ # Binary dataset
34
+ adult={
35
+ "url": "https://autogluon.s3.amazonaws.com/datasets/AdultIncomeBinaryClassification.zip",
36
+ "name": "AdultIncomeBinaryClassification",
37
+ "problem_type": BINARY,
38
+ "label": "class",
39
+ },
40
+ # Multiclass big dataset with 7 classes, all features are numeric. Runs SLOW.
41
+ covertype={
42
+ "url": "https://autogluon.s3.amazonaws.com/datasets/CoverTypeMulticlassClassification.zip",
43
+ "name": "CoverTypeMulticlassClassification",
44
+ "problem_type": MULTICLASS,
45
+ "label": "Cover_Type",
46
+ },
47
+ # Subset of covertype dataset with 3k train/test rows. Ratio of labels is preserved.
48
+ covertype_small={
49
+ "url": "https://autogluon.s3.amazonaws.com/datasets/CoverTypeMulticlassClassificationSmall.zip",
50
+ "name": "CoverTypeMulticlassClassificationSmall",
51
+ "problem_type": MULTICLASS,
52
+ "label": "Cover_Type",
53
+ },
54
+ # Regression with mixed feature-types, skewed Y-values.
55
+ ames={
56
+ "url": "https://autogluon.s3.amazonaws.com/datasets/AmesHousingPriceRegression.zip",
57
+ "name": "AmesHousingPriceRegression",
58
+ "problem_type": REGRESSION,
59
+ "label": "SalePrice",
60
+ },
61
+ # Regression with multiple text field and categorical
62
+ sts={
63
+ "url": "https://autogluon-text.s3.amazonaws.com/glue_sts.zip",
64
+ "name": "glue_sts",
65
+ "problem_type": REGRESSION,
66
+ "label": "score",
67
+ },
68
+ )
69
+
70
+ toy_map = dict(
71
+ toy_binary=generate_toy_binary_dataset,
72
+ toy_multiclass=generate_toy_multiclass_dataset,
73
+ toy_regression=generate_toy_regression_dataset,
74
+ toy_quantile=generate_toy_quantile_dataset,
75
+ toy_binary_10=generate_toy_binary_10_dataset,
76
+ toy_multiclass_10=generate_toy_multiclass_10_dataset,
77
+ toy_regression_10=generate_toy_regression_10_dataset,
78
+ toy_quantile_10=generate_toy_quantile_10_dataset,
79
+ toy_multiclass_30=generate_toy_multiclass_30_dataset,
80
+ )
81
+
82
+ @staticmethod
83
+ def load_dataset(name: str, directory_prefix: str = "./datasets/") -> tuple[pd.DataFrame, pd.DataFrame, dict]:
84
+ if name in DatasetLoaderHelper.toy_map:
85
+ return DatasetLoaderHelper.toy_map[name]()
86
+ dataset_info = copy.deepcopy(DatasetLoaderHelper.dataset_info_dict[name])
87
+ train_file = dataset_info.pop("train_file", "train_data.csv")
88
+ test_file = dataset_info.pop("test_file", "test_data.csv")
89
+ name_inner = dataset_info.pop("name")
90
+ url = dataset_info.pop("url", None)
91
+ train_data, test_data = DatasetLoaderHelper.load_data(
92
+ directory_prefix=directory_prefix,
93
+ train_file=train_file,
94
+ test_file=test_file,
95
+ name=name_inner,
96
+ url=url,
97
+ )
98
+
99
+ return train_data, test_data, dataset_info
100
+
101
+ # TODO: Refactor this eventually, this is old code from 2019 that can be improved (use consistent local path for datasets, don't assume zip files, etc.)
102
+ @staticmethod
103
+ def load_data(
104
+ directory_prefix: str,
105
+ train_file: str,
106
+ test_file: str,
107
+ name: str,
108
+ url: str | None = None,
109
+ ) -> tuple[pd.DataFrame, pd.DataFrame]:
110
+ """
111
+ Will check if files exist locally for:
112
+ directory_prefix/name/train_file
113
+ directory_prefix/name/test_file
114
+ If either don't exist, then download the files from the `url` location.
115
+ Then, load both train and test data and return them.
116
+
117
+ Parameters
118
+ ----------
119
+ directory_prefix
120
+ train_file
121
+ test_file
122
+ name
123
+ url
124
+
125
+ Returns
126
+ -------
127
+ train_data: pd.DataFrame
128
+ test_data: pd.DataFrame
129
+ """
130
+ if not os.path.exists(directory_prefix):
131
+ os.mkdir(directory_prefix)
132
+ directory = directory_prefix + name + "/"
133
+ train_file_path = directory + train_file
134
+ test_file_path = directory + test_file
135
+ if (not os.path.exists(train_file_path)) or (not os.path.exists(test_file_path)):
136
+ # fetch files from s3:
137
+ print("%s data not found locally, so fetching from %s" % (name, url))
138
+ zip_name = download(url, directory_prefix)
139
+ unzip(zip_name, directory_prefix)
140
+ os.remove(zip_name)
141
+
142
+ train_data = TabularDataset(train_file_path)
143
+ test_data = TabularDataset(test_file_path)
144
+ return train_data, test_data
145
+
146
+
147
+ class FitHelper:
148
+ """
149
+ Helper functions to test and verify predictors and models when fit through TabularPredictor's API.
150
+ """
151
+ @staticmethod
152
+ def fit_and_validate_dataset(
153
+ dataset_name: str,
154
+ fit_args: dict[str, Any],
155
+ init_args: dict[str, Any] | None = None,
156
+ sample_size: int | None = 1000, # FIXME: default to None
157
+ refit_full: bool = True,
158
+ delete_directory: bool = True,
159
+ extra_metrics: list[str] | None = None,
160
+ extra_info: bool = False,
161
+ predictor_info: bool = False,
162
+ expected_model_count: int | None = 2,
163
+ fit_weighted_ensemble: bool = True,
164
+ min_cls_count_train: int = 1,
165
+ path_as_absolute: bool = False,
166
+ compile: bool = False,
167
+ compiler_configs: dict | None = None,
168
+ allowed_dataset_features: list[str] | None = None,
169
+ expected_stacked_overfitting_at_test: bool | None = None,
170
+ expected_stacked_overfitting_at_val: bool | None = None,
171
+ scikit_api: bool = False,
172
+ use_test_data: bool = False,
173
+ use_test_for_val: bool = False,
174
+ raise_on_model_failure: bool | None = None,
175
+ deepcopy_fit_args: bool = True,
176
+ ) -> TabularPredictor:
177
+ if compiler_configs is None:
178
+ compiler_configs = {}
179
+ directory_prefix = "./datasets/"
180
+ train_data, test_data, dataset_info = DatasetLoaderHelper.load_dataset(name=dataset_name, directory_prefix=directory_prefix)
181
+ label = dataset_info["label"]
182
+ problem_type = dataset_info["problem_type"]
183
+ _init_args = dict(
184
+ label=label,
185
+ problem_type=problem_type,
186
+ )
187
+ if "init_kwargs" in dataset_info:
188
+ _init_args.update(dataset_info["init_kwargs"])
189
+ if allowed_dataset_features is not None:
190
+ train_data = train_data[allowed_dataset_features + [label]]
191
+ test_data = test_data[allowed_dataset_features + [label]]
192
+
193
+ if init_args is None:
194
+ init_args = _init_args
195
+ else:
196
+ init_args = copy.deepcopy(init_args)
197
+ _init_args.update(init_args)
198
+ init_args = _init_args
199
+ if "path" not in init_args:
200
+ init_args["path"] = os.path.join(directory_prefix, dataset_name, f"AutogluonOutput_{uuid.uuid4()}")
201
+ if path_as_absolute:
202
+ init_args["path"] = PathConverter.to_absolute(path=init_args["path"])
203
+ assert PathConverter._is_absolute(path=init_args["path"])
204
+ save_path = init_args["path"]
205
+
206
+ if deepcopy_fit_args:
207
+ fit_args = copy.deepcopy(fit_args)
208
+ if use_test_data:
209
+ fit_args["test_data"] = test_data
210
+ if use_test_for_val:
211
+ fit_args["tuning_data"] = test_data
212
+ if raise_on_model_failure is not None and "raise_on_model_failure" not in fit_args:
213
+ fit_args["raise_on_model_failure"] = raise_on_model_failure
214
+ if "fit_weighted_ensemble" not in fit_args:
215
+ if not fit_weighted_ensemble and expected_model_count is not None:
216
+ expected_model_count -= 1
217
+ fit_args["fit_weighted_ensemble"] = fit_weighted_ensemble
218
+
219
+ predictor: TabularPredictor = FitHelper.fit_dataset(
220
+ train_data=train_data,
221
+ init_args=init_args,
222
+ fit_args=fit_args,
223
+ sample_size=sample_size,
224
+ scikit_api=scikit_api,
225
+ min_cls_count_train=min_cls_count_train,
226
+ )
227
+ if compile:
228
+ predictor.compile(models="all", compiler_configs=compiler_configs)
229
+ predictor.persist(models="all")
230
+ if sample_size is not None and sample_size < len(test_data):
231
+ test_data = test_data.sample(n=sample_size, random_state=0)
232
+ predictor.predict(test_data)
233
+ predictor.evaluate(test_data)
234
+
235
+ if predictor.can_predict_proba:
236
+ pred_proba = predictor.predict_proba(test_data)
237
+ predictor.evaluate_predictions(y_true=test_data[label], y_pred=pred_proba)
238
+ else:
239
+ try:
240
+ predictor.predict_proba(test_data)
241
+ except AssertionError:
242
+ pass # expected
243
+ else:
244
+ raise AssertionError("Expected `predict_proba` to raise AssertionError, but it didn't!")
245
+
246
+ model_names = predictor.model_names()
247
+ model_name = model_names[0]
248
+ if expected_model_count is not None:
249
+ assert len(model_names) == expected_model_count
250
+ if refit_full:
251
+ refit_model_names = predictor.refit_full()
252
+ if expected_model_count is not None:
253
+ assert len(refit_model_names) == expected_model_count
254
+ refit_model_name = refit_model_names[model_name]
255
+ assert "_FULL" in refit_model_name
256
+ predictor.predict(test_data, model=refit_model_name)
257
+ if predictor.can_predict_proba:
258
+ predictor.predict_proba(test_data, model=refit_model_name)
259
+
260
+ # verify that val_in_fit is False if the model supports refit_full
261
+ model = predictor._trainer.load_model(refit_model_name)
262
+ if isinstance(model, BaggedEnsembleModel):
263
+ model = model.load_child(model.models[0])
264
+ model_info = model.get_info()
265
+ can_refit_full = model._get_tags()["can_refit_full"]
266
+ if can_refit_full:
267
+ assert not model_info["val_in_fit"], f"val data must not be present in refit model if `can_refit_full=True`. Maybe an exception occurred?"
268
+ else:
269
+ assert model_info["val_in_fit"], f"val data must be present in refit model if `can_refit_full=False`"
270
+
271
+ if predictor_info:
272
+ predictor.info()
273
+ lb_kwargs = {}
274
+ if extra_info:
275
+ lb_kwargs["extra_info"] = True
276
+ lb = predictor.leaderboard(test_data, extra_metrics=extra_metrics, **lb_kwargs)
277
+ stacked_overfitting_assert(lb, predictor, expected_stacked_overfitting_at_val, expected_stacked_overfitting_at_test)
278
+
279
+ predictor_load = predictor.load(path=predictor.path)
280
+ predictor_load.predict(test_data)
281
+
282
+ assert os.path.realpath(save_path) == os.path.realpath(predictor.path)
283
+ if delete_directory:
284
+ shutil.rmtree(save_path, ignore_errors=True) # Delete AutoGluon output directory to ensure runs' information has been removed.
285
+ return predictor
286
+
287
+ @staticmethod
288
+ def load_dataset(name: str, directory_prefix: str = "./datasets/") -> tuple[pd.DataFrame, pd.DataFrame, dict]:
289
+ return DatasetLoaderHelper.load_dataset(name=name, directory_prefix=directory_prefix)
290
+
291
+ @staticmethod
292
+ def fit_dataset(
293
+ train_data: pd.DataFrame,
294
+ init_args: dict[str, Any],
295
+ fit_args: dict[str, Any],
296
+ sample_size: int | None = None,
297
+ min_cls_count_train: int = 1,
298
+ scikit_api: bool = False,
299
+ ) -> TabularPredictor:
300
+ if "problem_type" in init_args:
301
+ problem_type = init_args["problem_type"]
302
+ else:
303
+ problem_type = infer_problem_type(train_data[init_args["label"]])
304
+
305
+ if sample_size is not None and sample_size < len(train_data):
306
+ train_data, _ = generate_train_test_split_combined(
307
+ data=train_data,
308
+ label=init_args["label"],
309
+ problem_type=problem_type,
310
+ test_size=len(train_data) - sample_size,
311
+ min_cls_count_train=min_cls_count_train,
312
+ )
313
+
314
+ if scikit_api:
315
+ from autogluon.tabular.experimental import TabularClassifier, TabularRegressor
316
+
317
+ X = train_data.drop(columns=[init_args["label"]])
318
+ y = train_data[init_args["label"]]
319
+ if problem_type in [REGRESSION]:
320
+ regressor = TabularRegressor(init_args=init_args, fit_args=fit_args)
321
+ regressor.fit(X, y)
322
+ return regressor.predictor_
323
+ else:
324
+ classifier = TabularClassifier(init_args=init_args, fit_args=fit_args)
325
+ classifier.fit(X, y)
326
+ return classifier.predictor_
327
+ else:
328
+ return TabularPredictor(**init_args).fit(train_data, **fit_args)
329
+
330
+ @staticmethod
331
+ def verify_model(
332
+ model_cls: Type[AbstractModel],
333
+ model_hyperparameters: dict[str, Any],
334
+ bag: bool | str = "first",
335
+ refit_full: bool | str = "first",
336
+ extra_metrics: bool = False,
337
+ require_known_problem_types: bool = True,
338
+ raise_on_model_failure: bool = True,
339
+ problem_types: list[str] | None = None,
340
+ **kwargs,
341
+ ):
342
+ """
343
+
344
+ Parameters
345
+ ----------
346
+ model_cls
347
+ model_hyperparameters
348
+ bag
349
+ refit_full
350
+ extra_metrics
351
+ require_known_problem_types
352
+ raise_on_model_failure
353
+ problem_types: list[str], optional
354
+ If specified, checks the given problem_types.
355
+ If None, checks `model_cls.supported_problem_types()`
356
+ **kwargs
357
+
358
+ Returns
359
+ -------
360
+
361
+ """
362
+ fit_args = dict(
363
+ hyperparameters={model_cls: model_hyperparameters},
364
+ )
365
+ supported_problem_types = model_cls.supported_problem_types()
366
+ if supported_problem_types is None:
367
+ raise AssertionError(
368
+ f"Model must specify `cls.supported_problem_types`"
369
+ f"""\nExample code:
370
+ @classmethod
371
+ def supported_problem_types(cls) -> list[str] | None:
372
+ return ["binary", "multiclass", "regression", "quantile"]
373
+ """
374
+ )
375
+ assert isinstance(supported_problem_types, list)
376
+ assert len(supported_problem_types) > 0
377
+
378
+ known_problem_types = [
379
+ "binary",
380
+ "multiclass",
381
+ "regression",
382
+ "quantile",
383
+ "softclass",
384
+ ]
385
+
386
+ if require_known_problem_types:
387
+ for problem_type in supported_problem_types:
388
+ if problem_type not in known_problem_types:
389
+ raise AssertionError(
390
+ f"Model {model_cls.__name__} supports an unknown problem_type: {problem_type}"
391
+ f"\nKnown problem types: {known_problem_types}"
392
+ f"\nEither remove the unknown problem_type from `model_cls.supported_problem_types` or set `require_known_problem_types=False`"
393
+ )
394
+
395
+ problem_type_dataset_map = {
396
+ "binary": "toy_binary",
397
+ "multiclass": "toy_multiclass",
398
+ "regression": "toy_regression",
399
+ "quantile": "toy_quantile",
400
+ }
401
+
402
+ problem_types_refit_full = []
403
+ if refit_full:
404
+ if isinstance(refit_full, bool):
405
+ problem_types_refit_full = supported_problem_types
406
+ elif refit_full == "first":
407
+ problem_types_refit_full = supported_problem_types[:1]
408
+
409
+ if problem_types is None:
410
+ problem_types_to_check = supported_problem_types
411
+ else:
412
+ problem_types_to_check = problem_types
413
+
414
+ for problem_type in problem_types_to_check:
415
+ if problem_type not in problem_type_dataset_map:
416
+ print(f"WARNING: Skipping check on problem_type='{problem_type}': No dataset available")
417
+ continue
418
+ _extra_metrics = None
419
+ if extra_metrics:
420
+ _extra_metrics = METRICS.get(problem_type, None)
421
+ refit_full = problem_type in problem_types_refit_full
422
+ dataset_name = problem_type_dataset_map[problem_type]
423
+ FitHelper.fit_and_validate_dataset(
424
+ dataset_name=dataset_name,
425
+ fit_args=fit_args,
426
+ fit_weighted_ensemble=False,
427
+ refit_full=refit_full,
428
+ extra_metrics=_extra_metrics,
429
+ raise_on_model_failure=raise_on_model_failure,
430
+ **kwargs,
431
+ )
432
+
433
+ if bag:
434
+ model_params_bag = copy.deepcopy(model_hyperparameters)
435
+ model_params_bag["ag_args_ensemble"] = {"fold_fitting_strategy": "sequential_local"}
436
+ fit_args_bag = dict(
437
+ hyperparameters={model_cls: model_params_bag},
438
+ num_bag_folds=2,
439
+ num_bag_sets=1,
440
+ )
441
+ if isinstance(bag, bool):
442
+ problem_types_bag = supported_problem_types
443
+ elif bag == "first":
444
+ problem_types_bag = supported_problem_types[:1]
445
+ else:
446
+ raise ValueError(f"Unknown 'bag' value: {bag}")
447
+
448
+ for problem_type in problem_types_bag:
449
+ _extra_metrics = None
450
+ if extra_metrics:
451
+ _extra_metrics = METRICS.get(problem_type, None)
452
+ refit_full = problem_type in problem_types_refit_full
453
+ dataset_name = problem_type_dataset_map[problem_type]
454
+ FitHelper.fit_and_validate_dataset(
455
+ dataset_name=dataset_name,
456
+ fit_args=fit_args_bag,
457
+ fit_weighted_ensemble=False,
458
+ refit_full=refit_full,
459
+ extra_metrics=_extra_metrics,
460
+ raise_on_model_failure=raise_on_model_failure,
461
+ **kwargs,
462
+ )
463
+
464
+
465
+ def stacked_overfitting_assert(
466
+ lb: pd.DataFrame,
467
+ predictor: TabularPredictor,
468
+ expected_stacked_overfitting_at_val: bool | None,
469
+ expected_stacked_overfitting_at_test: bool | None,
470
+ ):
471
+ if expected_stacked_overfitting_at_val is not None:
472
+ assert predictor._stacked_overfitting_occurred == expected_stacked_overfitting_at_val, "Expected stacked overfitting at val mismatch!"
473
+
474
+ if expected_stacked_overfitting_at_test is not None:
475
+ stacked_overfitting = check_stacked_overfitting_from_leaderboard(lb)
476
+ assert stacked_overfitting == expected_stacked_overfitting_at_test, "Expected stacked overfitting at test mismatch!"
@@ -0,0 +1,141 @@
1
+ from __future__ import annotations
2
+
3
+ import pandas as pd
4
+ from sklearn.datasets import make_blobs
5
+
6
+ from autogluon.core.constants import BINARY, MULTICLASS, REGRESSION, QUANTILE
7
+
8
+
9
+ def generate_toy_binary_dataset():
10
+ label = "label"
11
+ dummy_dataset = {
12
+ "int": [0, 1, 2, 3],
13
+ label: [0, 0, 1, 1],
14
+ }
15
+
16
+ dataset_info = {
17
+ "problem_type": BINARY,
18
+ "label": label,
19
+ }
20
+
21
+ train_data = pd.DataFrame(dummy_dataset)
22
+ test_data = train_data
23
+ return train_data, test_data, dataset_info
24
+
25
+
26
+ def generate_toy_multiclass_dataset():
27
+ label = "label"
28
+ dummy_dataset = {
29
+ "int": [0, 1, 2, 3, 4, 5],
30
+ label: [0, 0, 1, 1, 2, 2],
31
+ }
32
+
33
+ dataset_info = {
34
+ "problem_type": MULTICLASS,
35
+ "label": label,
36
+ }
37
+
38
+ train_data = pd.DataFrame(dummy_dataset)
39
+ test_data = train_data
40
+ return train_data, test_data, dataset_info
41
+
42
+
43
+ def generate_toy_regression_dataset():
44
+ label = "label"
45
+ dummy_dataset = {
46
+ "int": [0, 1, 2, 3],
47
+ label: [0.1, 0.9, 1.1, 1.9],
48
+ }
49
+
50
+ dataset_info = {
51
+ "problem_type": REGRESSION,
52
+ "label": label,
53
+ }
54
+
55
+ train_data = pd.DataFrame(dummy_dataset)
56
+ test_data = train_data
57
+ return train_data, test_data, dataset_info
58
+
59
+
60
+ def generate_toy_quantile_dataset():
61
+ train_data, test_data, dataset_info = generate_toy_regression_dataset()
62
+ dataset_info["problem_type"] = QUANTILE
63
+ dataset_info["init_kwargs"] = {"quantile_levels": [0.25, 0.5, 0.75]}
64
+ return train_data, test_data, dataset_info
65
+
66
+
67
+ def generate_toy_binary_10_dataset():
68
+ label = "label"
69
+ dummy_dataset = {
70
+ "int": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
71
+ label: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0],
72
+ }
73
+
74
+ dataset_info = {
75
+ "problem_type": BINARY,
76
+ "label": label,
77
+ }
78
+
79
+ train_data = pd.DataFrame(dummy_dataset)
80
+ test_data = train_data
81
+ return train_data, test_data, dataset_info
82
+
83
+
84
+ def generate_toy_multiclass_10_dataset():
85
+ label = "label"
86
+ dummy_dataset = {
87
+ "int": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
88
+ label: [0, 0, 1, 1, 2, 2, 0, 0, 1, 1],
89
+ }
90
+
91
+ dataset_info = {
92
+ "problem_type": MULTICLASS,
93
+ "label": label,
94
+ }
95
+
96
+ train_data = pd.DataFrame(dummy_dataset)
97
+ test_data = train_data
98
+ return train_data, test_data, dataset_info
99
+
100
+
101
+ def generate_toy_regression_10_dataset():
102
+ label = "label"
103
+ dummy_dataset = {
104
+ "int": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
105
+ label: [0.1, 0.9, 1.1, 1.9, 0.2, 0.8, 1.2, 1.8, -0.1, 0.7],
106
+ }
107
+
108
+ dataset_info = {
109
+ "problem_type": REGRESSION,
110
+ "label": label,
111
+ }
112
+
113
+ train_data = pd.DataFrame(dummy_dataset)
114
+ test_data = train_data
115
+ return train_data, test_data, dataset_info
116
+
117
+
118
+ def generate_toy_quantile_10_dataset():
119
+ train_data, test_data, dataset_info = generate_toy_regression_10_dataset()
120
+ dataset_info["problem_type"] = QUANTILE
121
+ dataset_info["init_kwargs"] = {"quantile_levels": [0.25, 0.5, 0.75]}
122
+ return train_data, test_data, dataset_info
123
+
124
+
125
+ def generate_toy_multiclass_30_dataset():
126
+ label = "label"
127
+ train_data = generate_toy_multiclass_n_dataset(n_samples=30, n_features=2, n_classes=3)
128
+ test_data = train_data
129
+
130
+ dataset_info = {
131
+ "problem_type": MULTICLASS,
132
+ "label": label,
133
+ }
134
+ return train_data, test_data, dataset_info
135
+
136
+
137
+ def generate_toy_multiclass_n_dataset(n_samples, n_features, n_classes) -> pd.DataFrame:
138
+ X, y = make_blobs(centers=n_classes, n_samples=n_samples, n_features=n_features, cluster_std=0.5, random_state=0)
139
+ data = pd.DataFrame(X)
140
+ data["label"] = y
141
+ return data
@@ -0,0 +1,86 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Tuple
4
+
5
+ import numpy as np
6
+ import pandas as pd
7
+
8
+ from autogluon.core.data.label_cleaner import LabelCleaner
9
+ from autogluon.core.models import AbstractModel, BaggedEnsembleModel
10
+ from autogluon.core.utils import generate_train_test_split, infer_problem_type
11
+ from autogluon.features.generators import AbstractFeatureGenerator, AutoMLPipelineFeatureGenerator
12
+
13
+ from autogluon.tabular.testing.fit_helper import FitHelper
14
+
15
+
16
+ # Helper functions for training models outside of predictors
17
+ class ModelFitHelper:
18
+ """
19
+ Helper functions to test and verify models when fit outside TabularPredictor's API (aka as stand-alone models)
20
+ """
21
+ @staticmethod
22
+ def fit_and_validate_dataset(
23
+ dataset_name: str,
24
+ model: AbstractModel,
25
+ fit_args: dict,
26
+ sample_size: int = 1000,
27
+ check_predict_children: bool = False,
28
+ ) -> AbstractModel:
29
+ directory_prefix = "./datasets/"
30
+ train_data, test_data, dataset_info = FitHelper.load_dataset(name=dataset_name, directory_prefix=directory_prefix)
31
+ label = dataset_info["label"]
32
+ model, label_cleaner, feature_generator = ModelFitHelper.fit_dataset(
33
+ train_data=train_data, model=model, label=label, fit_args=fit_args, sample_size=sample_size
34
+ )
35
+ if sample_size is not None and sample_size < len(test_data):
36
+ test_data = test_data.sample(n=sample_size, random_state=0)
37
+
38
+ X_test = test_data.drop(columns=[label])
39
+ X_test = feature_generator.transform(X_test)
40
+
41
+ y_pred = model.predict(X_test)
42
+ assert isinstance(y_pred, np.ndarray), f"Expected np.ndarray as model.predict(X_test) output. Got: {y_pred.__class__}"
43
+
44
+ y_pred_proba = model.predict_proba(X_test)
45
+ assert isinstance(y_pred_proba, np.ndarray), f"Expected np.ndarray as model.predict_proba(X_test) output. Got: {y_pred.__class__}"
46
+ model.get_info()
47
+
48
+ if check_predict_children:
49
+ assert isinstance(model, BaggedEnsembleModel)
50
+ y_pred_children = model.predict_children(X_test)
51
+ assert len(y_pred_children) == model.n_children
52
+ if model.can_predict_proba:
53
+ y_pred_proba_children = model.predict_proba_children(X_test)
54
+ assert len(y_pred_proba_children) == model.n_children
55
+ y_pred_proba_from_children = np.mean(y_pred_proba_children, axis=0)
56
+ assert np.isclose(y_pred_proba_from_children, y_pred_proba).all()
57
+
58
+ for y_pred_proba_child, y_pred_child in zip(y_pred_proba_children, y_pred_children):
59
+ y_pred_child_from_proba = model.predict_from_proba(y_pred_proba=y_pred_proba_child)
60
+ assert np.isclose(y_pred_child_from_proba, y_pred_child).all()
61
+
62
+ return model
63
+
64
+ @staticmethod
65
+ def fit_dataset(
66
+ train_data: pd.DataFrame,
67
+ model: AbstractModel,
68
+ label: str,
69
+ fit_args: dict,
70
+ sample_size: int = None,
71
+ ) -> Tuple[AbstractModel, LabelCleaner, AbstractFeatureGenerator]:
72
+ if sample_size is not None and sample_size < len(train_data):
73
+ train_data = train_data.sample(n=sample_size, random_state=0)
74
+ X = train_data.drop(columns=[label])
75
+ y = train_data[label]
76
+
77
+ problem_type = infer_problem_type(y)
78
+ label_cleaner = LabelCleaner.construct(problem_type=problem_type, y=y)
79
+ y = label_cleaner.transform(y)
80
+ feature_generator = AutoMLPipelineFeatureGenerator()
81
+ X = feature_generator.fit_transform(X, y)
82
+
83
+ X, X_val, y, y_val = generate_train_test_split(X, y, problem_type=problem_type, test_size=0.2, random_state=0)
84
+
85
+ model.fit(X=X, y=y, X_val=X_val, y_val=y_val, **fit_args)
86
+ return model, label_cleaner, feature_generator
@@ -1,4 +1,4 @@
1
1
  """This is the autogluon version file."""
2
2
 
3
- __version__ = "1.2.1b20250304"
3
+ __version__ = "1.2.1b20250306"
4
4
  __lite__ = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: autogluon.tabular
3
- Version: 1.2.1b20250304
3
+ Version: 1.2.1b20250306
4
4
  Summary: Fast and Accurate ML in 3 Lines of Code
5
5
  Home-page: https://github.com/autogluon/autogluon
6
6
  Author: AutoGluon Community
@@ -41,19 +41,19 @@ Requires-Dist: scipy<1.16,>=1.5.4
41
41
  Requires-Dist: pandas<2.3.0,>=2.0.0
42
42
  Requires-Dist: scikit-learn<1.5.3,>=1.4.0
43
43
  Requires-Dist: networkx<4,>=3.0
44
- Requires-Dist: autogluon.core==1.2.1b20250304
45
- Requires-Dist: autogluon.features==1.2.1b20250304
44
+ Requires-Dist: autogluon.core==1.2.1b20250306
45
+ Requires-Dist: autogluon.features==1.2.1b20250306
46
46
  Provides-Extra: all
47
- Requires-Dist: xgboost<2.2,>=1.6; extra == "all"
47
+ Requires-Dist: spacy<3.8; extra == "all"
48
48
  Requires-Dist: catboost<1.3,>=1.2; extra == "all"
49
- Requires-Dist: lightgbm<4.6,>=4.0; extra == "all"
49
+ Requires-Dist: torch<2.6,>=2.2; extra == "all"
50
50
  Requires-Dist: fastai<2.8,>=2.3.1; extra == "all"
51
51
  Requires-Dist: huggingface-hub[torch]; extra == "all"
52
- Requires-Dist: numpy<2.0.0,>=1.25; extra == "all"
53
- Requires-Dist: torch<2.6,>=2.2; extra == "all"
54
- Requires-Dist: autogluon.core[all]==1.2.1b20250304; extra == "all"
52
+ Requires-Dist: lightgbm<4.6,>=4.0; extra == "all"
53
+ Requires-Dist: autogluon.core[all]==1.2.1b20250306; extra == "all"
55
54
  Requires-Dist: einops<0.9,>=0.7; extra == "all"
56
- Requires-Dist: spacy<3.8; extra == "all"
55
+ Requires-Dist: numpy<2.0.0,>=1.25; extra == "all"
56
+ Requires-Dist: xgboost<2.2,>=2.0; extra == "all"
57
57
  Provides-Extra: catboost
58
58
  Requires-Dist: numpy<2.0.0,>=1.25; extra == "catboost"
59
59
  Requires-Dist: catboost<1.3,>=1.2; extra == "catboost"
@@ -66,7 +66,7 @@ Requires-Dist: imodels<1.4.0,>=1.3.10; extra == "imodels"
66
66
  Provides-Extra: lightgbm
67
67
  Requires-Dist: lightgbm<4.6,>=4.0; extra == "lightgbm"
68
68
  Provides-Extra: ray
69
- Requires-Dist: autogluon.core[all]==1.2.1b20250304; extra == "ray"
69
+ Requires-Dist: autogluon.core[all]==1.2.1b20250306; extra == "ray"
70
70
  Provides-Extra: skex
71
71
  Requires-Dist: scikit-learn-intelex<2025.1,>=2024.0; extra == "skex"
72
72
  Provides-Extra: skl2onnx
@@ -96,7 +96,7 @@ Requires-Dist: vowpalwabbit<9.10,>=9; (python_version < "3.11" and sys_platform
96
96
  Provides-Extra: vowpalwabbit
97
97
  Requires-Dist: vowpalwabbit<9.10,>=9; (python_version < "3.11" and sys_platform != "darwin") and extra == "vowpalwabbit"
98
98
  Provides-Extra: xgboost
99
- Requires-Dist: xgboost<2.2,>=1.6; extra == "xgboost"
99
+ Requires-Dist: xgboost<2.2,>=2.0; extra == "xgboost"
100
100
 
101
101
 
102
102
 
@@ -1,6 +1,6 @@
1
- autogluon.tabular-1.2.1b20250304-py3.9-nspkg.pth,sha256=cQGwpuGPqg1GXscIwt-7PmME1OnSpD-7ixkikJ31WAY,554
1
+ autogluon.tabular-1.2.1b20250306-py3.9-nspkg.pth,sha256=cQGwpuGPqg1GXscIwt-7PmME1OnSpD-7ixkikJ31WAY,554
2
2
  autogluon/tabular/__init__.py,sha256=2OXpJCvENRHubBTYNIPpHX93WWuFZzsJBtTZbNVHVas,400
3
- autogluon/tabular/version.py,sha256=p0UlMkkxgxdnhofvyqKPl_WnTfvNk3krUjeDbJ0df5c,91
3
+ autogluon/tabular/version.py,sha256=vpLPQw8Tz1FiEFDl7STt_ZrtxXTVYzhhywUGcg_8Fec,91
4
4
  autogluon/tabular/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  autogluon/tabular/configs/config_helper.py,sha256=Pb2aW9Z9w77pYKPRVZ3nBzHY3KJaiEJSJ747zZcJIVk,21132
6
6
  autogluon/tabular/configs/feature_generator_presets.py,sha256=EV5Ym8VW15q92MwOUpTi7wZFS2QooM51fLg3RdUsn-M,1223
@@ -21,11 +21,11 @@ autogluon/tabular/models/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
21
21
  autogluon/tabular/models/_utils/rapids_utils.py,sha256=gbej9Hjn4alCWZuGN9sOLXMMAyWbgHPThTsp2feS39o,1038
22
22
  autogluon/tabular/models/_utils/torch_utils.py,sha256=dxs_KMMAOmNkRNjYf_hrzqaHIfkqn1xoKRKqCFbQ1Rk,537
23
23
  autogluon/tabular/models/automm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- autogluon/tabular/models/automm/automm_model.py,sha256=_FPkXiHjowuc_KTKVkrzstaj1pecPDxIAZfw0LVjbJ0,11220
25
- autogluon/tabular/models/automm/ft_transformer.py,sha256=ryaMWA4tPmx_8_qdqOyzbIW6f5cBbLSwdtiHf9kfs80,3851
24
+ autogluon/tabular/models/automm/automm_model.py,sha256=GvrMBC8Z-zobalmSzX1iDHTYMmQ4Jp5hINJa_fSm-j8,11322
25
+ autogluon/tabular/models/automm/ft_transformer.py,sha256=yZ9-TTA4GbtutHhz0Djkrl-rIFNxc7A2LBOFOXYOxVY,3886
26
26
  autogluon/tabular/models/catboost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  autogluon/tabular/models/catboost/callbacks.py,sha256=l8x17n_w7oEFs-iDECSdBKZ89yW5g1z-zvj4XLgQPkw,7098
28
- autogluon/tabular/models/catboost/catboost_model.py,sha256=UmM7vnDAeQnIXRZ2MXYMP0mwB3Vw_oNhUGmRrxBJ5sw,17380
28
+ autogluon/tabular/models/catboost/catboost_model.py,sha256=ApltUyLY0BUuS-Rb8z2_OgkAniXrm3Zlpd9FDZkRMjM,17416
29
29
  autogluon/tabular/models/catboost/catboost_softclass_utils.py,sha256=UiW0SUb3hFueW5qYtQn6Sbk7Wg7BWN4jqKWeFtbMvgU,3919
30
30
  autogluon/tabular/models/catboost/catboost_utils.py,sha256=YSc94V4DjrwbmkeUM8306zV7z21oq-K-qGCOj0UE_wg,3167
31
31
  autogluon/tabular/models/catboost/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -41,16 +41,16 @@ autogluon/tabular/models/fastainn/hyperparameters/__init__.py,sha256=47DEQpj8HBS
41
41
  autogluon/tabular/models/fastainn/hyperparameters/parameters.py,sha256=DkQwAZZ7CuODKoljr-yrkx-uFxBSPRxkKuvPdwO-UhQ,2069
42
42
  autogluon/tabular/models/fastainn/hyperparameters/searchspaces.py,sha256=5qdknZDrHtdPdrhSqjamYQrCxvupXvlN3bVGEPgs48E,1660
43
43
  autogluon/tabular/models/fasttext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- autogluon/tabular/models/fasttext/fasttext_model.py,sha256=0_Dbjz0_rzrRtBKVALlGZ8khnqeO5hPsvmZHi_ktv78,7090
44
+ autogluon/tabular/models/fasttext/fasttext_model.py,sha256=Tiwe9qxWlJ7Z_HGsLApPP4bTyvUgJbbYNXk7ni7CP1o,7203
45
45
  autogluon/tabular/models/fasttext/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  autogluon/tabular/models/fasttext/hyperparameters/parameters.py,sha256=DbkLlHlxRh1uGWJ_sUYNrweSJj4yjlOBH_H2COyaWL8,1234
47
47
  autogluon/tabular/models/image_prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- autogluon/tabular/models/image_prediction/image_predictor.py,sha256=2KBxnFzw-wAIjKYpJkmwKfsB_laUpWbY5HOxyDL6uqQ,5454
48
+ autogluon/tabular/models/image_prediction/image_predictor.py,sha256=ZDW9vMEZtI5KOE2MDxGB9XDytpUum0DsjrfWEb4PE1Y,5620
49
49
  autogluon/tabular/models/imodels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- autogluon/tabular/models/imodels/imodels_models.py,sha256=JE-VFeFc8Ot2T1IUtlNMP4_T-9F1I1NzQt4zA5aZ-to,4712
50
+ autogluon/tabular/models/imodels/imodels_models.py,sha256=89uQwbRAtqcUvPwYsKnER8SUMIbwkGZUd9spoG_mP10,4878
51
51
  autogluon/tabular/models/knn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  autogluon/tabular/models/knn/_knn_loo_variants.py,sha256=-n2znYS7OBA0bZvtei6JZiEMRWp4GX-Qp64uheaHyhQ,4562
53
- autogluon/tabular/models/knn/knn_model.py,sha256=SdNIJW4fSV6Ae7JG5CwIDkUOmLuqibSC-FT2PXMtVC0,13941
53
+ autogluon/tabular/models/knn/knn_model.py,sha256=qZwBnDVPT2Fd5aDPZqcwugszeUYREm5nZ_-bHVVE3_s,13977
54
54
  autogluon/tabular/models/knn/knn_rapids_model.py,sha256=0FFApNZFH8nyrDqlBSUV7jO-2fLe0-h_UHp1GsyQJ8E,1550
55
55
  autogluon/tabular/models/knn/knn_utils.py,sha256=XU1cxVXp1BAoQnja2_KmSIn9_q9gZkjAya7-9b0uStk,7455
56
56
  autogluon/tabular/models/lgb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -61,14 +61,14 @@ autogluon/tabular/models/lgb/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TI
61
61
  autogluon/tabular/models/lgb/hyperparameters/parameters.py,sha256=LLEQ-Ns3HElWBsFJx3ogRV7L6qw_nXlcl7EyO0C0fVQ,1336
62
62
  autogluon/tabular/models/lgb/hyperparameters/searchspaces.py,sha256=tvNNR7niWz_B-PndYQXb6vVNABxSfBYRHj6ZVQJ1x2E,1930
63
63
  autogluon/tabular/models/lr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- autogluon/tabular/models/lr/lr_model.py,sha256=NqkK5eH-9HLXW-uuEcPeQWteq6H4F6WzvAwaXKTWZOQ,15563
64
+ autogluon/tabular/models/lr/lr_model.py,sha256=wTrrTWVwmlAyx4RAxhfXHbkvZTAVIvAiTadpEChGEzc,15599
65
65
  autogluon/tabular/models/lr/lr_preprocessing_utils.py,sha256=zkmVZtv05BQPDasVBz1J8LmXEfLgoggsv57s6cXuTMQ,1094
66
66
  autogluon/tabular/models/lr/lr_rapids_model.py,sha256=a07JvjWemrL0L08moA3K4lnYieukRlAdb2Z_uWA44k8,2127
67
67
  autogluon/tabular/models/lr/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
68
  autogluon/tabular/models/lr/hyperparameters/parameters.py,sha256=Hr5YC13zjbt3CfCbzGj8iXUIuDn-Q7FvDT2uSuiSVlM,1414
69
69
  autogluon/tabular/models/lr/hyperparameters/searchspaces.py,sha256=Igywc-B6qJ9EBLdasrDhW-Ot5FGirIzbXLwv5HRe5Xo,276
70
70
  autogluon/tabular/models/rf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- autogluon/tabular/models/rf/rf_model.py,sha256=V_lnpaVArQkt3QuzyUDGzKaGHax5srRw_sKZ2_G-RAE,21497
71
+ autogluon/tabular/models/rf/rf_model.py,sha256=MwhTUk9PknLgZWyT5bz_7DtjEW8ADU5wiBvlOjzVLkA,21529
72
72
  autogluon/tabular/models/rf/rf_quantile.py,sha256=2S8FE8po9lMnZaeKuVkzOUFOcdil46ZbFqm49OuvNZY,36460
73
73
  autogluon/tabular/models/rf/rf_rapids_model.py,sha256=3s-8M11dzCl_2Lu5iB3H8YjHLgyP_SElrm_4w_HfmqY,2028
74
74
  autogluon/tabular/models/rf/compilers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -80,15 +80,15 @@ autogluon/tabular/models/tab_transformer/pretexts.py,sha256=UEoDq_8hLKbY7EbE5IyL
80
80
  autogluon/tabular/models/tab_transformer/tab_model_base.py,sha256=4rmY1IrwoFuJejy-9gOoYSz-ar3DvZY8uXyDUBKk7Iw,3615
81
81
  autogluon/tabular/models/tab_transformer/tab_transformer.py,sha256=1c1oTJfSsGxQjzZJVN8doqFmYV-Wwwbqcu7RcW77kJk,6991
82
82
  autogluon/tabular/models/tab_transformer/tab_transformer_encoder.py,sha256=v2G1S_MSESzKqtvSfxS5uEse2CWtOn_K2E-uIwuE6zI,24701
83
- autogluon/tabular/models/tab_transformer/tab_transformer_model.py,sha256=E_qPm2AMZY3I7EdKqPD5APKDbat5S-A7ohKaXAO-29w,22752
83
+ autogluon/tabular/models/tab_transformer/tab_transformer_model.py,sha256=5J3xeIWEoSMljJ-ghMeRmHv0sFqY3ASJ2aN7ivOIqww,22917
84
84
  autogluon/tabular/models/tab_transformer/utils.py,sha256=rrNk0X6Y0vzt7ivylRmTf0zjDx1DIF-5_ibf6B9Taz8,4554
85
85
  autogluon/tabular/models/tab_transformer/hyperparameters/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
86
86
  autogluon/tabular/models/tab_transformer/hyperparameters/parameters.py,sha256=-vJRG8PVj5FgQnF9FNJHMvoIzzyazGE4XLRyQKL5VT8,3854
87
87
  autogluon/tabular/models/tab_transformer/hyperparameters/searchspaces.py,sha256=poiOFwOVIf1ONcPIjOqsA31YbqBgWxy0DlVFpVwKNHM,650
88
88
  autogluon/tabular/models/tabpfn/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
89
- autogluon/tabular/models/tabpfn/tabpfn_model.py,sha256=xdxBq9Bg4e8Cg6Y7jfUEwWr60mM7OvSOOLN0usrUn0I,6917
89
+ autogluon/tabular/models/tabpfn/tabpfn_model.py,sha256=PEYMuIh5TFLIDy3hcjfz1DcvDu77rbwRq0pKWyuUR04,6787
90
90
  autogluon/tabular/models/tabpfnmix/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- autogluon/tabular/models/tabpfnmix/tabpfnmix_model.py,sha256=mc3mMRwytBYaxXjnnrlAQyS2dowT9sRd4xfvEkJfCW8,16765
91
+ autogluon/tabular/models/tabpfnmix/tabpfnmix_model.py,sha256=Bo-JMnNgI0fYXXTHy3zLAE1OHZv9ikgH4bFBaVSa79g,16174
92
92
  autogluon/tabular/models/tabpfnmix/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  autogluon/tabular/models/tabpfnmix/_internal/tabpfnmix_classifier.py,sha256=U3DAhtSLpHUu-22GgR3QCZJnpRYpOW95XoTV7tE9J5Y,3425
94
94
  autogluon/tabular/models/tabpfnmix/_internal/tabpfnmix_regressor.py,sha256=J6JvrK6L6y3s-Ah6sHQdjSK0mwAMP-Wy3RRBwzB0AoA,3196
@@ -121,7 +121,7 @@ autogluon/tabular/models/tabular_nn/hyperparameters/__init__.py,sha256=47DEQpj8H
121
121
  autogluon/tabular/models/tabular_nn/hyperparameters/parameters.py,sha256=Z3t_U1f7jfolPey6lzqgJyoFbVgoncFNSvCKXSuLxeU,6465
122
122
  autogluon/tabular/models/tabular_nn/hyperparameters/searchspaces.py,sha256=pT9cJ3MaWPnaQwAf47Yz6f0-L9qDBknahERbggAp52U,2810
123
123
  autogluon/tabular/models/tabular_nn/torch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
- autogluon/tabular/models/tabular_nn/torch/tabular_nn_torch.py,sha256=mQt3zso10kSsbka1bJDeTake9yGpcooZR6SRp6J9r4w,42555
124
+ autogluon/tabular/models/tabular_nn/torch/tabular_nn_torch.py,sha256=tDxWg4SLUjBFaNcdmbEYfC8nPWCYtCQMTX_XG00x13s,42587
125
125
  autogluon/tabular/models/tabular_nn/torch/tabular_torch_dataset.py,sha256=RdnQGZSrvY1iuJB4JTANniH3Dorw-DP0Em_JK3_h7RM,13497
126
126
  autogluon/tabular/models/tabular_nn/torch/torch_network_modules.py,sha256=Qc3PwXTD8A7PgXi6EGuaBCrN3jsFAXDLCW7i6tE5wYI,11338
127
127
  autogluon/tabular/models/tabular_nn/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -129,25 +129,29 @@ autogluon/tabular/models/tabular_nn/utils/categorical_encoders.py,sha256=uLQaHku
129
129
  autogluon/tabular/models/tabular_nn/utils/data_preprocessor.py,sha256=ypXqtxdt1qH6la1hcq-BJ0dzQBNtgKY-BjXmIWxPjCg,5237
130
130
  autogluon/tabular/models/tabular_nn/utils/nn_architecture_utils.py,sha256=tttzR5EtYcFa6sIrUG9wyegdYmYE5DPK_CiLF1-L3c8,2875
131
131
  autogluon/tabular/models/text_prediction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
- autogluon/tabular/models/text_prediction/text_prediction_v1_model.py,sha256=XCKKb9N3mKXLtbMHMjQ3y5HwKQFF25enA287WHv-ebc,924
132
+ autogluon/tabular/models/text_prediction/text_prediction_v1_model.py,sha256=PBN7F98qgEAO6U76rV_hxZfAmKr_XpVKjElOdBvfX8c,1090
133
133
  autogluon/tabular/models/vowpalwabbit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
- autogluon/tabular/models/vowpalwabbit/vowpalwabbit_model.py,sha256=hToCVe0KP3PIkOl3-jEh0R1m7_9xwGXMY8RRH2bzXnM,11699
134
+ autogluon/tabular/models/vowpalwabbit/vowpalwabbit_model.py,sha256=h_j33hnsuxDM0mfExpmejO2pu5lIpTm1uIEirS2OXXI,11802
135
135
  autogluon/tabular/models/vowpalwabbit/vowpalwabbit_utils.py,sha256=jZ0STjvqwKw8jJDeoo5yAXTvgwFvY8Fsz6OqSif_JGI,3677
136
136
  autogluon/tabular/models/xgboost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  autogluon/tabular/models/xgboost/callbacks.py,sha256=uynimXya07XQMBkDvec-7mXK6OfMGP6M8MiVYu8OVRI,7008
138
- autogluon/tabular/models/xgboost/xgboost_model.py,sha256=8LovgYAW61zLDcNCqRzzPD2OKx_cdhsXKbnEMa29AFk,14152
138
+ autogluon/tabular/models/xgboost/xgboost_model.py,sha256=tTSnTzEot2JB0qEvhki4h3RdaLjEpfMs-jWKsxlJWO4,14304
139
139
  autogluon/tabular/models/xgboost/xgboost_utils.py,sha256=FVqZ8h4JAe_pifSvNx83cLZHwsuzTXylrrcan07AoNo,5757
140
140
  autogluon/tabular/models/xgboost/hyperparameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
141
  autogluon/tabular/models/xgboost/hyperparameters/parameters.py,sha256=ay6bVVpiPzftbtz6TTS76w7j4vjDjzHFpuf2Bjf6Zu4,1673
142
142
  autogluon/tabular/models/xgboost/hyperparameters/searchspaces.py,sha256=lFwI34pcRtlVQkxmsdZsSaPry8t_WSMBhig4soMK54k,2140
143
143
  autogluon/tabular/models/xt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
- autogluon/tabular/models/xt/xt_model.py,sha256=vXy1HQ06fG1YjPTf0-THBKgcA9Edw1XhmBC4aOB3qVA,967
144
+ autogluon/tabular/models/xt/xt_model.py,sha256=qOHJ5h1lHI7uYJfbl0BWm-29R3MNp2WeZB9ptcq5Xis,1003
145
145
  autogluon/tabular/predictor/__init__.py,sha256=zCMgjxQlWpDWnr1l1xjBCiK3rWC3N3RoD8UXBnazT74,107
146
146
  autogluon/tabular/predictor/interpretable_predictor.py,sha256=5UeKgnMFsfY65tiO3kxfHBPr03lyswLrgdtjPhI0Y7Q,6934
147
147
  autogluon/tabular/predictor/predictor.py,sha256=jOkpypHAPrL2nsI4iypVkZV90TpMORK-G_Ixr3Kw3XQ,357182
148
148
  autogluon/tabular/register/__init__.py,sha256=7CLOTWIUho0wi4eAwhYJ5Y0PfvNCWKnRwlw3bwYoTNE,93
149
149
  autogluon/tabular/register/_ag_model_register.py,sha256=tMr-QgxgCE49tdThdSFOZaJg2D9ckDh6fiR5K4cRtvk,1564
150
150
  autogluon/tabular/register/_model_register.py,sha256=jqSg0d89dXAAcp-OT4II90ce994ByKMMzAYmpkyaRbI,6824
151
+ autogluon/tabular/testing/__init__.py,sha256=XrEGLmMdmRT6QHNR13M9wna57LO4O3Q4tt27Ca8omAc,79
152
+ autogluon/tabular/testing/fit_helper.py,sha256=gVHTdAsp_lSZ_qbwjXM7aA5fI32zHj3_zXwEXC9C_ds,19586
153
+ autogluon/tabular/testing/generate_datasets.py,sha256=UXPNfviUNZqGcx4mTYIloJxRED6DRMxAgHqbOvjEUCs,3603
154
+ autogluon/tabular/testing/model_fit_helper.py,sha256=ZjWpw2nyeFnsrccmkfQtx3qbA8HJx282XX2rwdS-LIs,3808
151
155
  autogluon/tabular/trainer/__init__.py,sha256=PW_PGL-tWoQzx3ES2S53bQEZOtsRWTYiM9QdOqsk0dI,38
152
156
  autogluon/tabular/trainer/abstract_trainer.py,sha256=lqOjVTLUaZNue4B7u47PYXTXsBEFbSJ4SyruNeChFCk,231925
153
157
  autogluon/tabular/trainer/auto_trainer.py,sha256=FyRWM8iUJuDvw_aqV5EV_xdh_pb-nHzAvG1sbEhvs0g,8680
@@ -156,11 +160,11 @@ autogluon/tabular/trainer/model_presets/presets.py,sha256=bTPGPyz07a7GG6327yO6ry
156
160
  autogluon/tabular/trainer/model_presets/presets_distill.py,sha256=MnFC2GJc6RmDBNAGbsO2XMfo3PjR8cUrZoilWW8gTYQ,3295
157
161
  autogluon/tabular/tuning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
162
  autogluon/tabular/tuning/feature_pruner.py,sha256=9iNku8gVbYEkjuKlyITPJDicsNkoraaQOlINQq9iZlQ,6877
159
- autogluon.tabular-1.2.1b20250304.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
160
- autogluon.tabular-1.2.1b20250304.dist-info/METADATA,sha256=QOFdeqmbPPdOMzPCoDwOpncWQxPfQoekkW75gNBTSUY,14386
161
- autogluon.tabular-1.2.1b20250304.dist-info/NOTICE,sha256=7nPQuj8Kp-uXsU0S5so3-2dNU5EctS5hDXvvzzehd7E,114
162
- autogluon.tabular-1.2.1b20250304.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
163
- autogluon.tabular-1.2.1b20250304.dist-info/namespace_packages.txt,sha256=giERA4R78OkJf2ijn5slgjURlhRPzfLr7waIcGkzYAo,10
164
- autogluon.tabular-1.2.1b20250304.dist-info/top_level.txt,sha256=giERA4R78OkJf2ijn5slgjURlhRPzfLr7waIcGkzYAo,10
165
- autogluon.tabular-1.2.1b20250304.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
166
- autogluon.tabular-1.2.1b20250304.dist-info/RECORD,,
163
+ autogluon.tabular-1.2.1b20250306.dist-info/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
164
+ autogluon.tabular-1.2.1b20250306.dist-info/METADATA,sha256=YgXdgjQUF_qTbiUXze0zDW5m1-lQO6pPMBOhZPp8Jqs,14386
165
+ autogluon.tabular-1.2.1b20250306.dist-info/NOTICE,sha256=7nPQuj8Kp-uXsU0S5so3-2dNU5EctS5hDXvvzzehd7E,114
166
+ autogluon.tabular-1.2.1b20250306.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
167
+ autogluon.tabular-1.2.1b20250306.dist-info/namespace_packages.txt,sha256=giERA4R78OkJf2ijn5slgjURlhRPzfLr7waIcGkzYAo,10
168
+ autogluon.tabular-1.2.1b20250306.dist-info/top_level.txt,sha256=giERA4R78OkJf2ijn5slgjURlhRPzfLr7waIcGkzYAo,10
169
+ autogluon.tabular-1.2.1b20250306.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
170
+ autogluon.tabular-1.2.1b20250306.dist-info/RECORD,,