autogluon.timeseries 1.4.1b20251128__tar.gz → 1.5.1b20260117__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 autogluon.timeseries might be problematic. Click here for more details.

Files changed (111) hide show
  1. {autogluon_timeseries-1.4.1b20251128/src/autogluon.timeseries.egg-info → autogluon_timeseries-1.5.1b20260117}/PKG-INFO +14 -15
  2. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/setup.py +7 -8
  3. autogluon_timeseries-1.5.1b20260117/src/autogluon/timeseries/configs/hyperparameter_presets.py +47 -0
  4. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/configs/predictor_presets.py +23 -39
  5. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/dataset/ts_dataframe.py +32 -34
  6. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/learner.py +41 -39
  7. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/metrics/__init__.py +4 -4
  8. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/metrics/abstract.py +8 -8
  9. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/metrics/point.py +9 -9
  10. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/metrics/quantile.py +4 -4
  11. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/__init__.py +2 -1
  12. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/abstract/abstract_timeseries_model.py +42 -49
  13. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/abstract/model_trial.py +2 -1
  14. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/abstract/tunable.py +8 -8
  15. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/autogluon_tabular/mlforecast.py +25 -25
  16. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/autogluon_tabular/per_step.py +13 -11
  17. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/autogluon_tabular/transforms.py +2 -2
  18. autogluon_timeseries-1.5.1b20260117/src/autogluon/timeseries/models/chronos/__init__.py +4 -0
  19. autogluon_timeseries-1.5.1b20260117/src/autogluon/timeseries/models/chronos/chronos2.py +395 -0
  20. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/chronos/model.py +29 -24
  21. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/chronos/utils.py +5 -5
  22. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/__init__.py +13 -11
  23. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/abstract.py +13 -9
  24. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/abstract.py +22 -18
  25. autogluon_timeseries-1.5.1b20260117/src/autogluon/timeseries/models/ensemble/array_based/models.py +185 -0
  26. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/regressor/abstract.py +3 -4
  27. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/regressor/linear_stacker.py +27 -8
  28. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/regressor/per_quantile_tabular.py +2 -3
  29. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/regressor/tabular.py +2 -3
  30. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/ensemble_selection.py +8 -9
  31. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/per_item_greedy.py +22 -12
  32. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/weighted/abstract.py +7 -3
  33. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/weighted/basic.py +25 -12
  34. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/weighted/greedy.py +15 -8
  35. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/gluonts/abstract.py +30 -29
  36. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/gluonts/dataset.py +9 -9
  37. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/gluonts/models.py +0 -7
  38. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/local/abstract_local_model.py +12 -12
  39. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/local/naive.py +2 -2
  40. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/local/npts.py +7 -1
  41. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/local/statsforecast.py +13 -13
  42. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/multi_window/multi_window_model.py +36 -21
  43. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/registry.py +3 -4
  44. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/attention.py +3 -4
  45. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/backbone.py +6 -6
  46. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/rope.py +4 -9
  47. autogluon_timeseries-1.5.1b20260117/src/autogluon/timeseries/models/toto/_internal/backbone/rotary_embedding_torch.py +342 -0
  48. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/scaler.py +2 -3
  49. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/transformer.py +10 -10
  50. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/dataset.py +2 -2
  51. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/forecaster.py +8 -8
  52. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/dataloader.py +4 -4
  53. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/hf_pretrained_model.py +97 -16
  54. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/model.py +30 -17
  55. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/predictor.py +329 -148
  56. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/regressor.py +17 -17
  57. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/splitter.py +2 -2
  58. autogluon_timeseries-1.5.1b20260117/src/autogluon/timeseries/trainer/ensemble_composer.py +444 -0
  59. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/trainer/model_set_builder.py +9 -9
  60. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/trainer/prediction_cache.py +16 -16
  61. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/trainer/trainer.py +156 -136
  62. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/trainer/utils.py +3 -4
  63. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/transforms/covariate_scaler.py +7 -7
  64. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/transforms/target_scaler.py +8 -8
  65. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/datetime/lags.py +1 -3
  66. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/datetime/seasonality.py +1 -3
  67. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/features.py +22 -9
  68. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/forecast.py +1 -2
  69. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/timer.py +4 -5
  70. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/version.py +1 -1
  71. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117/src/autogluon.timeseries.egg-info}/PKG-INFO +14 -15
  72. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon.timeseries.egg-info/SOURCES.txt +2 -0
  73. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon.timeseries.egg-info/requires.txt +14 -15
  74. autogluon_timeseries-1.4.1b20251128/src/autogluon/timeseries/configs/hyperparameter_presets.py +0 -62
  75. autogluon_timeseries-1.4.1b20251128/src/autogluon/timeseries/models/chronos/__init__.py +0 -3
  76. autogluon_timeseries-1.4.1b20251128/src/autogluon/timeseries/models/ensemble/array_based/models.py +0 -73
  77. autogluon_timeseries-1.4.1b20251128/src/autogluon/timeseries/trainer/ensemble_composer.py +0 -221
  78. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/LICENSE +0 -0
  79. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/NOTICE +0 -0
  80. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/README.md +0 -0
  81. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/setup.cfg +0 -0
  82. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/__init__.py +0 -0
  83. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/configs/__init__.py +0 -0
  84. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/dataset/__init__.py +0 -0
  85. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/metrics/utils.py +0 -0
  86. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/abstract/__init__.py +0 -0
  87. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/autogluon_tabular/__init__.py +0 -0
  88. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/autogluon_tabular/utils.py +0 -0
  89. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/__init__.py +0 -0
  90. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/array_based/regressor/__init__.py +0 -0
  91. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/ensemble/weighted/__init__.py +0 -0
  92. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/gluonts/__init__.py +0 -0
  93. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/local/__init__.py +0 -0
  94. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/multi_window/__init__.py +0 -0
  95. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/__init__.py +0 -0
  96. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/__init__.py +0 -0
  97. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/__init__.py +0 -0
  98. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/distribution.py +0 -0
  99. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/models/toto/_internal/backbone/kvcache.py +0 -0
  100. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/trainer/__init__.py +0 -0
  101. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/transforms/__init__.py +0 -0
  102. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/__init__.py +0 -0
  103. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/constants.py +0 -0
  104. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/datetime/__init__.py +0 -0
  105. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/datetime/base.py +0 -0
  106. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/datetime/time_features.py +0 -0
  107. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon/timeseries/utils/warning_filters.py +0 -0
  108. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon.timeseries.egg-info/dependency_links.txt +0 -0
  109. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon.timeseries.egg-info/namespace_packages.txt +0 -0
  110. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon.timeseries.egg-info/top_level.txt +0 -0
  111. {autogluon_timeseries-1.4.1b20251128 → autogluon_timeseries-1.5.1b20260117}/src/autogluon.timeseries.egg-info/zip-safe +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autogluon.timeseries
3
- Version: 1.4.1b20251128
3
+ Version: 1.5.1b20260117
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
@@ -39,10 +39,9 @@ Requires-Dist: joblib<1.7,>=1.2
39
39
  Requires-Dist: numpy<2.4.0,>=1.25.0
40
40
  Requires-Dist: scipy<1.17,>=1.5.4
41
41
  Requires-Dist: pandas<2.4.0,>=2.0.0
42
- Requires-Dist: torch<2.8,>=2.6
43
- Requires-Dist: lightning<2.8,>=2.5.1
44
- Requires-Dist: pytorch_lightning
45
- Requires-Dist: transformers[sentencepiece]<4.50,>=4.38.0
42
+ Requires-Dist: torch<2.10,>=2.6
43
+ Requires-Dist: lightning<2.6,>=2.5.1
44
+ Requires-Dist: transformers[sentencepiece]<4.58,>=4.51.0
46
45
  Requires-Dist: accelerate<2.0,>=0.34.0
47
46
  Requires-Dist: gluonts<0.17,>=0.15.0
48
47
  Requires-Dist: networkx<4,>=3.0
@@ -53,23 +52,23 @@ Requires-Dist: coreforecast<0.0.17,>=0.0.12
53
52
  Requires-Dist: fugue>=0.9.0
54
53
  Requires-Dist: tqdm<5,>=4.38
55
54
  Requires-Dist: orjson~=3.9
56
- Requires-Dist: chronos-forecasting<3,>=2.0.1
55
+ Requires-Dist: einops<1,>=0.7
56
+ Requires-Dist: chronos-forecasting<2.4,>=2.2.2
57
+ Requires-Dist: peft<0.18,>=0.13.0
57
58
  Requires-Dist: tensorboard<3,>=2.9
58
- Requires-Dist: autogluon.core[raytune]==1.4.1b20251128
59
- Requires-Dist: autogluon.common==1.4.1b20251128
60
- Requires-Dist: autogluon.features==1.4.1b20251128
61
- Requires-Dist: autogluon.tabular[catboost,lightgbm,xgboost]==1.4.1b20251128
59
+ Requires-Dist: autogluon.core==1.5.1b20260117
60
+ Requires-Dist: autogluon.common==1.5.1b20260117
61
+ Requires-Dist: autogluon.features==1.5.1b20260117
62
+ Requires-Dist: autogluon.tabular[catboost,lightgbm,xgboost]==1.5.1b20260117
62
63
  Provides-Extra: tests
63
64
  Requires-Dist: pytest; extra == "tests"
64
65
  Requires-Dist: ruff>=0.0.285; extra == "tests"
65
66
  Requires-Dist: flaky<4,>=3.7; extra == "tests"
66
67
  Requires-Dist: pytest-timeout<3,>=2.1; extra == "tests"
67
- Provides-Extra: toto
68
- Requires-Dist: einops<1,>=0.7; extra == "toto"
69
- Requires-Dist: rotary-embedding-torch<1,>=0.8; extra == "toto"
68
+ Provides-Extra: ray
69
+ Requires-Dist: autogluon.core[raytune]==1.5.1b20260117; extra == "ray"
70
70
  Provides-Extra: all
71
- Requires-Dist: rotary-embedding-torch<1,>=0.8; extra == "all"
72
- Requires-Dist: einops<1,>=0.7; extra == "all"
71
+ Requires-Dist: autogluon.core[raytune]==1.5.1b20260117; extra == "all"
73
72
  Dynamic: author
74
73
  Dynamic: classifier
75
74
  Dynamic: description
@@ -30,7 +30,6 @@ install_requires = [
30
30
  "pandas", # version range defined in `core/_setup_utils.py`
31
31
  "torch", # version range defined in `core/_setup_utils.py`
32
32
  "lightning", # version range defined in `core/_setup_utils.py`
33
- "pytorch_lightning", # version range defined in `core/_setup_utils.py`
34
33
  "transformers[sentencepiece]", # version range defined in `core/_setup_utils.py`
35
34
  "accelerate", # version range defined in `core/_setup_utils.py`
36
35
  "gluonts>=0.15.0,<0.17",
@@ -42,10 +41,11 @@ install_requires = [
42
41
  "fugue>=0.9.0", # prevent dependency clash with omegaconf
43
42
  "tqdm", # version range defined in `core/_setup_utils.py`
44
43
  "orjson~=3.9", # use faster JSON implementation in GluonTS
45
- "chronos-forecasting>=2.0.1,<3",
46
- # TODO v1.1: use lightning[pytorch-extra] instead of explicitly installing tensorboard
44
+ "einops>=0.7,<1", # required by Chronos-2 and Toto
45
+ "chronos-forecasting>=2.2.2,<2.4",
46
+ "peft>=0.13.0,<0.18", # version range same as in chronos-forecasting[extras]
47
47
  "tensorboard>=2.9,<3", # fixes https://github.com/autogluon/autogluon/issues/3612
48
- f"autogluon.core[raytune]=={version}",
48
+ f"autogluon.core=={version}",
49
49
  f"autogluon.common=={version}",
50
50
  f"autogluon.features=={version}",
51
51
  f"autogluon.tabular[catboost,lightgbm,xgboost]=={version}",
@@ -58,13 +58,12 @@ extras_require = {
58
58
  "flaky>=3.7,<4",
59
59
  "pytest-timeout>=2.1,<3",
60
60
  ],
61
- "toto": [
62
- "einops>=0.7,<1",
63
- "rotary-embedding-torch>=0.8,<1",
61
+ "ray": [
62
+ f"autogluon.core[raytune]=={version}",
64
63
  ],
65
64
  }
66
65
 
67
- extras_require["all"] = list(set.union(*(set(extras_require[extra]) for extra in ["toto"])))
66
+ extras_require["all"] = list(set.union(*(set(extras_require[extra]) for extra in ["ray"])))
68
67
  install_requires = ag.get_dependency_version_ranges(install_requires)
69
68
 
70
69
  if __name__ == "__main__":
@@ -0,0 +1,47 @@
1
+ from typing import Any
2
+
3
+
4
+ def get_hyperparameter_presets() -> dict[str, dict[str, dict[str, Any] | list[dict[str, Any]]]]:
5
+ return {
6
+ "very_light": {
7
+ "Naive": {},
8
+ "SeasonalNaive": {},
9
+ "ETS": {},
10
+ "Theta": {},
11
+ "RecursiveTabular": {"max_num_samples": 100_000},
12
+ "DirectTabular": {"max_num_samples": 100_000},
13
+ },
14
+ "light": {
15
+ "SeasonalNaive": {},
16
+ "ETS": {},
17
+ "Theta": {},
18
+ "RecursiveTabular": {},
19
+ "DirectTabular": {},
20
+ "TemporalFusionTransformer": {},
21
+ "Chronos2": {"model_path": "autogluon/chronos-2-small"},
22
+ },
23
+ "default": {
24
+ "SeasonalNaive": {},
25
+ "AutoETS": {},
26
+ "DynamicOptimizedTheta": {},
27
+ "RecursiveTabular": {},
28
+ "DirectTabular": {},
29
+ "TemporalFusionTransformer": {},
30
+ "DeepAR": {},
31
+ "Chronos2": [
32
+ {},
33
+ {
34
+ "ag_args": {"name_suffix": "SmallFineTuned"},
35
+ "model_path": "autogluon/chronos-2-small",
36
+ "fine_tune": True,
37
+ "eval_during_fine_tune": True,
38
+ },
39
+ ],
40
+ "Chronos": {
41
+ "ag_args": {"name_suffix": "WithRegressor"},
42
+ "model_path": "bolt_small",
43
+ "target_scaler": "standard",
44
+ "covariate_regressor": {"model_name": "CAT", "model_hyperparameters": {"iterations": 1000}},
45
+ },
46
+ },
47
+ }
@@ -2,10 +2,7 @@
2
2
 
3
3
  from typing import Any
4
4
 
5
- from . import get_hyperparameter_presets
6
-
7
5
  TIMESERIES_PRESETS_ALIASES = dict(
8
- chronos="chronos_small",
9
6
  best="best_quality",
10
7
  high="high_quality",
11
8
  medium="medium_quality",
@@ -16,13 +13,33 @@ TIMESERIES_PRESETS_ALIASES = dict(
16
13
 
17
14
 
18
15
  def get_predictor_presets() -> dict[str, Any]:
19
- hp_presets = get_hyperparameter_presets()
20
-
21
16
  predictor_presets = dict(
22
- best_quality={"hyperparameters": "default", "num_val_windows": 2},
17
+ best_quality={"hyperparameters": "default", "num_val_windows": "auto", "refit_every_n_windows": "auto"},
23
18
  high_quality={"hyperparameters": "default"},
24
19
  medium_quality={"hyperparameters": "light"},
25
20
  fast_training={"hyperparameters": "very_light"},
21
+ # Chronos-2 models
22
+ chronos2={
23
+ "hyperparameters": {"Chronos2": {"model_path": "autogluon/chronos-2"}},
24
+ "skip_model_selection": True,
25
+ },
26
+ chronos2_small={
27
+ "hyperparameters": {"Chronos2": {"model_path": "autogluon/chronos-2-small"}},
28
+ "skip_model_selection": True,
29
+ },
30
+ chronos2_ensemble={
31
+ "hyperparameters": {
32
+ "Chronos2": [
33
+ {"model_path": "autogluon/chronos-2", "ag_args": {"name_suffix": "ZeroShot"}},
34
+ {
35
+ "model_path": "autogluon/chronos-2-small",
36
+ "fine_tune": True,
37
+ "eval_during_fine_tune": True,
38
+ "ag_args": {"name_suffix": "SmallFineTuned"},
39
+ },
40
+ ]
41
+ },
42
+ },
26
43
  # Chronos-Bolt models
27
44
  bolt_tiny={
28
45
  "hyperparameters": {"Chronos": {"model_path": "bolt_tiny"}},
@@ -40,39 +57,6 @@ def get_predictor_presets() -> dict[str, Any]:
40
57
  "hyperparameters": {"Chronos": {"model_path": "bolt_base"}},
41
58
  "skip_model_selection": True,
42
59
  },
43
- # Original Chronos models
44
- chronos_tiny={
45
- "hyperparameters": {"Chronos": {"model_path": "tiny"}},
46
- "skip_model_selection": True,
47
- },
48
- chronos_mini={
49
- "hyperparameters": {"Chronos": {"model_path": "mini"}},
50
- "skip_model_selection": True,
51
- },
52
- chronos_small={
53
- "hyperparameters": {"Chronos": {"model_path": "small"}},
54
- "skip_model_selection": True,
55
- },
56
- chronos_base={
57
- "hyperparameters": {"Chronos": {"model_path": "base"}},
58
- "skip_model_selection": True,
59
- },
60
- chronos_large={
61
- "hyperparameters": {"Chronos": {"model_path": "large", "batch_size": 8}},
62
- "skip_model_selection": True,
63
- },
64
- chronos_ensemble={
65
- "hyperparameters": {
66
- "Chronos": {"model_path": "small"},
67
- **hp_presets["light_inference"],
68
- }
69
- },
70
- chronos_large_ensemble={
71
- "hyperparameters": {
72
- "Chronos": {"model_path": "large", "batch_size": 8},
73
- **hp_presets["light_inference"],
74
- }
75
- },
76
60
  )
77
61
 
78
62
  # update with aliases
@@ -7,7 +7,7 @@ import reprlib
7
7
  from collections.abc import Iterable
8
8
  from itertools import islice
9
9
  from pathlib import Path
10
- from typing import TYPE_CHECKING, Any, Final, Optional, Type, Union, overload
10
+ from typing import TYPE_CHECKING, Any, Final, Type, overload
11
11
 
12
12
  import numpy as np
13
13
  import pandas as pd
@@ -122,10 +122,10 @@ class TimeSeriesDataFrame(pd.DataFrame):
122
122
 
123
123
  def __init__(
124
124
  self,
125
- data: Union[pd.DataFrame, str, Path, Iterable],
126
- static_features: Optional[Union[pd.DataFrame, str, Path]] = None,
127
- id_column: Optional[str] = None,
128
- timestamp_column: Optional[str] = None,
125
+ data: pd.DataFrame | str | Path | Iterable,
126
+ static_features: pd.DataFrame | str | Path | None = None,
127
+ id_column: str | None = None,
128
+ timestamp_column: str | None = None,
129
129
  num_cpus: int = -1,
130
130
  *args,
131
131
  **kwargs,
@@ -149,7 +149,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
149
149
  else:
150
150
  raise ValueError(f"data must be a pd.DataFrame, Iterable, string or Path (received {type(data)}).")
151
151
  super().__init__(data=data, *args, **kwargs) # type: ignore
152
- self._static_features: Optional[pd.DataFrame] = None
152
+ self._static_features: pd.DataFrame | None = None
153
153
  if static_features is not None:
154
154
  self.static_features = self._construct_static_features(static_features, id_column=id_column)
155
155
 
@@ -168,8 +168,8 @@ class TimeSeriesDataFrame(pd.DataFrame):
168
168
  def _construct_tsdf_from_data_frame(
169
169
  cls,
170
170
  df: pd.DataFrame,
171
- id_column: Optional[str] = None,
172
- timestamp_column: Optional[str] = None,
171
+ id_column: str | None = None,
172
+ timestamp_column: str | None = None,
173
173
  ) -> pd.DataFrame:
174
174
  df = df.copy()
175
175
  if id_column is not None:
@@ -272,9 +272,9 @@ class TimeSeriesDataFrame(pd.DataFrame):
272
272
  def from_data_frame(
273
273
  cls,
274
274
  df: pd.DataFrame,
275
- id_column: Optional[str] = None,
276
- timestamp_column: Optional[str] = None,
277
- static_features_df: Optional[pd.DataFrame] = None,
275
+ id_column: str | None = None,
276
+ timestamp_column: str | None = None,
277
+ static_features_df: pd.DataFrame | None = None,
278
278
  ) -> TimeSeriesDataFrame:
279
279
  """Construct a ``TimeSeriesDataFrame`` from a pandas DataFrame.
280
280
 
@@ -315,10 +315,10 @@ class TimeSeriesDataFrame(pd.DataFrame):
315
315
  @classmethod
316
316
  def from_path(
317
317
  cls,
318
- path: Union[str, Path],
319
- id_column: Optional[str] = None,
320
- timestamp_column: Optional[str] = None,
321
- static_features_path: Optional[Union[str, Path]] = None,
318
+ path: str | Path,
319
+ id_column: str | None = None,
320
+ timestamp_column: str | None = None,
321
+ static_features_path: str | Path | None = None,
322
322
  ) -> TimeSeriesDataFrame:
323
323
  """Construct a ``TimeSeriesDataFrame`` from a CSV or Parquet file.
324
324
 
@@ -396,8 +396,8 @@ class TimeSeriesDataFrame(pd.DataFrame):
396
396
  @classmethod
397
397
  def _construct_static_features(
398
398
  cls,
399
- static_features: Union[pd.DataFrame, str, Path],
400
- id_column: Optional[str] = None,
399
+ static_features: pd.DataFrame | str | Path,
400
+ id_column: str | None = None,
401
401
  ) -> pd.DataFrame:
402
402
  if isinstance(static_features, (str, Path)):
403
403
  static_features = load_pd.load(str(static_features))
@@ -421,7 +421,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
421
421
  return self._static_features
422
422
 
423
423
  @static_features.setter
424
- def static_features(self, value: Optional[pd.DataFrame]):
424
+ def static_features(self, value: pd.DataFrame | None):
425
425
  # if the current item index is not a multiindex, then we are dealing with a single
426
426
  # item slice. this should only happen when the user explicitly requests only a
427
427
  # single item or during `slice_by_timestep`. In this case we do not set static features
@@ -454,7 +454,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
454
454
 
455
455
  self._static_features = value
456
456
 
457
- def infer_frequency(self, num_items: Optional[int] = None, raise_if_irregular: bool = False) -> str:
457
+ def infer_frequency(self, num_items: int | None = None, raise_if_irregular: bool = False) -> str:
458
458
  """Infer the time series frequency based on the timestamps of the observations.
459
459
 
460
460
  Parameters
@@ -570,7 +570,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
570
570
  return obj
571
571
 
572
572
  def __finalize__( # noqa
573
- self: TimeSeriesDataFrame, other, method: Optional[str] = None, **kwargs
573
+ self: TimeSeriesDataFrame, other, method: str | None = None, **kwargs
574
574
  ) -> TimeSeriesDataFrame:
575
575
  super().__finalize__(other=other, method=method, **kwargs)
576
576
  # when finalizing the copy/slice operation, we use the property setter to stay consistent
@@ -602,9 +602,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
602
602
  after = TimeSeriesDataFrame(data_after, static_features=self.static_features)
603
603
  return before, after
604
604
 
605
- def slice_by_timestep(
606
- self, start_index: Optional[int] = None, end_index: Optional[int] = None
607
- ) -> TimeSeriesDataFrame:
605
+ def slice_by_timestep(self, start_index: int | None = None, end_index: int | None = None) -> TimeSeriesDataFrame:
608
606
  """Select a subsequence from each time series between start (inclusive) and end (exclusive) indices.
609
607
 
610
608
  This operation is equivalent to selecting a slice ``[start_index : end_index]`` from each time series, and then
@@ -907,8 +905,8 @@ class TimeSeriesDataFrame(pd.DataFrame):
907
905
  return super().sort_index(*args, **kwargs) # type: ignore
908
906
 
909
907
  def get_model_inputs_for_scoring(
910
- self, prediction_length: int, known_covariates_names: Optional[list[str]] = None
911
- ) -> tuple[TimeSeriesDataFrame, Optional[TimeSeriesDataFrame]]:
908
+ self, prediction_length: int, known_covariates_names: list[str] | None = None
909
+ ) -> tuple[TimeSeriesDataFrame, TimeSeriesDataFrame | None]:
912
910
  """Prepare model inputs necessary to predict the last ``prediction_length`` time steps of each time series in the dataset.
913
911
 
914
912
  Parameters
@@ -938,8 +936,8 @@ class TimeSeriesDataFrame(pd.DataFrame):
938
936
  def train_test_split(
939
937
  self,
940
938
  prediction_length: int,
941
- end_index: Optional[int] = None,
942
- suffix: Optional[str] = None,
939
+ end_index: int | None = None,
940
+ suffix: str | None = None,
943
941
  ) -> tuple[TimeSeriesDataFrame, TimeSeriesDataFrame]:
944
942
  """Generate a train/test split from the given dataset.
945
943
 
@@ -984,7 +982,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
984
982
 
985
983
  def convert_frequency(
986
984
  self,
987
- freq: Union[str, pd.DateOffset],
985
+ freq: str | pd.DateOffset,
988
986
  agg_numeric: str = "mean",
989
987
  agg_categorical: str = "first",
990
988
  num_cpus: int = -1,
@@ -1003,7 +1001,7 @@ class TimeSeriesDataFrame(pd.DataFrame):
1003
1001
 
1004
1002
  Parameters
1005
1003
  ----------
1006
- freq : Union[str, pd.DateOffset]
1004
+ freq : str | pd.DateOffset
1007
1005
  Frequency to which the data should be converted. See `pandas frequency aliases <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases>`_
1008
1006
  for supported values.
1009
1007
  agg_numeric : {"max", "min", "sum", "mean", "median", "first", "last"}, default = "mean"
@@ -1130,14 +1128,14 @@ class TimeSeriesDataFrame(pd.DataFrame):
1130
1128
  def reindex(*args, **kwargs) -> Self: ... # type: ignore
1131
1129
 
1132
1130
  @overload
1133
- def __new__(cls, data: pd.DataFrame, static_features: Optional[pd.DataFrame] = None) -> Self: ... # type: ignore
1131
+ def __new__(cls, data: pd.DataFrame, static_features: pd.DataFrame | None = None) -> Self: ... # type: ignore
1134
1132
  @overload
1135
1133
  def __new__(
1136
1134
  cls,
1137
- data: Union[pd.DataFrame, str, Path, Iterable],
1138
- static_features: Optional[Union[pd.DataFrame, str, Path]] = None,
1139
- id_column: Optional[str] = None,
1140
- timestamp_column: Optional[str] = None,
1135
+ data: pd.DataFrame | str | Path | Iterable,
1136
+ static_features: pd.DataFrame | str | Path | None = None,
1137
+ id_column: str | None = None,
1138
+ timestamp_column: str | None = None,
1141
1139
  num_cpus: int = -1,
1142
1140
  *args,
1143
1141
  **kwargs,
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  import reprlib
3
3
  import time
4
- from typing import Any, Literal, Optional, Type, Union
4
+ from typing import Any, Literal, Type
5
5
 
6
6
  import pandas as pd
7
7
 
@@ -25,12 +25,12 @@ class TimeSeriesLearner(AbstractLearner):
25
25
  self,
26
26
  path_context: str,
27
27
  target: str = "target",
28
- known_covariates_names: Optional[list[str]] = None,
28
+ known_covariates_names: list[str] | None = None,
29
29
  trainer_type: Type[TimeSeriesTrainer] = TimeSeriesTrainer,
30
- eval_metric: Union[str, TimeSeriesScorer, None] = None,
30
+ eval_metric: str | TimeSeriesScorer | None = None,
31
31
  prediction_length: int = 1,
32
32
  cache_predictions: bool = True,
33
- ensemble_model_type: Optional[Type] = None,
33
+ ensemble_model_type: Type | None = None,
34
34
  **kwargs,
35
35
  ):
36
36
  super().__init__(path_context=path_context)
@@ -41,7 +41,7 @@ class TimeSeriesLearner(AbstractLearner):
41
41
  self.prediction_length = prediction_length
42
42
  self.quantile_levels = kwargs.get("quantile_levels", [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
43
43
  self.cache_predictions = cache_predictions
44
- self.freq: Optional[str] = None
44
+ self.freq: str | None = None
45
45
  self.ensemble_model_type = ensemble_model_type
46
46
 
47
47
  self.feature_generator = TimeSeriesFeatureGenerator(
@@ -55,14 +55,15 @@ class TimeSeriesLearner(AbstractLearner):
55
55
  def fit(
56
56
  self,
57
57
  train_data: TimeSeriesDataFrame,
58
- hyperparameters: Union[str, dict],
59
- val_data: Optional[TimeSeriesDataFrame] = None,
60
- hyperparameter_tune_kwargs: Optional[Union[str, dict]] = None,
61
- time_limit: Optional[float] = None,
62
- num_val_windows: Optional[int] = None,
63
- val_step_size: Optional[int] = None,
64
- refit_every_n_windows: Optional[int] = 1,
65
- random_seed: Optional[int] = None,
58
+ hyperparameters: str | dict,
59
+ val_data: TimeSeriesDataFrame | None = None,
60
+ hyperparameter_tune_kwargs: str | dict | None = None,
61
+ ensemble_hyperparameters: dict[str, Any] | list[dict[str, Any]] | None = None,
62
+ time_limit: float | None = None,
63
+ num_val_windows: tuple[int, ...] = (1,),
64
+ val_step_size: int | None = None,
65
+ refit_every_n_windows: int | None = 1,
66
+ random_seed: int | None = None,
66
67
  **kwargs,
67
68
  ) -> None:
68
69
  self._time_limit = time_limit
@@ -95,7 +96,7 @@ class TimeSeriesLearner(AbstractLearner):
95
96
  )
96
97
 
97
98
  assert issubclass(self.trainer_type, TimeSeriesTrainer)
98
- self.trainer: Optional[TimeSeriesTrainer] = self.trainer_type(**trainer_init_kwargs)
99
+ self.trainer: TimeSeriesTrainer | None = self.trainer_type(**trainer_init_kwargs)
99
100
  self.trainer_path = self.trainer.path
100
101
  self.save()
101
102
 
@@ -112,6 +113,7 @@ class TimeSeriesLearner(AbstractLearner):
112
113
  val_data=val_data,
113
114
  hyperparameters=hyperparameters,
114
115
  hyperparameter_tune_kwargs=hyperparameter_tune_kwargs,
116
+ ensemble_hyperparameters=ensemble_hyperparameters,
115
117
  excluded_model_types=kwargs.get("excluded_model_types"),
116
118
  time_limit=time_limit,
117
119
  random_seed=random_seed,
@@ -122,9 +124,9 @@ class TimeSeriesLearner(AbstractLearner):
122
124
 
123
125
  def _align_covariates_with_forecast_index(
124
126
  self,
125
- known_covariates: Optional[TimeSeriesDataFrame],
127
+ known_covariates: TimeSeriesDataFrame | None,
126
128
  data: TimeSeriesDataFrame,
127
- ) -> Optional[TimeSeriesDataFrame]:
129
+ ) -> TimeSeriesDataFrame | None:
128
130
  """Select the relevant item_ids and timestamps from the known_covariates dataframe.
129
131
 
130
132
  If some of the item_ids or timestamps are missing, an exception is raised.
@@ -163,10 +165,10 @@ class TimeSeriesLearner(AbstractLearner):
163
165
  def predict(
164
166
  self,
165
167
  data: TimeSeriesDataFrame,
166
- known_covariates: Optional[TimeSeriesDataFrame] = None,
167
- model: Optional[Union[str, AbstractTimeSeriesModel]] = None,
168
+ known_covariates: TimeSeriesDataFrame | None = None,
169
+ model: str | AbstractTimeSeriesModel | None = None,
168
170
  use_cache: bool = True,
169
- random_seed: Optional[int] = None,
171
+ random_seed: int | None = None,
170
172
  **kwargs,
171
173
  ) -> TimeSeriesDataFrame:
172
174
  data = self.feature_generator.transform(data)
@@ -184,8 +186,8 @@ class TimeSeriesLearner(AbstractLearner):
184
186
  def score(
185
187
  self,
186
188
  data: TimeSeriesDataFrame,
187
- model: Optional[Union[str, AbstractTimeSeriesModel]] = None,
188
- metric: Union[str, TimeSeriesScorer, None] = None,
189
+ model: str | AbstractTimeSeriesModel | None = None,
190
+ metric: str | TimeSeriesScorer | None = None,
189
191
  use_cache: bool = True,
190
192
  ) -> float:
191
193
  data = self.feature_generator.transform(data)
@@ -194,8 +196,8 @@ class TimeSeriesLearner(AbstractLearner):
194
196
  def evaluate(
195
197
  self,
196
198
  data: TimeSeriesDataFrame,
197
- model: Optional[str] = None,
198
- metrics: Optional[Union[str, TimeSeriesScorer, list[Union[str, TimeSeriesScorer]]]] = None,
199
+ model: str | None = None,
200
+ metrics: str | TimeSeriesScorer | list[str | TimeSeriesScorer] | None = None,
199
201
  use_cache: bool = True,
200
202
  ) -> dict[str, float]:
201
203
  data = self.feature_generator.transform(data)
@@ -203,15 +205,15 @@ class TimeSeriesLearner(AbstractLearner):
203
205
 
204
206
  def get_feature_importance(
205
207
  self,
206
- data: Optional[TimeSeriesDataFrame] = None,
207
- model: Optional[str] = None,
208
- metric: Optional[Union[str, TimeSeriesScorer]] = None,
209
- features: Optional[list[str]] = None,
210
- time_limit: Optional[float] = None,
208
+ data: TimeSeriesDataFrame | None = None,
209
+ model: str | None = None,
210
+ metric: str | TimeSeriesScorer | None = None,
211
+ features: list[str] | None = None,
212
+ time_limit: float | None = None,
211
213
  method: Literal["naive", "permutation"] = "permutation",
212
214
  subsample_size: int = 50,
213
- num_iterations: Optional[int] = None,
214
- random_seed: Optional[int] = None,
215
+ num_iterations: int | None = None,
216
+ random_seed: int | None = None,
215
217
  relative_scores: bool = False,
216
218
  include_confidence_band: bool = True,
217
219
  confidence_level: float = 0.99,
@@ -272,9 +274,9 @@ class TimeSeriesLearner(AbstractLearner):
272
274
 
273
275
  def leaderboard(
274
276
  self,
275
- data: Optional[TimeSeriesDataFrame] = None,
277
+ data: TimeSeriesDataFrame | None = None,
276
278
  extra_info: bool = False,
277
- extra_metrics: Optional[list[Union[str, TimeSeriesScorer]]] = None,
279
+ extra_metrics: list[str | TimeSeriesScorer] | None = None,
278
280
  use_cache: bool = True,
279
281
  ) -> pd.DataFrame:
280
282
  if data is not None:
@@ -301,7 +303,7 @@ class TimeSeriesLearner(AbstractLearner):
301
303
  return learner_info
302
304
 
303
305
  def persist_trainer(
304
- self, models: Union[Literal["all", "best"], list[str]] = "all", with_ancestors: bool = False
306
+ self, models: Literal["all", "best"] | list[str] = "all", with_ancestors: bool = False
305
307
  ) -> list[str]:
306
308
  """Loads models and trainer in memory so that they don't have to be
307
309
  loaded during predictions
@@ -332,10 +334,10 @@ class TimeSeriesLearner(AbstractLearner):
332
334
 
333
335
  def backtest_predictions(
334
336
  self,
335
- data: Optional[TimeSeriesDataFrame],
337
+ data: TimeSeriesDataFrame | None,
336
338
  model_names: list[str],
337
- num_val_windows: Optional[int] = None,
338
- val_step_size: Optional[int] = None,
339
+ num_val_windows: int | None = None,
340
+ val_step_size: int | None = None,
339
341
  use_cache: bool = True,
340
342
  ) -> dict[str, list[TimeSeriesDataFrame]]:
341
343
  if data is not None:
@@ -350,9 +352,9 @@ class TimeSeriesLearner(AbstractLearner):
350
352
 
351
353
  def backtest_targets(
352
354
  self,
353
- data: Optional[TimeSeriesDataFrame],
354
- num_val_windows: Optional[int] = None,
355
- val_step_size: Optional[int] = None,
355
+ data: TimeSeriesDataFrame | None,
356
+ num_val_windows: int | None = None,
357
+ val_step_size: int | None = None,
356
358
  ) -> list[TimeSeriesDataFrame]:
357
359
  if data is not None:
358
360
  data = self.feature_generator.transform(data)
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pprint import pformat
4
- from typing import Any, Optional, Sequence, Type, Union
4
+ from typing import Any, Sequence, Type
5
5
 
6
6
  import numpy as np
7
7
 
@@ -54,10 +54,10 @@ EXPERIMENTAL_METRICS: dict[str, Type[TimeSeriesScorer]] = {
54
54
 
55
55
 
56
56
  def check_get_evaluation_metric(
57
- eval_metric: Union[str, TimeSeriesScorer, Type[TimeSeriesScorer], None],
57
+ eval_metric: str | TimeSeriesScorer | Type[TimeSeriesScorer] | None,
58
58
  prediction_length: int,
59
- seasonal_period: Optional[int] = None,
60
- horizon_weight: Optional[Sequence[float] | np.ndarray] = None,
59
+ seasonal_period: int | None = None,
60
+ horizon_weight: Sequence[float] | np.ndarray | None = None,
61
61
  ) -> TimeSeriesScorer:
62
62
  """Factory method for TimeSeriesScorer objects.
63
63