ins-pricing 0.4.4__py3-none-any.whl → 0.5.0__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 (96) hide show
  1. ins_pricing/README.md +74 -56
  2. ins_pricing/__init__.py +142 -90
  3. ins_pricing/cli/BayesOpt_entry.py +52 -50
  4. ins_pricing/cli/BayesOpt_incremental.py +832 -898
  5. ins_pricing/cli/Explain_Run.py +31 -23
  6. ins_pricing/cli/Explain_entry.py +532 -579
  7. ins_pricing/cli/Pricing_Run.py +31 -23
  8. ins_pricing/cli/bayesopt_entry_runner.py +1440 -1438
  9. ins_pricing/cli/utils/cli_common.py +256 -256
  10. ins_pricing/cli/utils/cli_config.py +375 -375
  11. ins_pricing/cli/utils/import_resolver.py +382 -365
  12. ins_pricing/cli/utils/notebook_utils.py +340 -340
  13. ins_pricing/cli/watchdog_run.py +209 -201
  14. ins_pricing/frontend/README.md +573 -419
  15. ins_pricing/frontend/__init__.py +10 -10
  16. ins_pricing/frontend/config_builder.py +1 -0
  17. ins_pricing/frontend/example_workflows.py +1 -1
  18. ins_pricing/governance/__init__.py +20 -20
  19. ins_pricing/governance/release.py +159 -159
  20. ins_pricing/modelling/README.md +67 -0
  21. ins_pricing/modelling/__init__.py +147 -92
  22. ins_pricing/modelling/bayesopt/README.md +59 -0
  23. ins_pricing/modelling/{core/bayesopt → bayesopt}/__init__.py +64 -102
  24. ins_pricing/modelling/{core/bayesopt → bayesopt}/config_preprocess.py +562 -550
  25. ins_pricing/modelling/{core/bayesopt → bayesopt}/core.py +965 -962
  26. ins_pricing/modelling/{core/bayesopt → bayesopt}/model_explain_mixin.py +296 -296
  27. ins_pricing/modelling/{core/bayesopt → bayesopt}/model_plotting_mixin.py +482 -548
  28. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/__init__.py +27 -27
  29. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_ft_trainer.py +915 -913
  30. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_gnn.py +788 -785
  31. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_resn.py +448 -446
  32. ins_pricing/modelling/bayesopt/trainers/__init__.py +19 -0
  33. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_base.py +1308 -1308
  34. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_ft.py +3 -3
  35. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_glm.py +197 -198
  36. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_gnn.py +344 -344
  37. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_resn.py +283 -283
  38. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_xgb.py +346 -347
  39. ins_pricing/modelling/bayesopt/utils/__init__.py +67 -0
  40. ins_pricing/modelling/bayesopt/utils/constants.py +21 -0
  41. ins_pricing/modelling/bayesopt/utils/io_utils.py +7 -0
  42. ins_pricing/modelling/bayesopt/utils/losses.py +27 -0
  43. ins_pricing/modelling/bayesopt/utils/metrics_and_devices.py +17 -0
  44. ins_pricing/modelling/{core/bayesopt → bayesopt}/utils/torch_trainer_mixin.py +623 -623
  45. ins_pricing/modelling/{core/evaluation.py → evaluation.py} +113 -104
  46. ins_pricing/modelling/explain/__init__.py +55 -55
  47. ins_pricing/modelling/explain/metrics.py +27 -174
  48. ins_pricing/modelling/explain/permutation.py +237 -237
  49. ins_pricing/modelling/plotting/__init__.py +40 -36
  50. ins_pricing/modelling/plotting/compat.py +228 -0
  51. ins_pricing/modelling/plotting/curves.py +572 -572
  52. ins_pricing/modelling/plotting/diagnostics.py +163 -163
  53. ins_pricing/modelling/plotting/geo.py +362 -362
  54. ins_pricing/modelling/plotting/importance.py +121 -121
  55. ins_pricing/pricing/__init__.py +27 -27
  56. ins_pricing/production/__init__.py +35 -25
  57. ins_pricing/production/{predict.py → inference.py} +140 -57
  58. ins_pricing/production/monitoring.py +8 -21
  59. ins_pricing/reporting/__init__.py +11 -11
  60. ins_pricing/setup.py +1 -1
  61. ins_pricing/tests/production/test_inference.py +90 -0
  62. ins_pricing/utils/__init__.py +116 -83
  63. ins_pricing/utils/device.py +255 -255
  64. ins_pricing/utils/features.py +53 -0
  65. ins_pricing/utils/io.py +72 -0
  66. ins_pricing/{modelling/core/bayesopt/utils → utils}/losses.py +125 -129
  67. ins_pricing/utils/metrics.py +158 -24
  68. ins_pricing/utils/numerics.py +76 -0
  69. ins_pricing/utils/paths.py +9 -1
  70. {ins_pricing-0.4.4.dist-info → ins_pricing-0.5.0.dist-info}/METADATA +55 -35
  71. ins_pricing-0.5.0.dist-info/RECORD +131 -0
  72. ins_pricing/CHANGELOG.md +0 -272
  73. ins_pricing/RELEASE_NOTES_0.2.8.md +0 -344
  74. ins_pricing/docs/LOSS_FUNCTIONS.md +0 -78
  75. ins_pricing/docs/modelling/BayesOpt_USAGE.md +0 -945
  76. ins_pricing/docs/modelling/README.md +0 -34
  77. ins_pricing/frontend/QUICKSTART.md +0 -152
  78. ins_pricing/modelling/core/BayesOpt.py +0 -146
  79. ins_pricing/modelling/core/__init__.py +0 -1
  80. ins_pricing/modelling/core/bayesopt/PHASE2_REFACTORING_SUMMARY.md +0 -449
  81. ins_pricing/modelling/core/bayesopt/PHASE3_REFACTORING_SUMMARY.md +0 -406
  82. ins_pricing/modelling/core/bayesopt/REFACTORING_SUMMARY.md +0 -247
  83. ins_pricing/modelling/core/bayesopt/trainers/__init__.py +0 -19
  84. ins_pricing/modelling/core/bayesopt/utils/__init__.py +0 -86
  85. ins_pricing/modelling/core/bayesopt/utils/constants.py +0 -183
  86. ins_pricing/modelling/core/bayesopt/utils/io_utils.py +0 -126
  87. ins_pricing/modelling/core/bayesopt/utils/metrics_and_devices.py +0 -555
  88. ins_pricing/modelling/core/bayesopt/utils.py +0 -105
  89. ins_pricing/modelling/core/bayesopt/utils_backup.py +0 -1503
  90. ins_pricing/tests/production/test_predict.py +0 -233
  91. ins_pricing-0.4.4.dist-info/RECORD +0 -137
  92. /ins_pricing/modelling/{core/bayesopt → bayesopt}/config_components.py +0 -0
  93. /ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_ft_components.py +0 -0
  94. /ins_pricing/modelling/{core/bayesopt → bayesopt}/utils/distributed_utils.py +0 -0
  95. {ins_pricing-0.4.4.dist-info → ins_pricing-0.5.0.dist-info}/WHEEL +0 -0
  96. {ins_pricing-0.4.4.dist-info → ins_pricing-0.5.0.dist-info}/top_level.txt +0 -0
@@ -1,95 +1,150 @@
1
- from __future__ import annotations
2
-
3
- from importlib import import_module
4
- from pathlib import Path
5
- import sys
6
- import types
7
-
8
- # Keep imports lazy to avoid hard dependencies when only using lightweight modules.
9
-
10
- __all__ = [
11
- "BayesOptConfig",
12
- "BayesOptModel",
13
- "IOUtils",
14
- "TrainingUtils",
15
- "free_cuda",
16
- "bayesopt",
17
- "plotting",
18
- "explain",
19
- ]
20
-
21
- _LAZY_ATTRS = {
22
- "bayesopt": "ins_pricing.modelling.core.bayesopt",
23
- "plotting": "ins_pricing.modelling.plotting",
24
- "explain": "ins_pricing.modelling.explain",
25
- "BayesOptConfig": "ins_pricing.modelling.core.bayesopt.core",
26
- "BayesOptModel": "ins_pricing.modelling.core.bayesopt.core",
27
- "IOUtils": "ins_pricing.modelling.core.bayesopt.utils",
28
- "TrainingUtils": "ins_pricing.modelling.core.bayesopt.utils",
29
- "free_cuda": "ins_pricing.modelling.core.bayesopt.utils",
30
- }
31
-
1
+ from __future__ import annotations
2
+
3
+ from importlib import import_module
4
+ from pathlib import Path
5
+ import sys
6
+ import types
7
+
8
+ # Keep imports lazy to avoid hard dependencies when only using lightweight modules.
9
+
10
+ __all__ = sorted(
11
+ {
12
+ "BayesOptConfig",
13
+ "BayesOptModel",
14
+ "bayesopt",
15
+ "plotting",
16
+ "explain",
17
+ "evaluation",
18
+ "cli",
19
+ }
20
+ )
21
+
22
+ _LAZY_ATTRS = {
23
+ "bayesopt": "ins_pricing.modelling.bayesopt",
24
+ "plotting": "ins_pricing.modelling.plotting",
25
+ "explain": "ins_pricing.modelling.explain",
26
+ "BayesOptConfig": "ins_pricing.modelling.bayesopt.core",
27
+ "BayesOptModel": "ins_pricing.modelling.bayesopt.core",
28
+ }
29
+
30
+ _BAYESOPT_EXPORTS = {
31
+ "BayesOptConfig",
32
+ "DatasetPreprocessor",
33
+ "OutputManager",
34
+ "VersionManager",
35
+ "BayesOptModel",
36
+ "FeatureTokenizer",
37
+ "FTTransformerCore",
38
+ "FTTransformerSklearn",
39
+ "GraphNeuralNetSklearn",
40
+ "MaskedTabularDataset",
41
+ "ResBlock",
42
+ "ResNetSequential",
43
+ "ResNetSklearn",
44
+ "ScaledTransformerEncoderLayer",
45
+ "SimpleGraphLayer",
46
+ "SimpleGNN",
47
+ "TabularDataset",
48
+ "FTTrainer",
49
+ "GLMTrainer",
50
+ "GNNTrainer",
51
+ "ResNetTrainer",
52
+ "TrainerBase",
53
+ "XGBTrainer",
54
+ "_xgb_cuda_available",
55
+ }
56
+
57
+ _LEGACY_EXPORTS = {
58
+ "IOUtils": "ins_pricing.utils",
59
+ "DeviceManager": "ins_pricing.utils",
60
+ "GPUMemoryManager": "ins_pricing.utils",
61
+ "MetricFactory": "ins_pricing.utils",
62
+ "EPS": "ins_pricing.utils",
63
+ "set_global_seed": "ins_pricing.utils",
64
+ "compute_batch_size": "ins_pricing.utils",
65
+ "tweedie_loss": "ins_pricing.utils",
66
+ "infer_factor_and_cate_list": "ins_pricing.utils",
67
+ "DistributedUtils": "ins_pricing.modelling.bayesopt.utils",
68
+ "TrainingUtils": "ins_pricing.modelling.bayesopt.utils",
69
+ "free_cuda": "ins_pricing.modelling.bayesopt.utils",
70
+ "TorchTrainerMixin": "ins_pricing.modelling.bayesopt.utils",
71
+ }
72
+
73
+ __all__ = sorted(set(__all__) | set(_BAYESOPT_EXPORTS) | set(_LEGACY_EXPORTS))
74
+
32
75
  _LAZY_SUBMODULES = {
33
- "bayesopt": "ins_pricing.modelling.core.bayesopt",
34
- "BayesOpt": "ins_pricing.modelling.core.BayesOpt",
35
- "evaluation": "ins_pricing.modelling.core.evaluation",
76
+ "bayesopt": "ins_pricing.modelling.bayesopt",
77
+ "evaluation": "ins_pricing.modelling.evaluation",
36
78
  "cli": "ins_pricing.cli",
37
79
  }
38
-
39
- _PACKAGE_PATHS = {
40
- "bayesopt": Path(__file__).resolve().parent / "core" / "bayesopt",
41
- "cli": Path(__file__).resolve().parents[1] / "cli",
42
- }
43
-
44
-
45
- def _lazy_module(name: str, target: str, package_path: Path | None = None) -> types.ModuleType:
46
- proxy = types.ModuleType(name)
47
- if package_path is not None:
48
- proxy.__path__ = [str(package_path)]
49
-
50
- def _load():
51
- module = import_module(target)
52
- sys.modules[name] = module
53
- return module
54
-
55
- def __getattr__(attr: str):
56
- module = _load()
57
- return getattr(module, attr)
58
-
59
- def __dir__() -> list[str]:
60
- module = _load()
61
- return sorted(set(dir(module)))
62
-
63
- proxy.__getattr__ = __getattr__ # type: ignore[attr-defined]
64
- proxy.__dir__ = __dir__ # type: ignore[attr-defined]
65
- return proxy
66
-
67
-
68
- def _install_proxy(alias: str, target: str) -> None:
69
- module_name = f"{__name__}.{alias}"
70
- if module_name in sys.modules:
71
- return
72
- proxy = _lazy_module(module_name, target, _PACKAGE_PATHS.get(alias))
73
- sys.modules[module_name] = proxy
74
- globals()[alias] = proxy
75
-
76
-
77
- for _alias, _target in _LAZY_SUBMODULES.items():
78
- _install_proxy(_alias, _target)
79
-
80
-
81
- def __getattr__(name: str):
82
- target = _LAZY_ATTRS.get(name)
83
- if not target:
84
- raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
85
- module = import_module(target)
86
- if name in {"bayesopt", "plotting", "explain"}:
87
- value = module
88
- else:
89
- value = getattr(module, name)
90
- globals()[name] = value
91
- return value
92
-
93
-
94
- def __dir__() -> list[str]:
95
- return sorted(set(__all__) | set(globals().keys()))
80
+
81
+ _PACKAGE_PATHS = {
82
+ "bayesopt": Path(__file__).resolve().parent / "bayesopt",
83
+ "cli": Path(__file__).resolve().parents[1] / "cli",
84
+ }
85
+
86
+
87
+ def _lazy_module(name: str, target: str, package_path: Path | None = None) -> types.ModuleType:
88
+ proxy = types.ModuleType(name)
89
+ if package_path is not None:
90
+ proxy.__path__ = [str(package_path)]
91
+
92
+ def _load():
93
+ module = import_module(target)
94
+ sys.modules[name] = module
95
+ return module
96
+
97
+ def __getattr__(attr: str):
98
+ module = _load()
99
+ return getattr(module, attr)
100
+
101
+ def __dir__() -> list[str]:
102
+ module = _load()
103
+ return sorted(set(dir(module)))
104
+
105
+ proxy.__getattr__ = __getattr__ # type: ignore[attr-defined]
106
+ proxy.__dir__ = __dir__ # type: ignore[attr-defined]
107
+ return proxy
108
+
109
+
110
+ def _install_proxy(alias: str, target: str) -> None:
111
+ module_name = f"{__name__}.{alias}"
112
+ if module_name in sys.modules:
113
+ return
114
+ proxy = _lazy_module(module_name, target, _PACKAGE_PATHS.get(alias))
115
+ sys.modules[module_name] = proxy
116
+ globals()[alias] = proxy
117
+
118
+
119
+ for _alias, _target in _LAZY_SUBMODULES.items():
120
+ _install_proxy(_alias, _target)
121
+
122
+
123
+ def __getattr__(name: str):
124
+ target = _LAZY_ATTRS.get(name)
125
+ if target:
126
+ module = import_module(target)
127
+ if name in {"bayesopt", "plotting", "explain"}:
128
+ value = module
129
+ else:
130
+ value = getattr(module, name)
131
+ globals()[name] = value
132
+ return value
133
+
134
+ if name in _BAYESOPT_EXPORTS:
135
+ module = import_module("ins_pricing.modelling.bayesopt")
136
+ value = getattr(module, name)
137
+ globals()[name] = value
138
+ return value
139
+
140
+ legacy_module = _LEGACY_EXPORTS.get(name)
141
+ if legacy_module:
142
+ module = import_module(legacy_module)
143
+ value = getattr(module, name)
144
+ globals()[name] = value
145
+ return value
146
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
147
+
148
+
149
+ def __dir__() -> list[str]:
150
+ return sorted(set(__all__) | set(_BAYESOPT_EXPORTS) | set(_LEGACY_EXPORTS) | set(globals().keys()))
@@ -0,0 +1,59 @@
1
+ # BayesOpt
2
+
3
+ BayesOpt is the training/tuning core for GLM, XGBoost, ResNet, FT-Transformer, and GNN workflows.
4
+ It supports JSON-driven CLI runs and a Python API for notebooks/scripts.
5
+
6
+ ## Recommended API (config-based)
7
+
8
+ ```python
9
+ from ins_pricing.modelling.bayesopt import BayesOptConfig
10
+ from ins_pricing.modelling import BayesOptModel
11
+
12
+ config = BayesOptConfig(
13
+ model_nme="my_model",
14
+ resp_nme="target",
15
+ weight_nme="weight",
16
+ factor_nmes=["f1", "f2"],
17
+ cate_list=["f2"],
18
+ task_type="regression",
19
+ epochs=50,
20
+ output_dir="./Results",
21
+ )
22
+
23
+ model = BayesOptModel(train_data, test_data, config=config)
24
+ model.optimize_model("xgb", max_evals=50)
25
+ ```
26
+
27
+ ## Load config from file
28
+
29
+ ```python
30
+ from ins_pricing.modelling.bayesopt import BayesOptConfig
31
+ from ins_pricing.modelling import BayesOptModel
32
+
33
+ config = BayesOptConfig.from_file("config.json")
34
+ model = BayesOptModel(train_data, test_data, config=config)
35
+ ```
36
+
37
+ ## CLI entry
38
+
39
+ ```bash
40
+ python ins_pricing/cli/BayesOpt_entry.py --config-json config_template.json
41
+ ```
42
+
43
+ ## FT roles
44
+
45
+ - `model`: FT is a prediction model (writes `pred_ft`).
46
+ - `embedding`: FT trains with labels but exports embeddings (`pred_<prefix>_*`).
47
+ - `unsupervised_embedding`: FT trains without labels and exports embeddings.
48
+
49
+ ## Output layout
50
+
51
+ `output_dir/` contains:
52
+ - `plot/` plots and diagnostics
53
+ - `Results/` metrics, params, and snapshots
54
+ - `model/` saved models
55
+
56
+ ## Notes
57
+
58
+ - Relative paths in config are resolved from the config file directory.
59
+ - For multi-GPU, use `torchrun` and set `runner.nproc_per_node` in config.
@@ -1,102 +1,64 @@
1
- """BayesOpt subpackage (split from monolithic BayesOpt.py)."""
2
-
3
- from __future__ import annotations
4
-
5
- import torch
6
-
7
- from ins_pricing.utils.torch_compat import disable_torch_dynamo_if_requested
8
-
9
- disable_torch_dynamo_if_requested()
10
-
11
- from .config_preprocess import (
12
- BayesOptConfig,
13
- DatasetPreprocessor,
14
- OutputManager,
15
- VersionManager,
16
- )
17
- from .core import BayesOptModel
18
- from .models import (
19
- FeatureTokenizer,
20
- FTTransformerCore,
21
- FTTransformerSklearn,
22
- GraphNeuralNetSklearn,
23
- MaskedTabularDataset,
24
- ResBlock,
25
- ResNetSequential,
26
- ResNetSklearn,
27
- ScaledTransformerEncoderLayer,
28
- SimpleGraphLayer,
29
- SimpleGNN,
30
- TabularDataset,
31
- )
32
- from .trainers import (
33
- FTTrainer,
34
- GLMTrainer,
35
- GNNTrainer,
36
- ResNetTrainer,
37
- TrainerBase,
38
- XGBTrainer,
39
- _xgb_cuda_available,
40
- )
41
- from .utils import (
42
- EPS,
43
- DistributedUtils,
44
- IOUtils,
45
- PlotUtils,
46
- TorchTrainerMixin,
47
- TrainingUtils,
48
- compute_batch_size,
49
- csv_to_dict,
50
- ensure_parent_dir,
51
- free_cuda,
52
- infer_factor_and_cate_list,
53
- plot_dlift_list,
54
- plot_lift_list,
55
- set_global_seed,
56
- split_data,
57
- tweedie_loss,
58
- )
59
-
60
- __all__ = [
61
- "BayesOptConfig",
62
- "DatasetPreprocessor",
63
- "OutputManager",
64
- "VersionManager",
65
- "BayesOptModel",
66
- "FeatureTokenizer",
67
- "FTTransformerCore",
68
- "FTTransformerSklearn",
69
- "GraphNeuralNetSklearn",
70
- "MaskedTabularDataset",
71
- "ResBlock",
72
- "ResNetSequential",
73
- "ResNetSklearn",
74
- "ScaledTransformerEncoderLayer",
75
- "SimpleGraphLayer",
76
- "SimpleGNN",
77
- "TabularDataset",
78
- "FTTrainer",
79
- "GLMTrainer",
80
- "GNNTrainer",
81
- "ResNetTrainer",
82
- "TrainerBase",
83
- "XGBTrainer",
84
- "_xgb_cuda_available",
85
- "EPS",
86
- "DistributedUtils",
87
- "IOUtils",
88
- "PlotUtils",
89
- "TorchTrainerMixin",
90
- "TrainingUtils",
91
- "compute_batch_size",
92
- "csv_to_dict",
93
- "ensure_parent_dir",
94
- "free_cuda",
95
- "infer_factor_and_cate_list",
96
- "plot_dlift_list",
97
- "plot_lift_list",
98
- "set_global_seed",
99
- "split_data",
100
- "tweedie_loss",
101
- "torch",
102
- ]
1
+ """BayesOpt subpackage (split from monolithic BayesOpt.py)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from ins_pricing.utils.torch_compat import disable_torch_dynamo_if_requested
6
+
7
+ disable_torch_dynamo_if_requested()
8
+
9
+ from ins_pricing.modelling.bayesopt.config_preprocess import (
10
+ BayesOptConfig,
11
+ DatasetPreprocessor,
12
+ OutputManager,
13
+ VersionManager,
14
+ )
15
+ from ins_pricing.modelling.bayesopt.core import BayesOptModel
16
+ from ins_pricing.modelling.bayesopt.models import (
17
+ FeatureTokenizer,
18
+ FTTransformerCore,
19
+ FTTransformerSklearn,
20
+ GraphNeuralNetSklearn,
21
+ MaskedTabularDataset,
22
+ ResBlock,
23
+ ResNetSequential,
24
+ ResNetSklearn,
25
+ ScaledTransformerEncoderLayer,
26
+ SimpleGraphLayer,
27
+ SimpleGNN,
28
+ TabularDataset,
29
+ )
30
+ from ins_pricing.modelling.bayesopt.trainers import (
31
+ FTTrainer,
32
+ GLMTrainer,
33
+ GNNTrainer,
34
+ ResNetTrainer,
35
+ TrainerBase,
36
+ XGBTrainer,
37
+ _xgb_cuda_available,
38
+ )
39
+ __all__ = [
40
+ "BayesOptConfig",
41
+ "DatasetPreprocessor",
42
+ "OutputManager",
43
+ "VersionManager",
44
+ "BayesOptModel",
45
+ "FeatureTokenizer",
46
+ "FTTransformerCore",
47
+ "FTTransformerSklearn",
48
+ "GraphNeuralNetSklearn",
49
+ "MaskedTabularDataset",
50
+ "ResBlock",
51
+ "ResNetSequential",
52
+ "ResNetSklearn",
53
+ "ScaledTransformerEncoderLayer",
54
+ "SimpleGraphLayer",
55
+ "SimpleGNN",
56
+ "TabularDataset",
57
+ "FTTrainer",
58
+ "GLMTrainer",
59
+ "GNNTrainer",
60
+ "ResNetTrainer",
61
+ "TrainerBase",
62
+ "XGBTrainer",
63
+ "_xgb_cuda_available",
64
+ ]