diff --git a/README.html b/README.html index be2257aa1a..f6ec1ef004 100644 --- a/README.html +++ b/README.html @@ -245,7 +245,7 @@
🟩 🟥
🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
🟩 🟥
🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
🟩 🟥
🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
🟩 🟥
🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
Prophet (see install notes)
🟩 🟥
🟥 🟩 🟥
🟩 🟩
🟩 🟩 🟩
series_b
A univariate (deterministic or stochastic) ``TimeSeries`` instance (the predicted series).
intersect
- A boolean for whether or not to only consider the time intersection between `series_a` and `series_b`
+ A boolean for whether to only consider the time intersection between `series_a` and `series_b`
stochastic_quantile
Optionally, for stochastic predicted series, return either all sample values with (`stochastic_quantile=None`)
or any deterministic quantile sample values by setting `stochastic_quantile=quantile` {>=0,<=1}.
diff --git a/_modules/darts/models/forecasting/baselines.html b/_modules/darts/models/forecasting/baselines.html
index 7ef64eeb50..d22d5bb04a 100644
--- a/_modules/darts/models/forecasting/baselines.html
+++ b/_modules/darts/models/forecasting/baselines.html
@@ -228,6 +228,7 @@ Source code for darts.models.forecasting.baselines
n: int,
num_samples: int = 1,
verbose: bool = False,
+ show_warnings: bool = True,
):
super().predict(n, num_samples)
forecast = np.tile(self.mean_val, (n, 1))
@@ -292,6 +293,7 @@ Source code for darts.models.forecasting.baselines
n: int,
num_samples: int = 1,
verbose: bool = False,
+ show_warnings: bool = True,
):
super().predict(n, num_samples)
forecast = np.array([self.last_k_vals[i % self.K, :] for i in range(n)])
@@ -341,6 +343,7 @@ Source code for darts.models.forecasting.baselines
n: int,
num_samples: int = 1,
verbose: bool = False,
+ show_warnings: bool = True,
):
super().predict(n, num_samples)
first, last = (
@@ -411,6 +414,7 @@ Source code for darts.models.forecasting.baselines
n: int,
num_samples: int = 1,
verbose: bool = False,
+ show_warnings: bool = True,
):
super().predict(n, num_samples)
diff --git a/_modules/darts/models/forecasting/block_rnn_model.html b/_modules/darts/models/forecasting/block_rnn_model.html
index 48214afaad..47ca6d5a6d 100644
--- a/_modules/darts/models/forecasting/block_rnn_model.html
+++ b/_modules/darts/models/forecasting/block_rnn_model.html
@@ -170,12 +170,14 @@ Source code for darts.models.forecasting.block_rnn_model
-------------------------------
"""
-from typing import List, Optional, Tuple, Union
+import inspect
+from abc import ABC, abstractmethod
+from typing import List, Optional, Tuple, Type, Union
import torch
import torch.nn as nn
-from darts.logging import get_logger, raise_if_not
+from darts.logging import get_logger, raise_log
from darts.models.forecasting.pl_forecasting_module import (
PLPastCovariatesModule,
io_processor,
@@ -185,11 +187,9 @@ Source code for darts.models.forecasting.block_rnn_model
logger = get_logger(__name__)
-# TODO add batch norm
-class _BlockRNNModule(PLPastCovariatesModule):
+[docs]class CustomBlockRNNModule(PLPastCovariatesModule, ABC):
def __init__(
self,
- name: str,
input_size: int,
hidden_dim: int,
num_layers: int,
@@ -199,24 +199,22 @@ Source code for darts.models.forecasting.block_rnn_model
dropout: float = 0.0,
**kwargs,
):
+ """This class allows to create custom block RNN modules that can later be used with Darts'
+ :class:`BlockRNNModel`. It adds the backbone that is required to be used with Darts'
+ :class:`TorchForecastingModel` and :class:`BlockRNNModel`.
- """PyTorch module implementing a block RNN to be used in `BlockRNNModel`.
+ To create a new module, subclass from :class:`CustomBlockRNNModule` and:
- PyTorch module implementing a simple block RNN with the specified `name` layer.
- This module combines a PyTorch RNN module, together with a fully connected network, which maps the
- last hidden layers to output of the desired size `output_chunk_length` and makes it compatible with
- `BlockRNNModel`s.
+ * Define the architecture in the module constructor (`__init__()`)
- This module uses an RNN to encode the input sequence, and subsequently uses a fully connected
- network as the decoder which takes as input the last hidden state of the encoder RNN.
- The final output of the decoder is a sequence of length `output_chunk_length`. In this sense,
- the `_BlockRNNModule` produces 'blocks' of forecasts at a time (which is different
- from `_RNNModule` used by the `RNNModel`).
+ * Add the `forward()` method and define the logic of your module's forward pass
+
+ * Use the custom module class when creating a new :class:`BlockRNNModel` with parameter `model`.
+
+ You can use `darts.models.forecasting.block_rnn_model._BlockRNNModule` as an example.
Parameters
----------
- name
- The name of the specific PyTorch RNN module ("RNN", "GRU" or "LSTM").
input_size
The dimensionality of the input time series.
hidden_dim
@@ -234,6 +232,67 @@ Source code for darts.models.forecasting.block_rnn_model
The fraction of neurons that are dropped in all-but-last RNN layers.
**kwargs
all parameters required for :class:`darts.model.forecasting_models.PLForecastingModule` base class.
+ """
+ super().__init__(**kwargs)
+
+ # Defining parameters
+ self.input_size = input_size
+ self.hidden_dim = hidden_dim
+ self.num_layers = num_layers
+ self.target_size = target_size
+ self.nr_params = nr_params
+ self.num_layers_out_fc = [] if num_layers_out_fc is None else num_layers_out_fc
+ self.dropout = dropout
+ self.out_len = self.output_chunk_length
+
+[docs] @io_processor
+ @abstractmethod
+ def forward(self, x_in: Tuple) -> torch.Tensor:
+ """BlockRNN Module forward.
+
+ Parameters
+ ----------
+ x_in
+ Tuple of Tensors containing the features of the input sequence. The tuple has elements
+ (past target, historic future covariates, future covariates, static covariates).
+ The shape of the past target is `(batch_size, input_length, input_size)`.
+
+ Returns
+ -------
+ torch.Tensor
+ The BlockRNN output Tensor with shape `(batch_size, output_chunk_length, target_size, nr_params)`.
+ It contains the prediction at the last time step of the sequence.
+ """
+ pass
+
+
+# TODO add batch norm
+class _BlockRNNModule(CustomBlockRNNModule):
+ def __init__(
+ self,
+ name: str,
+ **kwargs,
+ ):
+
+ """PyTorch module implementing a block RNN to be used in `BlockRNNModel`.
+
+ PyTorch module implementing a simple block RNN with the specified `name` layer.
+ This module combines a PyTorch RNN module, together with a fully connected network, which maps the
+ last hidden layers to output of the desired size `output_chunk_length` and makes it compatible with
+ `BlockRNNModel`s.
+
+ This module uses an RNN to encode the input sequence, and subsequently uses a fully connected
+ network as the decoder which takes as input the last hidden state of the encoder RNN.
+ The final output of the decoder is a sequence of length `output_chunk_length`. In this sense,
+ the `_BlockRNNModule` produces 'blocks' of forecasts at a time (which is different
+ from `_RNNModule` used by the `RNNModel`).
+
+ Parameters
+ ----------
+ name
+ The name of the specific PyTorch RNN module ("RNN", "GRU" or "LSTM").
+ **kwargs
+ all parameters required for the :class:`darts.model.forecasting_models.CustomBlockRNNModule` base class.
Inputs
------
@@ -248,25 +307,24 @@ Source code for darts.models.forecasting.block_rnn_model
super().__init__(**kwargs)
- # Defining parameters
- self.hidden_dim = hidden_dim
- self.n_layers = num_layers
- self.target_size = target_size
- self.nr_params = nr_params
- num_layers_out_fc = [] if num_layers_out_fc is None else num_layers_out_fc
- self.out_len = self.output_chunk_length
self.name = name
# Defining the RNN module
- self.rnn = getattr(nn, name)(
- input_size, hidden_dim, num_layers, batch_first=True, dropout=dropout
+ self.rnn = getattr(nn, self.name)(
+ self.input_size,
+ self.hidden_dim,
+ self.num_layers,
+ batch_first=True,
+ dropout=self.dropout,
)
# The RNN module is followed by a fully connected layer, which maps the last hidden layer
# to the output of desired length
- last = hidden_dim
+ last = self.hidden_dim
feats = []
- for feature in num_layers_out_fc + [self.out_len * target_size * nr_params]:
+ for feature in self.num_layers_out_fc + [
+ self.out_len * self.target_size * self.nr_params
+ ]:
feats.append(nn.Linear(last, feature))
last = feature
self.fc = nn.Sequential(*feats)
@@ -298,7 +356,7 @@ Source code for darts.models.forecasting.block_rnn_model
self,
input_chunk_length: int,
output_chunk_length: int,
- model: Union[str, nn.Module] = "RNN",
+ model: Union[str, Type[CustomBlockRNNModule]] = "RNN",
hidden_dim: int = 25,
n_rnn_layers: int = 1,
hidden_fc_sizes: Optional[List] = None,
@@ -335,9 +393,8 @@ Source code for darts.models.forecasting.block_rnn_model
the model from using future values of past and / or future covariates for prediction (depending on the
model's covariate support).
model
- Either a string specifying the RNN module type ("RNN", "LSTM" or "GRU"),
- or a PyTorch module with the same specifications as
- :class:`darts.models.block_rnn_model._BlockRNNModule`.
+ Either a string specifying the RNN module type ("RNN", "LSTM" or "GRU"), or a subclass of
+ :class:`CustomBlockRNNModule` (the class itself, not an object of the class) with a custom logic.
hidden_dim
Size for feature maps for each hidden RNN layer (:math:`h_n`).
In Darts version <= 0.21, hidden_dim was referred as hidden_size.
@@ -398,7 +455,7 @@ Source code for darts.models.forecasting.block_rnn_model
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -443,7 +500,6 @@ Source code for darts.models.forecasting.block_rnn_model
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
@@ -524,14 +580,16 @@ Source code for darts.models.forecasting.block_rnn_model
# check we got right model type specified:
if model not in ["RNN", "LSTM", "GRU"]:
- raise_if_not(
- isinstance(model, nn.Module),
- '{} is not a valid RNN model.\n Please specify "RNN", "LSTM", '
- '"GRU", or give your own PyTorch nn.Module'.format(
- model.__class__.__name__
- ),
- logger,
- )
+ if not inspect.isclass(model) or not issubclass(
+ model, CustomBlockRNNModule
+ ):
+ raise_log(
+ ValueError(
+ "`model` is not a valid RNN model. Please specify 'RNN', 'LSTM', 'GRU', or give a subclass "
+ "(not an instance) of darts.models.forecasting.rnn_model.CustomBlockRNNModule."
+ ),
+ logger=logger,
+ )
self.rnn_type_or_module = model
self.hidden_fc_sizes = hidden_fc_sizes
@@ -551,24 +609,25 @@ Source code for darts.models.forecasting.block_rnn_model
output_dim = train_sample[-1].shape[1]
nr_params = 1 if self.likelihood is None else self.likelihood.num_parameters
- if self.rnn_type_or_module in ["RNN", "LSTM", "GRU"]:
- hidden_fc_sizes = (
- [] if self.hidden_fc_sizes is None else self.hidden_fc_sizes
- )
- model = _BlockRNNModule(
- name=self.rnn_type_or_module,
- input_size=input_dim,
- target_size=output_dim,
- nr_params=nr_params,
- hidden_dim=self.hidden_dim,
- num_layers=self.n_rnn_layers,
- num_layers_out_fc=hidden_fc_sizes,
- dropout=self.dropout,
- **self.pl_module_params,
- )
+ hidden_fc_sizes = [] if self.hidden_fc_sizes is None else self.hidden_fc_sizes
+
+ kwargs = {}
+ if isinstance(self.rnn_type_or_module, str):
+ model_cls = _BlockRNNModule
+ kwargs["name"] = self.rnn_type_or_module
else:
- model = self.rnn_type_or_module
- return model
+ model_cls = self.rnn_type_or_module
+ return model_cls(
+ input_size=input_dim,
+ target_size=output_dim,
+ nr_params=nr_params,
+ hidden_dim=self.hidden_dim,
+ num_layers=self.n_rnn_layers,
+ num_layers_out_fc=hidden_fc_sizes,
+ dropout=self.dropout,
+ **self.pl_module_params,
+ **kwargs,
+ )
diff --git a/_modules/darts/models/forecasting/dlinear.html b/_modules/darts/models/forecasting/dlinear.html
index aa759fd33a..52ee986fb4 100644
--- a/_modules/darts/models/forecasting/dlinear.html
+++ b/_modules/darts/models/forecasting/dlinear.html
@@ -495,7 +495,7 @@ Source code for darts.models.forecasting.dlinear
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -540,7 +540,6 @@ Source code for darts.models.forecasting.dlinear
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
diff --git a/_modules/darts/models/forecasting/exponential_smoothing.html b/_modules/darts/models/forecasting/exponential_smoothing.html
index 4ff069e25c..46e2dd2450 100644
--- a/_modules/darts/models/forecasting/exponential_smoothing.html
+++ b/_modules/darts/models/forecasting/exponential_smoothing.html
@@ -304,7 +304,13 @@ Source code for darts.models.forecasting.exponential_smoothing
return self
-[docs] def predict(self, n, num_samples=1, verbose: bool = False):
+[docs] def predict(
+ self,
+ n: int,
+ num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
+ ):
super().predict(n, num_samples)
if num_samples == 1:
diff --git a/_modules/darts/models/forecasting/fft.html b/_modules/darts/models/forecasting/fft.html
index 62d38d793e..68adb80184 100644
--- a/_modules/darts/models/forecasting/fft.html
+++ b/_modules/darts/models/forecasting/fft.html
@@ -533,7 +533,13 @@ Source code for darts.models.forecasting.fft
return self
-[docs] def predict(self, n: int, num_samples: int = 1, verbose: bool = False):
+[docs] def predict(
+ self,
+ n: int,
+ num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
+ ):
super().predict(n, num_samples)
trend_forecast = np.array(
[self.trend_function(i + len(self.training_series)) for i in range(n)]
diff --git a/_modules/darts/models/forecasting/forecasting_model.html b/_modules/darts/models/forecasting/forecasting_model.html
index 25cb9c301a..158824f99a 100644
--- a/_modules/darts/models/forecasting/forecasting_model.html
+++ b/_modules/darts/models/forecasting/forecasting_model.html
@@ -402,6 +402,14 @@ Source code for darts.models.forecasting.forecasting_model
"""
return getattr(self, "likelihood", None) is not None
+ @property
+ @abstractmethod
+ def supports_transferrable_series_prediction(self) -> bool:
+ """
+ Whether the model supports prediction for any input `series`.
+ """
+ pass
+
@property
def uses_past_covariates(self) -> bool:
"""
@@ -445,7 +453,13 @@ Source code for darts.models.forecasting.forecasting_model
return None
@abstractmethod
- def predict(self, n: int, num_samples: int = 1) -> TimeSeries:
+ def predict(
+ self,
+ n: int,
+ num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
+ ) -> TimeSeries:
"""Forecasts values for `n` time steps after the end of the training series.
Parameters
@@ -455,6 +469,10 @@ Source code for darts.models.forecasting.forecasting_model
num_samples
Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+ verbose
+ Optionally, set the prediction verbosity. Not effective for all models.
+ show_warnings
+ Optionally, control whether warnings are shown. Not effective for all models.
Returns
-------
@@ -482,49 +500,59 @@ Source code for darts.models.forecasting.forecasting_model
def _fit_wrapper(
self,
series: TimeSeries,
- past_covariates: Optional[TimeSeries],
- future_covariates: Optional[TimeSeries],
+ past_covariates: Optional[TimeSeries] = None,
+ future_covariates: Optional[TimeSeries] = None,
**kwargs,
):
- supported_params = inspect.signature(self.fit).parameters
- kwargs_ = {k: v for k, v in kwargs.items() if k in supported_params}
-
+ add_kwargs = {}
# handle past and future covariates based on model support
- for covs, name in zip([past_covariates, future_covariates], ["past", "future"]):
- covs_name = f"{name}_covariates"
+ for covs, covs_name in zip(
+ [past_covariates, future_covariates],
+ ["past_covariates", "future_covariates"],
+ ):
if getattr(self, f"supports_{covs_name}"):
- kwargs_[covs_name] = covs
+ add_kwargs[covs_name] = covs
elif covs is not None:
raise_log(
ValueError(f"Model cannot be fit/trained with `{covs_name}`."),
logger,
)
- self.fit(series, **kwargs_)
+ self.fit(series=series, **add_kwargs, **kwargs)
def _predict_wrapper(
self,
n: int,
+ series: Optional[TimeSeries] = None,
+ past_covariates: Optional[TimeSeries] = None,
+ future_covariates: Optional[TimeSeries] = None,
+ predict_likelihood_parameters: bool = False,
**kwargs,
) -> Union[TimeSeries, Sequence[TimeSeries]]:
- supported_params = set(inspect.signature(self.predict).parameters)
-
- # if predict() accepts covariates, the model might not support them at inference
- for covs_name in ["past_covariates", "future_covariates"]:
- if covs_name in kwargs and not getattr(self, f"supports_{covs_name}"):
- if kwargs[covs_name] is None:
- supported_params = supported_params - {covs_name}
- else:
- raise_log(
- ValueError(
- f"Model prediction does not support `{covs_name}`, either because it "
- f"does not support `{covs_name}` in general, or because it was fit/trained "
- f"without using `{covs_name}`."
- ),
- logger,
- )
+ add_kwargs = {}
+ # not all models supports input `series` at inference
+ if self.supports_transferrable_series_prediction:
+ add_kwargs["series"] = series
+
+ # even if predict() accepts covariates, the model might not support them at inference
+ for covs, name in zip(
+ [past_covariates, future_covariates],
+ ["past_covariates", "future_covariates"],
+ ):
+ if getattr(self, f"supports_{name}"):
+ add_kwargs[name] = covs
+ elif covs is not None:
+ raise_log(
+ ValueError(
+ f"Model prediction does not support `{name}`, either because it "
+ f"does not support `{name}` in general, or because it was fit/trained "
+ f"without using `{name}`."
+ ),
+ logger,
+ )
- kwargs_ = {k: v for k, v in kwargs.items() if k in supported_params}
- return self.predict(n, **kwargs_)
+ if self.supports_likelihood_parameter_prediction:
+ add_kwargs["predict_likelihood_parameters"] = predict_likelihood_parameters
+ return self.predict(n=n, **add_kwargs, **kwargs)
@property
def min_train_series_length(self) -> int:
@@ -2266,6 +2294,13 @@ Source code for darts.models.forecasting.forecasting_model
# that use an input to predict an output.
return -self.min_train_series_length, -1, None, None, None, None
+ @property
+ def supports_transferrable_series_prediction(self) -> bool:
+ """
+ Whether the model supports prediction for any input `series`.
+ """
+ return False
+
class GlobalForecastingModel(ForecastingModel, ABC):
"""The base class for "global" forecasting models, handling several time series and optional covariates.
@@ -2478,6 +2513,13 @@ Source code for darts.models.forecasting.forecasting_model
def supports_optimized_historical_forecasts(self) -> bool:
"""
Whether the model supports optimized historical forecasts
+ """
+ return True
+
+ @property
+ def supports_transferrable_series_prediction(self) -> bool:
+ """
+ Whether the model supports prediction for any input `series`.
"""
return True
@@ -2587,6 +2629,8 @@ Source code for darts.models.forecasting.forecasting_model
n: int,
future_covariates: Optional[TimeSeries] = None,
num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
**kwargs,
) -> TimeSeries:
"""Forecasts values for `n` time steps after the end of the training series.
@@ -2604,6 +2648,10 @@ Source code for darts.models.forecasting.forecasting_model
num_samples
Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+ verbose
+ Optionally, set the prediction verbosity. Not effective for all models.
+ show_warnings
+ Optionally, control whether warnings are shown. Not effective for all models.
Returns
-------
@@ -2747,6 +2795,8 @@ Source code for darts.models.forecasting.forecasting_model
series: Optional[TimeSeries] = None,
future_covariates: Optional[TimeSeries] = None,
num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
**kwargs,
) -> TimeSeries:
"""If the `series` parameter is not set, forecasts values for `n` time steps after the end of the training
@@ -2772,6 +2822,10 @@ Source code for darts.models.forecasting.forecasting_model
num_samples
Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+ verbose
+ Optionally, set the prediction verbosity. Not effective for all models.
+ show_warnings
+ Optionally, control whether warnings are shown. Not effective for all models.
Returns
-------
@@ -2866,6 +2920,13 @@ Source code for darts.models.forecasting.forecasting_model
"""
pass
+ @property
+ def supports_transferrable_series_prediction(self) -> bool:
+ """
+ Whether the model supports prediction for any input `series`.
+ """
+ return True
+
@property
def _supports_non_retrainable_historical_forecasts(self) -> bool:
return True
diff --git a/_modules/darts/models/forecasting/kalman_forecaster.html b/_modules/darts/models/forecasting/kalman_forecaster.html
index e4ac4c5247..5dfc0157f6 100644
--- a/_modules/darts/models/forecasting/kalman_forecaster.html
+++ b/_modules/darts/models/forecasting/kalman_forecaster.html
@@ -291,6 +291,8 @@ Source code for darts.models.forecasting.kalman_forecaster
series: Optional[TimeSeries] = None,
future_covariates: Optional[TimeSeries] = None,
num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
**kwargs,
) -> TimeSeries:
# we override `predict()` to pass a non-None `series`, so that historic_future_covariates
diff --git a/_modules/darts/models/forecasting/nbeats.html b/_modules/darts/models/forecasting/nbeats.html
index 92242a18e9..b7ae872e8f 100644
--- a/_modules/darts/models/forecasting/nbeats.html
+++ b/_modules/darts/models/forecasting/nbeats.html
@@ -820,7 +820,7 @@ Source code for darts.models.forecasting.nbeats
<
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -865,7 +865,6 @@ Source code for darts.models.forecasting.nbeats
<
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
diff --git a/_modules/darts/models/forecasting/nhits.html b/_modules/darts/models/forecasting/nhits.html
index 1254519e79..1d61656453 100644
--- a/_modules/darts/models/forecasting/nhits.html
+++ b/_modules/darts/models/forecasting/nhits.html
@@ -756,7 +756,7 @@ Source code for darts.models.forecasting.nhits
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -801,7 +801,6 @@
Source code for darts.models.forecasting.nhits
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
diff --git a/_modules/darts/models/forecasting/nlinear.html b/_modules/darts/models/forecasting/nlinear.html
index b2af9f47d0..e58f868276 100644
--- a/_modules/darts/models/forecasting/nlinear.html
+++ b/_modules/darts/models/forecasting/nlinear.html
@@ -449,7 +449,7 @@
Source code for darts.models.forecasting.nlinear
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
diff --git a/_modules/darts/models/forecasting/pl_forecasting_module.html b/_modules/darts/models/forecasting/pl_forecasting_module.html
index 4acd5c184c..4fe26f9b3b 100644
--- a/_modules/darts/models/forecasting/pl_forecasting_module.html
+++ b/_modules/darts/models/forecasting/pl_forecasting_module.html
@@ -170,6 +170,7 @@ Source code for darts.models.forecasting.pl_forecasting_module
"""
from abc import ABC, abstractmethod
+from functools import wraps
from typing import Any, Dict, Optional, Sequence, Tuple, Union
import pytorch_lightning as pl
@@ -209,6 +210,7 @@ Source code for darts.models.forecasting.pl_forecasting_module
normalizes batch input target features, and inverse transform the forward output back to the original scale
"""
+ @wraps(forward)
def forward_wrapper(self, *args, **kwargs):
if not self.use_reversible_instance_norm:
return forward(self, *args, **kwargs)
diff --git a/_modules/darts/models/forecasting/regression_model.html b/_modules/darts/models/forecasting/regression_model.html
index a8aaaabafe..c6bfd095b2 100644
--- a/_modules/darts/models/forecasting/regression_model.html
+++ b/_modules/darts/models/forecasting/regression_model.html
@@ -939,6 +939,8 @@ Source code for darts.models.forecasting.regression_model
**kwargs : dict, optional
Additional keyword arguments passed to the `predict` method of the model. Only works with
univariate target series.
+ show_warnings
+ Optionally, control whether warnings are shown. Not effective for all models.
"""
if series is None:
# then there must be a single TS, and that was saved in super().fit as self.training_series
diff --git a/_modules/darts/models/forecasting/rnn_model.html b/_modules/darts/models/forecasting/rnn_model.html
index 7ebf23f407..5e138ac751 100644
--- a/_modules/darts/models/forecasting/rnn_model.html
+++ b/_modules/darts/models/forecasting/rnn_model.html
@@ -170,12 +170,14 @@ Source code for darts.models.forecasting.rnn_model
-------------------------
"""
-from typing import Optional, Sequence, Tuple, Union
+import inspect
+from abc import ABC, abstractmethod
+from typing import Optional, Sequence, Tuple, Type, Union
import torch
import torch.nn as nn
-from darts.logging import get_logger, raise_if_not
+from darts.logging import get_logger, raise_if_not, raise_log
from darts.models.forecasting.pl_forecasting_module import (
PLDualCovariatesModule,
io_processor,
@@ -187,11 +189,9 @@ Source code for darts.models.forecasting.rnn_model
logger = get_logger(__name__)
-# TODO add batch norm
-class _RNNModule(PLDualCovariatesModule):
+[docs]class CustomRNNModule(PLDualCovariatesModule, ABC):
def __init__(
self,
- name: str,
input_size: int,
hidden_dim: int,
num_layers: int,
@@ -200,18 +200,22 @@ Source code for darts.models.forecasting.rnn_model
dropout: float = 0.0,
**kwargs,
):
+ """This class allows to create custom RNN modules that can later be used with Darts' :class:`RNNModel`.
+ It adds the backbone that is required to be used with Darts' :class:`TorchForecastingModel` and
+ :class:`RNNModel`.
- """PyTorch module implementing an RNN to be used in `RNNModel`.
+ To create a new module, subclass from :class:`CustomRNNModule` and:
- PyTorch module implementing a simple RNN with the specified `name` type.
- This module combines a PyTorch RNN module, together with one fully connected layer which
- maps the hidden state of the RNN at each step to the output value of the model at that
- time step.
+ * Define the architecture in the module constructor (`__init__()`)
+
+ * Add the `forward()` method and define the logic of your module's forward pass
+
+ * Use the custom module class when creating a new :class:`RNNModel` with parameter `model`.
+
+ You can use `darts.models.forecasting.rnn_model._RNNModule` as an example.
Parameters
----------
- name
- The name of the specific PyTorch RNN module ("RNN", "GRU" or "LSTM").
input_size
The dimensionality of the input time series.
hidden_dim
@@ -226,55 +230,43 @@ Source code for darts.models.forecasting.rnn_model
The fraction of neurons that are dropped in all-but-last RNN layers.
**kwargs
all parameters required for :class:`darts.model.forecasting_models.PLForecastingModule` base class.
-
- Inputs
- ------
- x of shape `(batch_size, input_length, input_size)`
- Tensor containing the features of the input sequence. The `input_length` is not fixed.
-
- Outputs
- -------
- y of shape `(batch_size, output_chunk_length, target_size, nr_params)`
- Tensor containing the outputs of the RNN at every time step of the input sequence.
- During training the whole tensor is used as output, whereas during prediction we only use y[:, -1, :].
- However, this module always returns the whole Tensor.
"""
-
# RNNModule doesn't really need input and output_chunk_length for PLModule
super().__init__(**kwargs)
# Defining parameters
+ self.input_size = input_size
+ self.hidden_dim = hidden_dim
+ self.num_layers = num_layers
self.target_size = target_size
self.nr_params = nr_params
- self.name = name
-
- # Defining the RNN module
- self.rnn = getattr(nn, name)(
- input_size, hidden_dim, num_layers, batch_first=True, dropout=dropout
- )
-
- # The RNN module needs a linear layer V that transforms hidden states into outputs, individually
- self.V = nn.Linear(hidden_dim, target_size * nr_params)
+ self.dropout = dropout
- @io_processor
+[docs] @io_processor
+ @abstractmethod
def forward(
self, x_in: Tuple, h: Optional[torch.Tensor] = None
) -> Tuple[torch.Tensor, torch.Tensor]:
- x, _ = x_in
- # data is of size (batch_size, input_length, input_size)
- batch_size = x.shape[0]
-
- # out is of size (batch_size, input_length, hidden_dim)
- out, last_hidden_state = self.rnn(x) if h is None else self.rnn(x, h)
-
- # Here, we apply the V matrix to every hidden state to produce the outputs
- predictions = self.V(out)
-
- # predictions is of size (batch_size, input_length, target_size)
- predictions = predictions.view(batch_size, -1, self.target_size, self.nr_params)
+ """RNN Module forward.
- # returns outputs for all inputs, only the last one is needed for prediction time
- return predictions, last_hidden_state
+ Parameters
+ ----------
+ x_in
+ Tuple of Tensors containing the features of the input sequence. The tuple has elements (past target,
+ historic future covariates, future covariates, static covariates). The shape of the past target is
+ `(batch_size, input_length, input_size)`.
+ h
+ Optionally, the hidden state.
+
+ Returns
+ -------
+ Tuple[torch.Tensor, torch.Tensor]
+ Tuple of Tensors with elements (RNN output, hidden state). The RNN output Tensor has shape
+ `(batch_size, output_chunk_length, target_size, nr_params)`. It contains the outputs at every
+ time step of the input sequence. During training the whole tensor is used as output, whereas during
+ prediction we only use y[:, -1, :]. However, this module always returns the whole Tensor.
+ """
+ pass
def _produce_train_output(self, input_batch: Tuple) -> torch.Tensor:
(
@@ -368,14 +360,85 @@ Source code for darts.models.forecasting.rnn_model
# bring predictions into desired format and drop unnecessary values
batch_prediction = torch.cat(batch_prediction, dim=1)
batch_prediction = batch_prediction[:, :n, :]
- return batch_prediction
+ return batch_prediction
+
+
+# TODO add batch norm
+class _RNNModule(CustomRNNModule):
+ def __init__(
+ self,
+ name: str,
+ **kwargs,
+ ):
+ """PyTorch module implementing an RNN to be used in `RNNModel`.
+
+ PyTorch module implementing a simple RNN with the specified `name` type.
+ This module combines a PyTorch RNN module, together with one fully connected layer which
+ maps the hidden state of the RNN at each step to the output value of the model at that
+ time step.
+
+ Parameters
+ ----------
+ name
+ The name of the specific PyTorch RNN module ("RNN", "GRU" or "LSTM").
+ **kwargs
+ all parameters required for the :class:`darts.model.forecasting_models.CustomRNNModule` base class.
+
+ Inputs
+ ------
+ x of shape `(batch_size, input_length, input_size)`
+ Tensor containing the features of the input sequence. The `input_length` is not fixed.
+
+ Outputs
+ -------
+ y of shape `(batch_size, output_chunk_length, target_size, nr_params)`
+ Tensor containing the outputs of the RNN at every time step of the input sequence.
+ During training the whole tensor is used as output, whereas during prediction we only use y[:, -1, :].
+ However, this module always returns the whole Tensor.
+ """
+
+ # RNNModule doesn't really need input and output_chunk_length for PLModule
+ super().__init__(**kwargs)
+ self.name = name
+
+ # Defining the RNN module
+ self.rnn = getattr(nn, name)(
+ self.input_size,
+ self.hidden_dim,
+ self.num_layers,
+ batch_first=True,
+ dropout=self.dropout,
+ )
+
+ # The RNN module needs a linear layer V that transforms hidden states into outputs, individually
+ self.V = nn.Linear(self.hidden_dim, self.target_size * self.nr_params)
+
+ @io_processor
+ def forward(
+ self, x_in: Tuple, h: Optional[torch.Tensor] = None
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
+ x, _ = x_in
+ # data is of size (batch_size, input_length, input_size)
+ batch_size = x.shape[0]
+
+ # out is of size (batch_size, input_length, hidden_dim)
+ out, last_hidden_state = self.rnn(x) if h is None else self.rnn(x, h)
+
+ # Here, we apply the V matrix to every hidden state to produce the outputs
+ predictions = self.V(out)
+
+ # predictions is of size (batch_size, input_length, target_size)
+ predictions = predictions.view(batch_size, -1, self.target_size, self.nr_params)
+
+ # returns outputs for all inputs, only the last one is needed for prediction time
+ return predictions, last_hidden_state
[docs]class RNNModel(DualCovariatesTorchModel):
def __init__(
self,
input_chunk_length: int,
- model: Union[str, nn.Module] = "RNN",
+ model: Union[str, Type[CustomRNNModule]] = "RNN",
hidden_dim: int = 25,
n_rnn_layers: int = 1,
dropout: float = 0.0,
@@ -413,9 +476,8 @@ Source code for darts.models.forecasting.rnn_model
input_chunk_length
Number of past time steps that are fed to the forecasting module at prediction time.
model
- Either a string specifying the RNN module type ("RNN", "LSTM" or "GRU"),
- or a PyTorch module with the same specifications as
- `darts.models.rnn_model._RNNModule`.
+ Either a string specifying the RNN module type ("RNN", "LSTM" or "GRU"), or a subclass of
+ :class:`CustomRNNModule` (the class itself, not an object of the class) with a custom logic.
hidden_dim
Size for feature maps for each hidden RNN layer (:math:`h_n`).
n_rnn_layers
@@ -475,7 +537,7 @@ Source code for darts.models.forecasting.rnn_model
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -520,7 +582,6 @@ Source code for darts.models.forecasting.rnn_model
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
@@ -609,14 +670,14 @@ Source code for darts.models.forecasting.rnn_model
# check we got right model type specified:
if model not in ["RNN", "LSTM", "GRU"]:
- raise_if_not(
- isinstance(model, nn.Module),
- '{} is not a valid RNN model.\n Please specify "RNN", "LSTM", '
- '"GRU", or give your own PyTorch nn.Module'.format(
- model.__class__.__name__
- ),
- logger,
- )
+ if not inspect.isclass(model) or not issubclass(model, CustomRNNModule):
+ raise_log(
+ ValueError(
+ "`model` is not a valid RNN model. Please specify 'RNN', 'LSTM', 'GRU', or give a subclass "
+ "(not an instance) of darts.models.forecasting.rnn_model.CustomRNNModule."
+ ),
+ logger=logger,
+ )
self.rnn_type_or_module = model
self.dropout = dropout
@@ -633,29 +694,22 @@ Source code for darts.models.forecasting.rnn_model
output_dim = train_sample[-1].shape[1]
nr_params = 1 if self.likelihood is None else self.likelihood.num_parameters
- if self.rnn_type_or_module in ["RNN", "LSTM", "GRU"]:
- model = _RNNModule(
- name=self.rnn_type_or_module,
- input_size=input_dim,
- target_size=output_dim,
- nr_params=nr_params,
- hidden_dim=self.hidden_dim,
- dropout=self.dropout,
- num_layers=self.n_rnn_layers,
- **self.pl_module_params,
- )
+ kwargs = {}
+ if isinstance(self.rnn_type_or_module, str):
+ model_cls = _RNNModule
+ kwargs["name"] = self.rnn_type_or_module
else:
- model = self.rnn_type_or_module(
- name="custom_module",
- input_size=input_dim,
- target_size=output_dim,
- nr_params=nr_params,
- hidden_dim=self.hidden_dim,
- dropout=self.dropout,
- num_layers=self.n_rnn_layers,
- **self.pl_module_params,
- )
- return model
+ model_cls = self.rnn_type_or_module
+ return model_cls(
+ input_size=input_dim,
+ target_size=output_dim,
+ nr_params=nr_params,
+ hidden_dim=self.hidden_dim,
+ dropout=self.dropout,
+ num_layers=self.n_rnn_layers,
+ **self.pl_module_params,
+ **kwargs,
+ )
def _build_train_dataset(
self,
diff --git a/_modules/darts/models/forecasting/sf_auto_ces.html b/_modules/darts/models/forecasting/sf_auto_ces.html
index 04f9c8ff65..c0d016b0bc 100644
--- a/_modules/darts/models/forecasting/sf_auto_ces.html
+++ b/_modules/darts/models/forecasting/sf_auto_ces.html
@@ -229,6 +229,7 @@ Source code for darts.models.forecasting.sf_auto_ces
n: int,
num_samples: int = 1,
verbose: bool = False,
+ show_warnings: bool = True,
):
super().predict(n, num_samples)
forecast_dict = self.model.predict(
diff --git a/_modules/darts/models/forecasting/sf_auto_theta.html b/_modules/darts/models/forecasting/sf_auto_theta.html
index c6563496b9..a5828d2684 100644
--- a/_modules/darts/models/forecasting/sf_auto_theta.html
+++ b/_modules/darts/models/forecasting/sf_auto_theta.html
@@ -237,6 +237,7 @@ Source code for darts.models.forecasting.sf_auto_theta
n: int,
num_samples: int = 1,
verbose: bool = False,
+ show_warnings: bool = True,
):
super().predict(n, num_samples)
forecast_dict = self.model.predict(
diff --git a/_modules/darts/models/forecasting/tbats_model.html b/_modules/darts/models/forecasting/tbats_model.html
index 075ed79028..fce6868caf 100644
--- a/_modules/darts/models/forecasting/tbats_model.html
+++ b/_modules/darts/models/forecasting/tbats_model.html
@@ -397,7 +397,13 @@ Source code for darts.models.forecasting.tbats_model
return self
- def predict(self, n, num_samples=1, verbose: bool = False):
+ def predict(
+ self,
+ n: int,
+ num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
+ ):
super().predict(n, num_samples)
yhat = self.model.forecast(steps=n)
diff --git a/_modules/darts/models/forecasting/tcn_model.html b/_modules/darts/models/forecasting/tcn_model.html
index ef48983596..2eb63f609a 100644
--- a/_modules/darts/models/forecasting/tcn_model.html
+++ b/_modules/darts/models/forecasting/tcn_model.html
@@ -521,7 +521,7 @@ Source code for darts.models.forecasting.tcn_model
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -567,7 +567,6 @@ Source code for darts.models.forecasting.tcn_model
dict:rgs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
diff --git a/_modules/darts/models/forecasting/tft_model.html b/_modules/darts/models/forecasting/tft_model.html
index 3bd8684e6a..c271c9a467 100644
--- a/_modules/darts/models/forecasting/tft_model.html
+++ b/_modules/darts/models/forecasting/tft_model.html
@@ -971,7 +971,7 @@ Source code for darts.models.forecasting.tft_model
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -1016,7 +1016,6 @@ Source code for darts.models.forecasting.tft_model
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
@@ -1357,17 +1356,7 @@ Source code for darts.models.forecasting.tft_model
@property
def supports_static_covariates(self) -> bool:
- return True
-
-[docs] def predict(self, n, *args, **kwargs):
- # since we have future covariates, the inference dataset for future input must be at least of length
- # `output_chunk_length`. If not, we would have to step back which causes past input to be shorter than
- # `input_chunk_length`.
-
- if n >= self.output_chunk_length:
- return super().predict(n, *args, **kwargs)
- else:
- return super().predict(self.output_chunk_length, *args, **kwargs)[:n]
+ return True
diff --git a/_modules/darts/models/forecasting/theta.html b/_modules/darts/models/forecasting/theta.html
index 00110ee9b9..8d07f8ce23 100644
--- a/_modules/darts/models/forecasting/theta.html
+++ b/_modules/darts/models/forecasting/theta.html
@@ -320,7 +320,11 @@ Source code for darts.models.forecasting.theta
return self
[docs] def predict(
- self, n: int, num_samples: int = 1, verbose: bool = False
+ self,
+ n: int,
+ num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
) -> "TimeSeries":
super().predict(n, num_samples)
@@ -567,7 +571,11 @@ Source code for darts.models.forecasting.theta
return self
[docs] def predict(
- self, n: int, num_samples: int = 1, verbose: bool = False
+ self,
+ n: int,
+ num_samples: int = 1,
+ verbose: bool = False,
+ show_warnings: bool = True,
) -> "TimeSeries":
super().predict(n, num_samples)
diff --git a/_modules/darts/models/forecasting/tide_model.html b/_modules/darts/models/forecasting/tide_model.html
index e8535ff99a..ff0b713f96 100644
--- a/_modules/darts/models/forecasting/tide_model.html
+++ b/_modules/darts/models/forecasting/tide_model.html
@@ -645,7 +645,7 @@ Source code for darts.models.forecasting.tide_model
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -690,7 +690,6 @@ Source code for darts.models.forecasting.tide_model
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
@@ -863,17 +862,7 @@ Source code for darts.models.forecasting.tide_model
@property
def supports_multivariate(self) -> bool:
- return True
-
-[docs] def predict(self, n, *args, **kwargs):
- # since we have future covariates, the inference dataset for future input must be at least of length
- # `output_chunk_length`. If not, we would have to step back which causes past input to be shorter than
- # `input_chunk_length`.
-
- if n >= self.output_chunk_length:
- return super().predict(n, *args, **kwargs)
- else:
- return super().predict(self.output_chunk_length, *args, **kwargs)[:n]
+ return True
diff --git a/_modules/darts/models/forecasting/transformer_model.html b/_modules/darts/models/forecasting/transformer_model.html
index 5a362907b5..541fe66a21 100644
--- a/_modules/darts/models/forecasting/transformer_model.html
+++ b/_modules/darts/models/forecasting/transformer_model.html
@@ -609,7 +609,7 @@ Source code for darts.models.forecasting.transformer_model
If set to ``True``, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: ``False``.
save_checkpoints
- Whether or not to automatically save the untrained model and checkpoints from training.
+ Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call :func:`MyModelClass.load_from_checkpoint()`, where
:class:`MyModelClass` is the :class:`TorchForecastingModel` class that was used (such as :class:`TFTModel`,
:class:`NBEATSModel`, etc.). If set to ``False``, the model can still be manually saved using
@@ -654,7 +654,6 @@ Source code for darts.models.forecasting.transformer_model
"devices", and "auto_select_gpus"``. Some examples for setting the devices inside the ``pl_trainer_kwargs``
dict:
-
- ``{"accelerator": "cpu"}`` for CPU,
- ``{"accelerator": "gpu", "devices": [i]}`` to use only GPU ``i`` (``i`` must be an integer),
- ``{"accelerator": "gpu", "devices": -1, "auto_select_gpus": True}`` to use all available GPUS.
diff --git a/_modules/darts/timeseries.html b/_modules/darts/timeseries.html
index 63fd083a55..1f506c05f7 100644
--- a/_modules/darts/timeseries.html
+++ b/_modules/darts/timeseries.html
@@ -1639,10 +1639,16 @@ Source code for darts.timeseries
self._assert_deterministic()
if copy:
return pd.Series(
- self._xa[:, 0, 0].values.copy(), index=self._time_index.copy()
+ self._xa[:, 0, 0].values.copy(),
+ index=self._time_index.copy(),
+ name=self.components[0],
)
else:
- return pd.Series(self._xa[:, 0, 0].values, index=self._time_index)
+ return pd.Series(
+ self._xa[:, 0, 0].values,
+ index=self._time_index,
+ name=self.components[0],
+ )
[docs] def pd_dataframe(self, copy=True, suppress_warnings=False) -> pd.DataFrame:
"""
diff --git a/_modules/darts/utils/data/shifted_dataset.html b/_modules/darts/utils/data/shifted_dataset.html
index 25321be3cc..040d77f52b 100644
--- a/_modules/darts/utils/data/shifted_dataset.html
+++ b/_modules/darts/utils/data/shifted_dataset.html
@@ -688,7 +688,7 @@ Source code for darts.utils.data.shifted_dataset
shift
The number of time steps by which to shift the output chunks relative to the input chunks.
shift_covariates
- Whether or not to shift the covariates forward the same way as the target.
+ Whether to shift the covariates forward the same way as the target.
FutureCovariatesModel's require this set to True, while PastCovariatesModel's require this set to False.
max_samples_per_ts
This is an upper bound on the number of (input, output, input_covariates) tuples that can be produced
diff --git a/_sources/README.rst.txt b/_sources/README.rst.txt
index bb5876a2fc..e55638cbd6 100644
--- a/_sources/README.rst.txt
+++ b/_sources/README.rst.txt
@@ -30,7 +30,7 @@ Time Series Made Easy in Python
.. image:: https://img.shields.io/docker/v/unit8/darts?label=docker&sort=date
- :target: https://img.shields.io/docker/v/unit8/darts?label=docker&sort=date
+ :target: https://hub.docker.com/r/unit8/darts
:alt: Docker Image Version (latest by date)
@@ -326,25 +326,25 @@ on bringing more models and features.
-
* - `NaiveMean `_
-
- - 🟩 🟥
+ - 🟩 🟩
- 🟥 🟥 🟥
- 🟥 🟥
- 🟥
* - `NaiveSeasonal `_
-
- - 🟩 🟥
+ - 🟩 🟩
- 🟥 🟥 🟥
- 🟥 🟥
- 🟥
* - `NaiveDrift `_
-
- - 🟩 🟥
+ - 🟩 🟩
- 🟥 🟥 🟥
- 🟥 🟥
- 🟥
* - `NaiveMovingAverage `_
-
- - 🟩 🟥
+ - 🟩 🟩
- 🟥 🟥 🟥
- 🟥 🟥
- 🟥
@@ -364,7 +364,7 @@ on bringing more models and features.
-
- 🟥 🟩
- 🟥 🟩 🟥
- - 🟥 🟥
+ - 🟩 🟥
- 🟥
* - `AutoARIMA `_
-
@@ -414,7 +414,7 @@ on bringing more models and features.
- 🟥 🟥 🟥
- 🟩 🟥
- 🟥
- * - `Prophet `_ (see `install notes `_\ )
+ * - `Prophet `_
- `Prophet repo `_
- 🟩 🟥
- 🟥 🟩 🟥
@@ -462,7 +462,7 @@ on bringing more models and features.
- 🟩 🟩 🟩
- 🟥 🟥
- 🟩
- * - `LightGBMModel `_\ ,
+ * - `LightGBMModel `_
-
- 🟩 🟩
- 🟩 🟩 🟩
diff --git a/_sources/examples/01-multi-time-series-and-covariates.ipynb.txt b/_sources/examples/01-multi-time-series-and-covariates.ipynb.txt
index f3dea1d1bb..8744bb69a7 100644
--- a/_sources/examples/01-multi-time-series-and-covariates.ipynb.txt
+++ b/_sources/examples/01-multi-time-series-and-covariates.ipynb.txt
@@ -167,32 +167,31 @@
"metadata": {},
"source": [
"## Global Forecasting Models\n",
- "Darts contains many forecasting models, but not all of them can be trained on several time series. The models that support training on multiple series are called *global* models. At the time of writing, there are 5 global models:\n",
+ "Darts contains many forecasting models, but not all of them can be trained on several time series. The models that support training on multiple series are called *global* models. An exhaustive list of the global models can be found [here](https://unit8co.github.io/darts/README.html#forecasting-models) (bottom of the table) with for example:\n",
"\n",
+ "* LinearRegressionModel\n",
"* BlockRNNModel\n",
- "* RNNModel\n",
- "* Temporal Convolutional Networks (TCNs)\n",
- "* N-Beats\n",
- "* Transformer model\n",
+ "* Temporal Convolutional Networks (TCNModel)\n",
+ "* N-Beats (NBEATSModel)\n",
+ "* TiDEModel\n",
"\n",
"In the following, we will distinguish two sorts of time series:\n",
"\n",
"* The **target time series** is the time series we are interested to forecast (given its history)\n",
"* A **covariate time series** is a time series which may help in the forecasting of the target series, but that we are not interested in forecasting. It's sometimes also called *external data*.\n",
"\n",
+ "**Note**: Static covariates are invariant in time and correspond to additional information associated with the components of the **target time series**. Detailed information about this kind of covariate can be found in the [static covariates notebook](https://unit8co.github.io/darts/examples/15-static-covariates.html).\n",
+ "\n",
"We further differentiate covariates series, depending on whether they can be known in advance or not:\n",
"\n",
"* **Past Covariates** denote time series whose past values are known at prediction time. These are usually things that have to be measured or observed.\n",
"* **Future Covariates** denote time series whose future values are already known at prediction time for the span of the forecast horizon. These can for instance represent known future holidays, or weather forecasts. \n",
"\n",
- "Some models use only past covariates, others use only future covariates, and some models might use both. We will dive deeper in this topic in some other notebook, but for now it is enough to know this:\n",
- "\n",
- "* `BlockRNNModel`, `TCNModel`, `NBEATSModel` and `TransformerModel` all use `past_covariates`.\n",
- "* `RNNModel` uses `future_covariates`.\n",
+ "Some models use only past covariates, others use only future covariates, and some models might use both. We will dive deeper in this topic in some other notebook, but this [table](https://unit8co.github.io/darts/README.html#forecasting-models) details the covariates supported by each model.\n",
"\n",
- "All of the global models listed above support training on multiple series. In addition, they also all support *multivariate series*. This means that they can seamlessly be used with time series of more than one dimension; the target series can contain one (as is often the case) or several dimensions. A time series with several dimensions is really just a regular time series where the values at each time stamps are vectors instead of scalars.\n",
+ "All of the global models listed above support training on multiple series. In addition, they also all support *multivariate series*. This means that they can seamlessly be used with time series of more than one dimension; the target series can contain one (as is often the case) or several dimensions. A time series with several dimensions is really just a regular time series where the values at each time stamps are vectors instead of scalars.\n",
"\n",
- "As an example, the 4 models supporting `past_covariates` follow a \"block\" architecture. They contain a neural network that takes chunks of time series in input, and outputs chunks of (predicted) future time series values. The input dimensionality is the number of dimensions (components) of the target series, plus the number of components of all the covariates - stacked together. The output dimensionality is simply the number of dimensions of the target series:\n",
+ "As an example, the BlockRNNModel, N-Beats, TCN and Transformer models follow a \"block\" architecture. They contain a neural network that takes chunks of time series in input, and outputs chunks of (predicted) future time series values. The input dimensionality is the number of dimensions (components) of the target series, plus the number of components of all the covariates - stacked together. The output dimensionality is simply the number of dimensions of the target series:\n",
"![](static/images/global_io_covs.png)\n",
"\n",
"The `RNNModel` works differently, in a recurrent fashion (which is also why they support future covariates).\n",
diff --git a/_sources/examples/20-RegressionModel-examples.ipynb.txt b/_sources/examples/20-RegressionModel-examples.ipynb.txt
index a63b2514de..30a84de818 100644
--- a/_sources/examples/20-RegressionModel-examples.ipynb.txt
+++ b/_sources/examples/20-RegressionModel-examples.ipynb.txt
@@ -502,7 +502,7 @@
"This key parameter sets the *number of time steps that can be predicted at once by the internal regression model*.\n",
"\n",
"It is not the same as forecast horizon `n` from `predict()` which is the **desired** the number of generated prediction points, that is achieved either with:\n",
- "- a single shot forecast (if `output_chunk_length <= n`), or\n",
+ "- a single shot forecast (if `n <= output_chunk_length`), or\n",
"- an auto-regressive forecast, consuming its own forecast (and future values of covariates) as input for additional predictions (otherwise)\n",
"\n",
"For example, if we want our model to forecast the next 24 hours of electricity consumption based on the last day of consumption, setting `output_chunk_length=24` ensures that the model will not consume its forecasts or future values of our covariates to predict the entire day."
diff --git a/_sources/generated_api/darts.ad.aggregators.aggregators.rst.txt b/_sources/generated_api/darts.ad.aggregators.aggregators.rst.txt
index 96c1d96410..864d4ae2aa 100644
--- a/_sources/generated_api/darts.ad.aggregators.aggregators.rst.txt
+++ b/_sources/generated_api/darts.ad.aggregators.aggregators.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.aggregators.aggregators
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.aggregators.and_aggregator.rst.txt b/_sources/generated_api/darts.ad.aggregators.and_aggregator.rst.txt
index bb161f0ce8..b2a45d4a50 100644
--- a/_sources/generated_api/darts.ad.aggregators.and_aggregator.rst.txt
+++ b/_sources/generated_api/darts.ad.aggregators.and_aggregator.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.aggregators.and_aggregator
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.aggregators.ensemble_sklearn_aggregator.rst.txt b/_sources/generated_api/darts.ad.aggregators.ensemble_sklearn_aggregator.rst.txt
index dd95b17b96..ad69483bdb 100644
--- a/_sources/generated_api/darts.ad.aggregators.ensemble_sklearn_aggregator.rst.txt
+++ b/_sources/generated_api/darts.ad.aggregators.ensemble_sklearn_aggregator.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.aggregators.ensemble_sklearn_aggregator
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.aggregators.or_aggregator.rst.txt b/_sources/generated_api/darts.ad.aggregators.or_aggregator.rst.txt
index 261df99928..ebdc784138 100644
--- a/_sources/generated_api/darts.ad.aggregators.or_aggregator.rst.txt
+++ b/_sources/generated_api/darts.ad.aggregators.or_aggregator.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.aggregators.or_aggregator
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.anomaly_model.anomaly_model.rst.txt b/_sources/generated_api/darts.ad.anomaly_model.anomaly_model.rst.txt
index 5fd4e54b7a..7c3e739cab 100644
--- a/_sources/generated_api/darts.ad.anomaly_model.anomaly_model.rst.txt
+++ b/_sources/generated_api/darts.ad.anomaly_model.anomaly_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.anomaly_model.anomaly_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.anomaly_model.filtering_am.rst.txt b/_sources/generated_api/darts.ad.anomaly_model.filtering_am.rst.txt
index 3bdffe9fe4..a37fa89c67 100644
--- a/_sources/generated_api/darts.ad.anomaly_model.filtering_am.rst.txt
+++ b/_sources/generated_api/darts.ad.anomaly_model.filtering_am.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.anomaly_model.filtering_am
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.anomaly_model.forecasting_am.rst.txt b/_sources/generated_api/darts.ad.anomaly_model.forecasting_am.rst.txt
index be7d5dce02..7a0f44e83e 100644
--- a/_sources/generated_api/darts.ad.anomaly_model.forecasting_am.rst.txt
+++ b/_sources/generated_api/darts.ad.anomaly_model.forecasting_am.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.anomaly_model.forecasting_am
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.detectors.detectors.rst.txt b/_sources/generated_api/darts.ad.detectors.detectors.rst.txt
index b0fa330d00..9895c1d298 100644
--- a/_sources/generated_api/darts.ad.detectors.detectors.rst.txt
+++ b/_sources/generated_api/darts.ad.detectors.detectors.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.detectors.detectors
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.detectors.quantile_detector.rst.txt b/_sources/generated_api/darts.ad.detectors.quantile_detector.rst.txt
index 6c1eac1493..914b931f46 100644
--- a/_sources/generated_api/darts.ad.detectors.quantile_detector.rst.txt
+++ b/_sources/generated_api/darts.ad.detectors.quantile_detector.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.detectors.quantile_detector
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.detectors.threshold_detector.rst.txt b/_sources/generated_api/darts.ad.detectors.threshold_detector.rst.txt
index 1797d76870..0e5e18b94e 100644
--- a/_sources/generated_api/darts.ad.detectors.threshold_detector.rst.txt
+++ b/_sources/generated_api/darts.ad.detectors.threshold_detector.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.detectors.threshold_detector
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.difference_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.difference_scorer.rst.txt
index 4047248c1d..a4303a7956 100644
--- a/_sources/generated_api/darts.ad.scorers.difference_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.difference_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.difference_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.kmeans_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.kmeans_scorer.rst.txt
index 883e81b471..cdb9645817 100644
--- a/_sources/generated_api/darts.ad.scorers.kmeans_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.kmeans_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.kmeans_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.nll_cauchy_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.nll_cauchy_scorer.rst.txt
index 917a37a44a..b05d5fb15d 100644
--- a/_sources/generated_api/darts.ad.scorers.nll_cauchy_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.nll_cauchy_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.nll_cauchy_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.nll_exponential_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.nll_exponential_scorer.rst.txt
index da0b1ae74a..cb2e15d3f3 100644
--- a/_sources/generated_api/darts.ad.scorers.nll_exponential_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.nll_exponential_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.nll_exponential_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.nll_gamma_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.nll_gamma_scorer.rst.txt
index ed86017478..8b6370edc0 100644
--- a/_sources/generated_api/darts.ad.scorers.nll_gamma_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.nll_gamma_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.nll_gamma_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.nll_gaussian_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.nll_gaussian_scorer.rst.txt
index 08d076a0c9..8b190386a0 100644
--- a/_sources/generated_api/darts.ad.scorers.nll_gaussian_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.nll_gaussian_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.nll_gaussian_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.nll_laplace_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.nll_laplace_scorer.rst.txt
index 8694c1ac6f..b143b5f57e 100644
--- a/_sources/generated_api/darts.ad.scorers.nll_laplace_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.nll_laplace_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.nll_laplace_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.nll_poisson_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.nll_poisson_scorer.rst.txt
index 070fa465e7..7a37a4a415 100644
--- a/_sources/generated_api/darts.ad.scorers.nll_poisson_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.nll_poisson_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.nll_poisson_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.norm_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.norm_scorer.rst.txt
index 5535c52dc6..ecd438208f 100644
--- a/_sources/generated_api/darts.ad.scorers.norm_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.norm_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.norm_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.pyod_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.pyod_scorer.rst.txt
index 4ba5fd4cd9..06cf2ea9c8 100644
--- a/_sources/generated_api/darts.ad.scorers.pyod_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.pyod_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.pyod_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.scorers.rst.txt b/_sources/generated_api/darts.ad.scorers.scorers.rst.txt
index 7f2ba5852f..61eed91745 100644
--- a/_sources/generated_api/darts.ad.scorers.scorers.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.scorers.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.scorers
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.scorers.wasserstein_scorer.rst.txt b/_sources/generated_api/darts.ad.scorers.wasserstein_scorer.rst.txt
index d8ce8be436..7bfdfde63c 100644
--- a/_sources/generated_api/darts.ad.scorers.wasserstein_scorer.rst.txt
+++ b/_sources/generated_api/darts.ad.scorers.wasserstein_scorer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.scorers.wasserstein_scorer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.ad.utils.rst.txt b/_sources/generated_api/darts.ad.utils.rst.txt
index c89dcd593b..350988ccf2 100644
--- a/_sources/generated_api/darts.ad.utils.rst.txt
+++ b/_sources/generated_api/darts.ad.utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.ad.utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.dtw.cost_matrix.rst.txt b/_sources/generated_api/darts.dataprocessing.dtw.cost_matrix.rst.txt
index 5add4afe18..4eb42b4d02 100644
--- a/_sources/generated_api/darts.dataprocessing.dtw.cost_matrix.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.dtw.cost_matrix.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.dtw.cost_matrix
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.dtw.dtw.rst.txt b/_sources/generated_api/darts.dataprocessing.dtw.dtw.rst.txt
index aef4df5fe3..242e418a1f 100644
--- a/_sources/generated_api/darts.dataprocessing.dtw.dtw.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.dtw.dtw.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.dtw.dtw
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.dtw.window.rst.txt b/_sources/generated_api/darts.dataprocessing.dtw.window.rst.txt
index 382e61cffc..1b4f71ac9a 100644
--- a/_sources/generated_api/darts.dataprocessing.dtw.window.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.dtw.window.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.dtw.window
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.encoders.encoder_base.rst.txt b/_sources/generated_api/darts.dataprocessing.encoders.encoder_base.rst.txt
index dadc0d52b5..2cb8c21894 100644
--- a/_sources/generated_api/darts.dataprocessing.encoders.encoder_base.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.encoders.encoder_base.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.encoders.encoder_base
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.encoders.encoders.rst.txt b/_sources/generated_api/darts.dataprocessing.encoders.encoders.rst.txt
index 4d520abb32..46d5168e9c 100644
--- a/_sources/generated_api/darts.dataprocessing.encoders.encoders.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.encoders.encoders.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.encoders.encoders
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.pipeline.rst.txt b/_sources/generated_api/darts.dataprocessing.pipeline.rst.txt
index 43c3c607aa..2c269b8808 100644
--- a/_sources/generated_api/darts.dataprocessing.pipeline.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.pipeline.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.pipeline
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.base_data_transformer.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.base_data_transformer.rst.txt
index 3db3758a30..80f619d599 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.base_data_transformer.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.base_data_transformer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.base_data_transformer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.boxcox.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.boxcox.rst.txt
index 982c2d4cf4..87a18f33bd 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.boxcox.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.boxcox.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.boxcox
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.diff.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.diff.rst.txt
index 41c1a5f4b1..635cdfa12d 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.diff.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.diff.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.diff
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.fittable_data_transformer.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.fittable_data_transformer.rst.txt
index 29d578f412..fb94d084f5 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.fittable_data_transformer.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.fittable_data_transformer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.fittable_data_transformer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.invertible_data_transformer.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.invertible_data_transformer.rst.txt
index 689319d4c0..f233e0dc73 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.invertible_data_transformer.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.invertible_data_transformer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.invertible_data_transformer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.mappers.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.mappers.rst.txt
index 382b40f7bd..74f53b3055 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.mappers.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.mappers.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.mappers
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.midas.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.midas.rst.txt
index f44f8cd05f..810ab9c089 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.midas.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.midas.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.midas
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.missing_values_filler.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.missing_values_filler.rst.txt
index ddd534d307..d34e8e7b19 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.missing_values_filler.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.missing_values_filler.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.missing_values_filler
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.reconciliation.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.reconciliation.rst.txt
index 109b2f68d9..9f5d584e56 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.reconciliation.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.reconciliation.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.reconciliation
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.scaler.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.scaler.rst.txt
index 53d53aede4..faca7cacf5 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.scaler.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.scaler.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.scaler
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.static_covariates_transformer.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.static_covariates_transformer.rst.txt
index 3adab261f3..36521c354c 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.static_covariates_transformer.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.static_covariates_transformer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.static_covariates_transformer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.dataprocessing.transformers.window_transformer.rst.txt b/_sources/generated_api/darts.dataprocessing.transformers.window_transformer.rst.txt
index 4ff316e87f..202c456c0e 100644
--- a/_sources/generated_api/darts.dataprocessing.transformers.window_transformer.rst.txt
+++ b/_sources/generated_api/darts.dataprocessing.transformers.window_transformer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.dataprocessing.transformers.window_transformer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.datasets.dataset_loaders.rst.txt b/_sources/generated_api/darts.datasets.dataset_loaders.rst.txt
index ffb9e72526..17d9225f46 100644
--- a/_sources/generated_api/darts.datasets.dataset_loaders.rst.txt
+++ b/_sources/generated_api/darts.datasets.dataset_loaders.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.datasets.dataset_loaders
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.explainability.explainability.rst.txt b/_sources/generated_api/darts.explainability.explainability.rst.txt
index fccc9f4c77..5f0747864a 100644
--- a/_sources/generated_api/darts.explainability.explainability.rst.txt
+++ b/_sources/generated_api/darts.explainability.explainability.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.explainability.explainability
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.explainability.explainability_result.rst.txt b/_sources/generated_api/darts.explainability.explainability_result.rst.txt
index d87f374c42..d2791b7a71 100644
--- a/_sources/generated_api/darts.explainability.explainability_result.rst.txt
+++ b/_sources/generated_api/darts.explainability.explainability_result.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.explainability.explainability_result
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.explainability.shap_explainer.rst.txt b/_sources/generated_api/darts.explainability.shap_explainer.rst.txt
index 7abca313b4..9f59ad7d2e 100644
--- a/_sources/generated_api/darts.explainability.shap_explainer.rst.txt
+++ b/_sources/generated_api/darts.explainability.shap_explainer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.explainability.shap_explainer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.explainability.tft_explainer.rst.txt b/_sources/generated_api/darts.explainability.tft_explainer.rst.txt
index 1ca95ef09a..6e1afeac3a 100644
--- a/_sources/generated_api/darts.explainability.tft_explainer.rst.txt
+++ b/_sources/generated_api/darts.explainability.tft_explainer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.explainability.tft_explainer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.explainability.utils.rst.txt b/_sources/generated_api/darts.explainability.utils.rst.txt
index c468aac381..6cf9ae72be 100644
--- a/_sources/generated_api/darts.explainability.utils.rst.txt
+++ b/_sources/generated_api/darts.explainability.utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.explainability.utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.metrics.metrics.rst.txt b/_sources/generated_api/darts.metrics.metrics.rst.txt
index 559e44894a..c097d0dd97 100644
--- a/_sources/generated_api/darts.metrics.metrics.rst.txt
+++ b/_sources/generated_api/darts.metrics.metrics.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.metrics.metrics
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.components.feed_forward.rst.txt b/_sources/generated_api/darts.models.components.feed_forward.rst.txt
index 9a1c272341..06a330efd7 100644
--- a/_sources/generated_api/darts.models.components.feed_forward.rst.txt
+++ b/_sources/generated_api/darts.models.components.feed_forward.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.components.feed_forward
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.components.glu_variants.rst.txt b/_sources/generated_api/darts.models.components.glu_variants.rst.txt
index 34fe8e99ec..c01c772d5e 100644
--- a/_sources/generated_api/darts.models.components.glu_variants.rst.txt
+++ b/_sources/generated_api/darts.models.components.glu_variants.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.components.glu_variants
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.components.layer_norm_variants.rst.txt b/_sources/generated_api/darts.models.components.layer_norm_variants.rst.txt
index a8af8dcb2b..0c8b83e9d9 100644
--- a/_sources/generated_api/darts.models.components.layer_norm_variants.rst.txt
+++ b/_sources/generated_api/darts.models.components.layer_norm_variants.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.components.layer_norm_variants
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.components.statsforecast_utils.rst.txt b/_sources/generated_api/darts.models.components.statsforecast_utils.rst.txt
index b7fc4b0b43..6a5526bab7 100644
--- a/_sources/generated_api/darts.models.components.statsforecast_utils.rst.txt
+++ b/_sources/generated_api/darts.models.components.statsforecast_utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.components.statsforecast_utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.components.transformer.rst.txt b/_sources/generated_api/darts.models.components.transformer.rst.txt
index 45d0531d67..075cccf9c8 100644
--- a/_sources/generated_api/darts.models.components.transformer.rst.txt
+++ b/_sources/generated_api/darts.models.components.transformer.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.components.transformer
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.filtering.filtering_model.rst.txt b/_sources/generated_api/darts.models.filtering.filtering_model.rst.txt
index 2dca0c83e4..450545a5df 100644
--- a/_sources/generated_api/darts.models.filtering.filtering_model.rst.txt
+++ b/_sources/generated_api/darts.models.filtering.filtering_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.filtering.filtering_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.filtering.gaussian_process_filter.rst.txt b/_sources/generated_api/darts.models.filtering.gaussian_process_filter.rst.txt
index ec2754f886..51f89eac02 100644
--- a/_sources/generated_api/darts.models.filtering.gaussian_process_filter.rst.txt
+++ b/_sources/generated_api/darts.models.filtering.gaussian_process_filter.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.filtering.gaussian_process_filter
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.filtering.kalman_filter.rst.txt b/_sources/generated_api/darts.models.filtering.kalman_filter.rst.txt
index 78e009b38a..a1428721d5 100644
--- a/_sources/generated_api/darts.models.filtering.kalman_filter.rst.txt
+++ b/_sources/generated_api/darts.models.filtering.kalman_filter.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.filtering.kalman_filter
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.filtering.moving_average_filter.rst.txt b/_sources/generated_api/darts.models.filtering.moving_average_filter.rst.txt
index 8557c6d6a3..9b4670ece1 100644
--- a/_sources/generated_api/darts.models.filtering.moving_average_filter.rst.txt
+++ b/_sources/generated_api/darts.models.filtering.moving_average_filter.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.filtering.moving_average_filter
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.arima.rst.txt b/_sources/generated_api/darts.models.forecasting.arima.rst.txt
index f5f3ba19db..559c2de2bd 100644
--- a/_sources/generated_api/darts.models.forecasting.arima.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.arima.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.arima
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.auto_arima.rst.txt b/_sources/generated_api/darts.models.forecasting.auto_arima.rst.txt
index f221cc8333..182332fbd7 100644
--- a/_sources/generated_api/darts.models.forecasting.auto_arima.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.auto_arima.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.auto_arima
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.baselines.rst.txt b/_sources/generated_api/darts.models.forecasting.baselines.rst.txt
index a5606cd207..5091d44b85 100644
--- a/_sources/generated_api/darts.models.forecasting.baselines.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.baselines.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.baselines
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.block_rnn_model.rst.txt b/_sources/generated_api/darts.models.forecasting.block_rnn_model.rst.txt
index 508509c2b6..149cc6f3ae 100644
--- a/_sources/generated_api/darts.models.forecasting.block_rnn_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.block_rnn_model.rst.txt
@@ -1,4 +1,10 @@
+Block Recurrent Neural Networks
+-------------------------------
-.. automodule:: darts.models.forecasting.block_rnn_model
+.. autoclass:: darts.models.forecasting.block_rnn_model.BlockRNNModel
:members:
- :undoc-members:
\ No newline at end of file
+ :exclude-members:
+
+.. autoclass:: darts.models.forecasting.block_rnn_model.CustomBlockRNNModule
+ :members:
+ :no-inherited-members:
diff --git a/_sources/generated_api/darts.models.forecasting.catboost_model.rst.txt b/_sources/generated_api/darts.models.forecasting.catboost_model.rst.txt
index 4d5433ba1b..1b77e0178c 100644
--- a/_sources/generated_api/darts.models.forecasting.catboost_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.catboost_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.catboost_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.croston.rst.txt b/_sources/generated_api/darts.models.forecasting.croston.rst.txt
index 111730ffc8..989be8c208 100644
--- a/_sources/generated_api/darts.models.forecasting.croston.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.croston.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.croston
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.dlinear.rst.txt b/_sources/generated_api/darts.models.forecasting.dlinear.rst.txt
index d49cf3ee2a..50edffdd72 100644
--- a/_sources/generated_api/darts.models.forecasting.dlinear.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.dlinear.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.dlinear
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.ensemble_model.rst.txt b/_sources/generated_api/darts.models.forecasting.ensemble_model.rst.txt
index 344a91bc57..7a5acf9bb3 100644
--- a/_sources/generated_api/darts.models.forecasting.ensemble_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.ensemble_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.ensemble_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.exponential_smoothing.rst.txt b/_sources/generated_api/darts.models.forecasting.exponential_smoothing.rst.txt
index 14a251ca66..6394175456 100644
--- a/_sources/generated_api/darts.models.forecasting.exponential_smoothing.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.exponential_smoothing.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.exponential_smoothing
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.fft.rst.txt b/_sources/generated_api/darts.models.forecasting.fft.rst.txt
index a0e497fd08..b597f74697 100644
--- a/_sources/generated_api/darts.models.forecasting.fft.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.fft.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.fft
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.forecasting_model.rst.txt b/_sources/generated_api/darts.models.forecasting.forecasting_model.rst.txt
index 87fa515b55..0d1ca08145 100644
--- a/_sources/generated_api/darts.models.forecasting.forecasting_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.forecasting_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.forecasting_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.kalman_forecaster.rst.txt b/_sources/generated_api/darts.models.forecasting.kalman_forecaster.rst.txt
index ebdf697982..1d0c10c497 100644
--- a/_sources/generated_api/darts.models.forecasting.kalman_forecaster.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.kalman_forecaster.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.kalman_forecaster
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.lgbm.rst.txt b/_sources/generated_api/darts.models.forecasting.lgbm.rst.txt
index d82ff3c39e..c6b039e6d5 100644
--- a/_sources/generated_api/darts.models.forecasting.lgbm.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.lgbm.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.lgbm
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.linear_regression_model.rst.txt b/_sources/generated_api/darts.models.forecasting.linear_regression_model.rst.txt
index 6a706f7789..90a2893437 100644
--- a/_sources/generated_api/darts.models.forecasting.linear_regression_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.linear_regression_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.linear_regression_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.nbeats.rst.txt b/_sources/generated_api/darts.models.forecasting.nbeats.rst.txt
index 35d426552b..9226d32a17 100644
--- a/_sources/generated_api/darts.models.forecasting.nbeats.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.nbeats.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.nbeats
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.nhits.rst.txt b/_sources/generated_api/darts.models.forecasting.nhits.rst.txt
index 589d5fbb59..7fdd3a3b11 100644
--- a/_sources/generated_api/darts.models.forecasting.nhits.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.nhits.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.nhits
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.nlinear.rst.txt b/_sources/generated_api/darts.models.forecasting.nlinear.rst.txt
index 90e70fdb1d..6e0e29d010 100644
--- a/_sources/generated_api/darts.models.forecasting.nlinear.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.nlinear.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.nlinear
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.pl_forecasting_module.rst.txt b/_sources/generated_api/darts.models.forecasting.pl_forecasting_module.rst.txt
index 516742c993..0c0a2b877d 100644
--- a/_sources/generated_api/darts.models.forecasting.pl_forecasting_module.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.pl_forecasting_module.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.pl_forecasting_module
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.prophet_model.rst.txt b/_sources/generated_api/darts.models.forecasting.prophet_model.rst.txt
index 0f8cadb234..d4540abf43 100644
--- a/_sources/generated_api/darts.models.forecasting.prophet_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.prophet_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.prophet_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.random_forest.rst.txt b/_sources/generated_api/darts.models.forecasting.random_forest.rst.txt
index 139d5aa9c0..6e5c18bedf 100644
--- a/_sources/generated_api/darts.models.forecasting.random_forest.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.random_forest.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.random_forest
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.regression_ensemble_model.rst.txt b/_sources/generated_api/darts.models.forecasting.regression_ensemble_model.rst.txt
index 0590a53de1..2e2838b486 100644
--- a/_sources/generated_api/darts.models.forecasting.regression_ensemble_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.regression_ensemble_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.regression_ensemble_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.regression_model.rst.txt b/_sources/generated_api/darts.models.forecasting.regression_model.rst.txt
index 10b8e4ef69..56ed09b5a5 100644
--- a/_sources/generated_api/darts.models.forecasting.regression_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.regression_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.regression_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.rnn_model.rst.txt b/_sources/generated_api/darts.models.forecasting.rnn_model.rst.txt
index 11c903bccc..31ecf93cbd 100644
--- a/_sources/generated_api/darts.models.forecasting.rnn_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.rnn_model.rst.txt
@@ -1,4 +1,10 @@
+Recurrent Neural Networks
+-------------------------
-.. automodule:: darts.models.forecasting.rnn_model
+.. autoclass:: darts.models.forecasting.rnn_model.RNNModel
:members:
- :undoc-members:
\ No newline at end of file
+ :exclude-members:
+
+.. autoclass:: darts.models.forecasting.rnn_model.CustomRNNModule
+ :members:
+ :no-inherited-members:
diff --git a/_sources/generated_api/darts.models.forecasting.sf_auto_arima.rst.txt b/_sources/generated_api/darts.models.forecasting.sf_auto_arima.rst.txt
index e50a33b2c1..76418c50e4 100644
--- a/_sources/generated_api/darts.models.forecasting.sf_auto_arima.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.sf_auto_arima.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.sf_auto_arima
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.sf_auto_ces.rst.txt b/_sources/generated_api/darts.models.forecasting.sf_auto_ces.rst.txt
index 97ec5623fd..7091d50b74 100644
--- a/_sources/generated_api/darts.models.forecasting.sf_auto_ces.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.sf_auto_ces.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.sf_auto_ces
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.sf_auto_ets.rst.txt b/_sources/generated_api/darts.models.forecasting.sf_auto_ets.rst.txt
index a789d8edfd..2eb3546348 100644
--- a/_sources/generated_api/darts.models.forecasting.sf_auto_ets.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.sf_auto_ets.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.sf_auto_ets
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.sf_auto_theta.rst.txt b/_sources/generated_api/darts.models.forecasting.sf_auto_theta.rst.txt
index 33bff03eec..8eebde970c 100644
--- a/_sources/generated_api/darts.models.forecasting.sf_auto_theta.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.sf_auto_theta.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.sf_auto_theta
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.tbats_model.rst.txt b/_sources/generated_api/darts.models.forecasting.tbats_model.rst.txt
index d8dc517ffd..e6d1932a0e 100644
--- a/_sources/generated_api/darts.models.forecasting.tbats_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.tbats_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.tbats_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.tcn_model.rst.txt b/_sources/generated_api/darts.models.forecasting.tcn_model.rst.txt
index 6306157ced..a85fcc7923 100644
--- a/_sources/generated_api/darts.models.forecasting.tcn_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.tcn_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.tcn_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.tft_model.rst.txt b/_sources/generated_api/darts.models.forecasting.tft_model.rst.txt
index 30312491d2..ae6587e9bb 100644
--- a/_sources/generated_api/darts.models.forecasting.tft_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.tft_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.tft_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.tft_submodels.rst.txt b/_sources/generated_api/darts.models.forecasting.tft_submodels.rst.txt
index db8678b1ce..58a435f161 100644
--- a/_sources/generated_api/darts.models.forecasting.tft_submodels.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.tft_submodels.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.tft_submodels
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.theta.rst.txt b/_sources/generated_api/darts.models.forecasting.theta.rst.txt
index fc9ec96bac..735b8d41cc 100644
--- a/_sources/generated_api/darts.models.forecasting.theta.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.theta.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.theta
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.tide_model.rst.txt b/_sources/generated_api/darts.models.forecasting.tide_model.rst.txt
index 1be8511824..d8081d9f20 100644
--- a/_sources/generated_api/darts.models.forecasting.tide_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.tide_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.tide_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.torch_forecasting_model.rst.txt b/_sources/generated_api/darts.models.forecasting.torch_forecasting_model.rst.txt
index ee2eb9a100..60324c59f3 100644
--- a/_sources/generated_api/darts.models.forecasting.torch_forecasting_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.torch_forecasting_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.torch_forecasting_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.transformer_model.rst.txt b/_sources/generated_api/darts.models.forecasting.transformer_model.rst.txt
index cd095bca46..51c0eedce2 100644
--- a/_sources/generated_api/darts.models.forecasting.transformer_model.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.transformer_model.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.transformer_model
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.varima.rst.txt b/_sources/generated_api/darts.models.forecasting.varima.rst.txt
index 2482560c51..f2528375cb 100644
--- a/_sources/generated_api/darts.models.forecasting.varima.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.varima.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.varima
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.forecasting.xgboost.rst.txt b/_sources/generated_api/darts.models.forecasting.xgboost.rst.txt
index 2bf0997ce2..c9289839fe 100644
--- a/_sources/generated_api/darts.models.forecasting.xgboost.rst.txt
+++ b/_sources/generated_api/darts.models.forecasting.xgboost.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.forecasting.xgboost
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.models.utils.rst.txt b/_sources/generated_api/darts.models.utils.rst.txt
index 965ea6b3d8..471c46c805 100644
--- a/_sources/generated_api/darts.models.utils.rst.txt
+++ b/_sources/generated_api/darts.models.utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.models.utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.timeseries.rst.txt b/_sources/generated_api/darts.timeseries.rst.txt
index e3d2da6b2a..e73fc820a8 100644
--- a/_sources/generated_api/darts.timeseries.rst.txt
+++ b/_sources/generated_api/darts.timeseries.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.timeseries
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.callbacks.rst.txt b/_sources/generated_api/darts.utils.callbacks.rst.txt
index d9c20bdeaf..06a1fe62e3 100644
--- a/_sources/generated_api/darts.utils.callbacks.rst.txt
+++ b/_sources/generated_api/darts.utils.callbacks.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.callbacks
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.horizon_based_dataset.rst.txt b/_sources/generated_api/darts.utils.data.horizon_based_dataset.rst.txt
index 0ff361ba87..5ca6e3d9dc 100644
--- a/_sources/generated_api/darts.utils.data.horizon_based_dataset.rst.txt
+++ b/_sources/generated_api/darts.utils.data.horizon_based_dataset.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.horizon_based_dataset
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.inference_dataset.rst.txt b/_sources/generated_api/darts.utils.data.inference_dataset.rst.txt
index fbcf0efc7f..c37ac987ea 100644
--- a/_sources/generated_api/darts.utils.data.inference_dataset.rst.txt
+++ b/_sources/generated_api/darts.utils.data.inference_dataset.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.inference_dataset
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.sequential_dataset.rst.txt b/_sources/generated_api/darts.utils.data.sequential_dataset.rst.txt
index 14ee5be67a..5363bfb87f 100644
--- a/_sources/generated_api/darts.utils.data.sequential_dataset.rst.txt
+++ b/_sources/generated_api/darts.utils.data.sequential_dataset.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.sequential_dataset
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.shifted_dataset.rst.txt b/_sources/generated_api/darts.utils.data.shifted_dataset.rst.txt
index 8ef4c4c83f..a37959f2d7 100644
--- a/_sources/generated_api/darts.utils.data.shifted_dataset.rst.txt
+++ b/_sources/generated_api/darts.utils.data.shifted_dataset.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.shifted_dataset
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.tabularization.rst.txt b/_sources/generated_api/darts.utils.data.tabularization.rst.txt
index 77e9a68e81..3f268ee18f 100644
--- a/_sources/generated_api/darts.utils.data.tabularization.rst.txt
+++ b/_sources/generated_api/darts.utils.data.tabularization.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.tabularization
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.training_dataset.rst.txt b/_sources/generated_api/darts.utils.data.training_dataset.rst.txt
index ed00f626f2..f9368e59bd 100644
--- a/_sources/generated_api/darts.utils.data.training_dataset.rst.txt
+++ b/_sources/generated_api/darts.utils.data.training_dataset.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.training_dataset
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.data.utils.rst.txt b/_sources/generated_api/darts.utils.data.utils.rst.txt
index e7dc5d3508..889e919d9c 100644
--- a/_sources/generated_api/darts.utils.data.utils.rst.txt
+++ b/_sources/generated_api/darts.utils.data.utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.data.utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_regression.rst.txt b/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_regression.rst.txt
index e2891357e4..a650d5b263 100644
--- a/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_regression.rst.txt
+++ b/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_regression.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.historical_forecasts.optimized_historical_forecasts_regression
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_torch.rst.txt b/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_torch.rst.txt
index 044e3fc260..ec4090f768 100644
--- a/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_torch.rst.txt
+++ b/_sources/generated_api/darts.utils.historical_forecasts.optimized_historical_forecasts_torch.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.historical_forecasts.optimized_historical_forecasts_torch
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.historical_forecasts.utils.rst.txt b/_sources/generated_api/darts.utils.historical_forecasts.utils.rst.txt
index 8a46e62c5a..bcb9095084 100644
--- a/_sources/generated_api/darts.utils.historical_forecasts.utils.rst.txt
+++ b/_sources/generated_api/darts.utils.historical_forecasts.utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.historical_forecasts.utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.likelihood_models.rst.txt b/_sources/generated_api/darts.utils.likelihood_models.rst.txt
index ce887a261d..dd6781b44a 100644
--- a/_sources/generated_api/darts.utils.likelihood_models.rst.txt
+++ b/_sources/generated_api/darts.utils.likelihood_models.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.likelihood_models
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.losses.rst.txt b/_sources/generated_api/darts.utils.losses.rst.txt
index b41b1234bd..3dc95e81bf 100644
--- a/_sources/generated_api/darts.utils.losses.rst.txt
+++ b/_sources/generated_api/darts.utils.losses.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.losses
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.missing_values.rst.txt b/_sources/generated_api/darts.utils.missing_values.rst.txt
index 3782f7ff65..657aa3e6ae 100644
--- a/_sources/generated_api/darts.utils.missing_values.rst.txt
+++ b/_sources/generated_api/darts.utils.missing_values.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.missing_values
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.model_selection.rst.txt b/_sources/generated_api/darts.utils.model_selection.rst.txt
index f8899d5986..1c20e0c17d 100644
--- a/_sources/generated_api/darts.utils.model_selection.rst.txt
+++ b/_sources/generated_api/darts.utils.model_selection.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.model_selection
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.multioutput.rst.txt b/_sources/generated_api/darts.utils.multioutput.rst.txt
index b559f583eb..4bcab6098d 100644
--- a/_sources/generated_api/darts.utils.multioutput.rst.txt
+++ b/_sources/generated_api/darts.utils.multioutput.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.multioutput
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.statistics.rst.txt b/_sources/generated_api/darts.utils.statistics.rst.txt
index 90b13d579a..63baf96590 100644
--- a/_sources/generated_api/darts.utils.statistics.rst.txt
+++ b/_sources/generated_api/darts.utils.statistics.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.statistics
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.timeseries_generation.rst.txt b/_sources/generated_api/darts.utils.timeseries_generation.rst.txt
index 146884ff6d..9181d6b8f4 100644
--- a/_sources/generated_api/darts.utils.timeseries_generation.rst.txt
+++ b/_sources/generated_api/darts.utils.timeseries_generation.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.timeseries_generation
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.torch.rst.txt b/_sources/generated_api/darts.utils.torch.rst.txt
index c166409827..0341f085a5 100644
--- a/_sources/generated_api/darts.utils.torch.rst.txt
+++ b/_sources/generated_api/darts.utils.torch.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.torch
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/generated_api/darts.utils.utils.rst.txt b/_sources/generated_api/darts.utils.utils.rst.txt
index 9a677bbcec..17852d3ef9 100644
--- a/_sources/generated_api/darts.utils.utils.rst.txt
+++ b/_sources/generated_api/darts.utils.utils.rst.txt
@@ -1,4 +1,3 @@
-
.. automodule:: darts.utils.utils
:members:
:undoc-members:
\ No newline at end of file
diff --git a/_sources/quickstart/00-quickstart.ipynb.txt b/_sources/quickstart/00-quickstart.ipynb.txt
index 027ceb95e7..c4bf8a58f6 100644
--- a/_sources/quickstart/00-quickstart.ipynb.txt
+++ b/_sources/quickstart/00-quickstart.ipynb.txt
@@ -134,7 +134,7 @@
"outputs": [
{
"data": {
- "image/png": "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2uXzFgRBCJROIegVFRVN9u3atYt3332XuLg4rrzyStf+CRMmMHnyZIqLi3n11Vd9at8W8BkzZmCM4fLLL2fHjh1+Cbo9Mbpp0yYqKysZPHgwJ510km8DFARB8IEOL+iPPvoo8fHxfP/7328Q7/3kk08CcMkll9CjR48G11x++eUArhS1nti6dSubNm0iOTmZ119/nfnz51NdXc3VV1/Nnj176Nq1KyNHjmzxejt0cc2aNVRXV7tcL+PGjfNvoIIgCF7o0IJeV1fnilhZvnw5I0aM4O9//zuVlZUuX7e9YtOdCy64gIiICD744AOKioo83sO2zufMmUNMTAz33XcfCQkJLuv8zDPPJCqq5bTyGRkZDB06lNLSUj799FMRdEEQQkaHFvTVq1eTk5NDRkYGN9xwA8YYfvazn/H73/+ew4cPM3r06GaFMzU1lcmTJ1NdXe1KZtUcxhheeuklwLL0wVoB+otf/MJ1jid3i83s2bMBePPNN0XQBUEIGR1a0J977jnAihp57LHHWLhwIZWVldx7772AZZ23lBPFTmblye3y3nvv8fXXX9OnT58GlXluueUWUlNTAZpUo28Ou2Tb0qVL2b59OzExMQGvChUEQWiCp5jGEP8ExPHjx01iYqIBzLZt24wxxhQXF5vMzEwDmK5du5qSkpIWr8/NzTWAiY+PN2VlZU2O19bWmsGDBxvAPPLII02Or1+/3vzjH//wqWJPdXW1SUlJcRWtGDdunB8jDQ5hHlfrFzKW8ETG0mZ0vjj0l19+mdLSUsaNG+fKUNitWzeee+45unbtys9//nOPmQbT09MZP3485eXlLrdLYWEhF198MX/4wx9YsmQJO3bsoH///lx99dVNrj/ttNO46qqrfMqKGBUVxcyZM12vxd0iCEIo6JBFolevXs2NN94IwMKFCxscmzx5MkVFRa64c09ccsklrF27lmeffZaLLrqIP//5z7zyyiu88sorrnMWL14clGo/559/Pi+88AIggi4IQmjocBb6+vXrmTVrFsePH2fBggVcddVVTc7xRcwBfvSjHxEVFcW7777L3r17WbJkCYDL4h84cCBXXHFFUPr93e9+1xUNI4IuCEIo6FAWul0js6SkhAsvvJCnnnoqoARUvXr1Yvbs2SxbtozLLruMwsJChg4dyldffcWaNWtISEhodX7yxiQnJ/Poo49y4MAB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",
+ "image/png": "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",
"text/plain": [
"
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, future_covariates, num_samples])
predict
(n[, future_covariates, num_samples, ...])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
If some future covariates were specified during the training, they must also be specified here.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, num_samples, verbose])
predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, num_samples, verbose])
predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, num_samples, verbose])
predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, num_samples, verbose])
predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
str
, Module
]) – Either a string specifying the RNN module type (“RNN”, “LSTM” or “GRU”),
-or a PyTorch module with the same specifications as
-darts.models.block_rnn_model._BlockRNNModule
.
+model (Union
[str
, Type
[CustomBlockRNNModule
]]) – Either a string specifying the RNN module type (“RNN”, “LSTM” or “GRU”), or a subclass of
+CustomBlockRNNModule
(the class itself, not an object of the class) with a custom logic.
hidden_dim (int
) – Size for feature maps for each hidden RNN layer (\(h_n\)).
In Darts version <= 0.21, hidden_dim was referred as hidden_size.
n_rnn_layers (int
) – Number of layers in the RNN module.
fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training. +
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -932,8 +931,8 @@
None
.pl_trainer_kwargs –
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presetsthat performs the training, validation and prediction processes. These presets include automatic +
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -941,8 +940,6 @@
"accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
fit()
and predict()
.
show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
References
A 6-tuple containing in order: (min target lag, max target lag, min past covariate lag, max past covariate lag, min future covariate lag, max future covariate lag).
Returns the index of the first predicted within the output of self.model.
The minimum number of samples for training the model.
Class property defining the minimum required length for the training series; overriding the default value of 3 of ForecastingModel
Number of time steps predicted at once by the model, not defined for statistical models.
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
historical_forecasts
(series[, ...])
Compute the historical forecasts that would have been obtained by this model on (potentially multiple) series.
load
(path, **kwargs)
instantiates the SequentialEncoder object based on self._model_encoder_settings and parameter add_encoders
used at model creation
load
(path, **kwargs)
Loads a model from a given file path.
load_from_checkpoint
(model_name[, work_dir, ...])
load_from_checkpoint
(model_name[, work_dir, ...])
Load the model from automatically saved checkpoints under '{work_dir}/darts_logs/{model_name}/checkpoints/'.
load_weights
(path[, load_encoders, skip_checks])
load_weights
(path[, load_encoders, skip_checks])
Loads the weights from a manually saved model (saved with save()
).
load_weights_from_checkpoint
([model_name, ...])
load_weights_from_checkpoint
([model_name, ...])
Load only the weights from automatically saved checkpoints under '{work_dir}/darts_logs/{model_name}/ checkpoints/'.
lr_find
(series[, past_covariates, ...])
lr_find
(series[, past_covariates, ...])
A wrapper around PyTorch Lightning's Tuner.lr_find().
predict
(n[, series, past_covariates, ...])
predict
(n[, series, past_covariates, ...])
Predict the n
time step following the end of the training series, or of the specified series
.
predict_from_dataset
(n, input_series_dataset)
predict_from_dataset
(n, input_series_dataset)
This method allows for predicting with a specific darts.utils.data.InferenceDataset
instance.
Resets the model object and removes all stored data - model, checkpoints, loggers and training history.
residuals
(series[, past_covariates, ...])
residuals
(series[, past_covariates, ...])
Compute the residuals produced by this model on a (or sequence of) univariate time series.
save
([path])
save
([path])
Saves the model under a given path.
to_cpu
()
to_cpu
()
Updates the PyTorch Lightning Trainer parameters to move the model to CPU the next time :fun:`fit()` or predict()
is called.
Returns a new (untrained) model instance create with the same parameters.
int
Returns the index of the first predicted within the output of self.model.
+int
int
instantiates the SequentialEncoder object based on self._model_encoder_settings and parameter
+add_encoders
used at model creation
Optional
[Likelihood
]
bool
Class property defining the minimum required length for the training series; +overriding the default value of 3 of ForecastingModel
+dict
int
False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
predict()
is called.
Returns a new (untrained) model instance create with the same parameters.
+Bases: darts.models.forecasting.pl_forecasting_module.PLPastCovariatesModule
, abc.ABC
This class allows to create custom block RNN modules that can later be used with Darts’
+BlockRNNModel
. It adds the backbone that is required to be used with Darts’
+TorchForecastingModel
and BlockRNNModel
.
To create a new module, subclass from CustomBlockRNNModule
and:
Define the architecture in the module constructor (__init__())
Add the forward() method and define the logic of your module’s forward pass
Use the custom module class when creating a new BlockRNNModel
with parameter model.
You can use darts.models.forecasting.block_rnn_model._BlockRNNModule as an example.
+input_size (int
) – The dimensionality of the input time series.
hidden_dim (int
) – The number of features in the hidden state h of the RNN module.
num_layers (int
) – The number of recurrent layers.
target_size (int
) – The dimensionality of the output time series.
nr_params (int
) – The number of parameters of the likelihood (or 1 if no likelihood is used).
num_layers_out_fc (Optional
[List
]) – A list containing the dimensions of the hidden layers of the fully connected NN.
+This network connects the last hidden layer of the PyTorch RNN module to the output.
dropout (float
) – The fraction of neurons that are dropped in all-but-last RNN layers.
**kwargs – all parameters required for darts.model.forecasting_models.PLForecastingModule
base class.
Attributes
+
|
+If set to |
+
|
+The current epoch in the |
+
|
+The example input array is a specification of what the module can consume in the |
+
|
+The index of the current process across all nodes and devices. |
+
|
+Total training batches seen across all epochs. |
+
|
+The collection of hyperparameters saved with |
+
|
+The collection of hyperparameters saved with |
+
|
+The index of the current process within a single node. |
+
|
+Reference to the logger object in the Trainer. |
+
|
+Reference to the list of loggers in the Trainer. |
+
|
+Returns |
+
|
+Number of time steps predicted at once by the model. |
+
device |
++ |
dtype |
++ |
epochs_trained |
++ |
fabric |
++ |
trainer |
++ |
Methods
+
|
+Adds a child module to the current module. |
+
|
+Gather tensors or collections of tensors from multiple processes. |
+
|
+Applies |
+
|
+Called to perform backward on the loss returned in |
+
|
+Casts all floating point parameters and buffers to |
+
|
+Returns an iterator over module buffers. |
+
|
+Returns an iterator over immediate children modules. |
+
|
+Handles gradient clipping internally. |
+
|
+Compile this Module's forward using |
+
|
+Configure model-specific callbacks. |
+
|
+Perform gradient clipping for the optimizer parameters. |
+
|
+Hook to create modules in a strategy and precision aware context. |
+
|
+configures optimizers and learning rate schedulers for model optimization. |
+
|
+Deprecated. |
+
|
+process the torch_metrics parameter. |
+
|
+See |
+
|
+Moves all model parameters and buffers to the GPU. |
+
|
+See |
+
|
+Sets the module in evaluation mode. |
+
|
+Set the extra representation of the module |
+
|
+See |
+
|
+BlockRNN Module forward. |
+
|
+Freeze all params for inference. |
+
|
+Returns the buffer given by |
+
|
+Returns any extra state to include in the module's state_dict. |
+
|
+Returns the parameter given by |
+
|
+Returns the submodule given by |
+
|
+See |
+
|
+Moves all model parameters and buffers to the IPU. |
+
|
+Primary way of loading a model from a checkpoint. |
+
|
+Copies parameters and buffers from |
+
|
+Log a key, value pair. |
+
|
+Log a dictionary of values at once. |
+
|
+Override this method to adjust the default way the |
+
|
+Returns the learning rate scheduler(s) that are being used during training. |
+
|
+Call this directly from your |
+
|
+Returns an iterator over all modules in the network. |
+
|
+Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself. |
+
|
+Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself. |
+
|
+Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself. |
+
|
+Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself. |
+
|
+Called after |
+
|
+Override to alter or apply batch augmentations to your batch after it is transferred to the device. |
+
|
+Called before |
+
|
+Override to alter or apply batch augmentations to your batch before it is transferred to the device. |
+
|
+Called before |
+
|
+Called after |
+
|
+Called at the very end of fit. |
+
|
+Called at the very beginning of fit. |
+
|
+Called by Lightning to restore your model. |
+
|
+Called in the predict loop after the batch. |
+
|
+Called in the predict loop before anything happens for that batch. |
+
|
+Called at the end of predicting. |
+
|
+Called at the end of predicting. |
+
|
+Called at the beginning of predicting. |
+
|
+Sets the model to eval during the predict loop. |
+
|
+Called at the beginning of predicting. |
+
|
+Called by Lightning when saving a checkpoint to give you a chance to store anything else you might want to save. |
+
|
+Called in the test loop after the batch. |
+
|
+Called in the test loop before anything happens for that batch. |
+
|
+Called at the end of testing. |
+
|
+Called in the test loop at the very end of the epoch. |
+
|
+Called in the test loop at the very beginning of the epoch. |
+
|
+Sets the model to eval during the test loop. |
+
|
+Sets the model to train during the test loop. |
+
|
+Called at the beginning of testing. |
+
|
+Called in the training loop after the batch. |
+
|
+Called in the training loop before anything happens for that batch. |
+
|
+Called at the end of training before logger experiment is closed. |
+
|
+Called in the training loop at the very end of the epoch. |
+
|
+Called in the training loop at the very beginning of the epoch. |
+
|
+Called at the beginning of training after sanity check. |
+
|
+Called in the validation loop after the batch. |
+
|
+Called in the validation loop before anything happens for that batch. |
+
|
+Called at the end of validation. |
+
|
+Called in the validation loop at the very end of the epoch. |
+
|
+Called in the validation loop at the very beginning of the epoch. |
+
|
+Sets the model to eval during the val loop. |
+
|
+Sets the model to train during the val loop. |
+
|
+Called by the training loop to release gradients before entering the validation loop. |
+
|
+Called at the beginning of validation. |
+
|
+Override this method to adjust the default way the |
+
|
+Override this method to change the default behaviour of |
+
|
+Returns the optimizer(s) that are being used during training. |
+
|
+Returns an iterator over module parameters. |
+
|
+An iterable or collection of iterables specifying prediction samples. |
+
|
+performs the prediction step |
+
|
+Use this to download and prepare data. |
+
|
+Prints only from process 0. |
+
|
+Registers a backward hook on the module. |
+
|
+Adds a buffer to the module. |
+
|
+Registers a forward hook on the module. |
+
|
+Registers a forward pre-hook on the module. |
+
|
+Registers a backward hook on the module. |
+
|
+Registers a backward pre-hook on the module. |
+
|
+Registers a post hook to be run after module's |
+
|
+Alias for |
+
|
+Adds a parameter to the module. |
+
|
+These hooks will be called with arguments: |
+
|
+Change if autograd should record operations on parameters in this module. |
+
|
+Save arguments to |
+
|
+This function is called from |
+
|
+to be set from TorchForecastingModel before calling trainer.predict() and reset at self.on_predict_end() |
+
|
+Called at the beginning of fit (train + validate), validate, test, or predict. |
+
|
+See |
+
|
+Returns a dictionary containing references to the whole state of the module. |
+
|
+Called at the end of fit (train + validate), validate, test, or predict. |
+
|
+An iterable or collection of iterables specifying test samples. |
+
|
+Operates on a single batch of data from the test set. |
+
|
+See |
+
|
+Cast module precision (float32 by default) to another precision. |
+
|
+Moves the parameters and buffers to the specified device without copying storage. |
+
|
+Saves the model in ONNX format. |
+
|
+By default compiles the whole model to a |
+
|
+Makes sure only the gradients of the current optimizer's parameters are calculated in the training step to prevent dangling gradients in multiple-optimizer setup. |
+
|
+Sets the module in training mode. |
+
|
+An iterable or collection of iterables specifying training samples. |
+
|
+performs the training step |
+
|
+Override this hook if your |
+
|
+See |
+
|
+Unfreeze all parameters for training. |
+
|
+Resets the state of required gradients that were toggled with |
+
|
+An iterable or collection of iterables specifying validation samples. |
+
|
+performs the validation step |
+
|
+Moves all model parameters and buffers to the XPU. |
+
|
+Resets gradients of all model parameters. |
+
__call__ |
++ |
set_mc_dropout |
++ |
BlockRNN Module forward.
+x_in (Tuple
) – Tuple of Tensors containing the features of the input sequence. The tuple has elements
+(past target, historic future covariates, future covariates, static covariates).
+The shape of the past target is (batch_size, input_length, input_size).
The BlockRNN output Tensor with shape (batch_size, output_chunk_length, target_size, nr_params). +It contains the prediction at the last time step of the sequence.
+torch.Tensor
+Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with univariate target series.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, future_covariates, num_samples])
predict
(n[, future_covariates, num_samples, ...])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
If some future covariates were specified during the training, they must also be specified here.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training. +
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -931,8 +931,8 @@
None
.pl_trainer_kwargs –
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presetsthat performs the training, validation and prediction processes. These presets include automatic +
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -940,8 +940,6 @@
"accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
fit()
and predict()
.
show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
References
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, num_samples, verbose])
predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
n – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
num_samples – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1 +
n (int
) – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, num_samples, verbose])
predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
Forecasts values for n time steps after the end of the training series.
n (int
) – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
If the series parameter is not set, forecasts values for n time steps after the end of the training series. If some future covariates were specified during the training, they must also be specified here.
If the series parameter is set, forecasts values for n time steps after the end of the new target @@ -1567,6 +1570,8 @@
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with univariate target series.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with univariate target series.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training. +
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -939,8 +939,8 @@
None
.pl_trainer_kwargs –
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presetsthat performs the training, validation and prediction processes. These presets include automatic +
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -948,8 +948,6 @@
"accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
fit()
and predict()
.
show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
References
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training. +
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -947,8 +947,8 @@
None
.pl_trainer_kwargs –
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presetsthat performs the training, validation and prediction processes. These presets include automatic +
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -956,8 +956,6 @@
"accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
fit()
and predict()
.
show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
References
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training. +
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -1058,13 +1058,16 @@
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
False
False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
load
(path)
Loads the model from a given path or file handle.
predict
(n[, future_covariates, num_samples])
predict
(n[, future_covariates, num_samples, ...])
Forecasts values for n time steps after the end of the training series.
predict_raw
(n[, future_covariates])
Forecasts values for n time steps after the end of the training series.
If some future covariates were specified during the training, they must also be specified here.
verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with univariate target series.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with univariate target series.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
Whether model supports static covariates
Whether the model supports prediction for any input series.
Whether the model uses future covariates, once fitted.
Whether the model uses past covariates, once fitted.
Whether the model uses static covariates, once fitted.
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with univariate target series.
show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
Whether the model supports prediction for any input series.
+bool
input_chunk_length (int
) – Number of past time steps that are fed to the forecasting module at prediction time.
model (Union
[str
, Module
]) – Either a string specifying the RNN module type (“RNN”, “LSTM” or “GRU”),
-or a PyTorch module with the same specifications as
-darts.models.rnn_model._RNNModule.
model (Union
[str
, Type
[CustomRNNModule
]]) – Either a string specifying the RNN module type (“RNN”, “LSTM” or “GRU”), or a subclass of
+CustomRNNModule
(the class itself, not an object of the class) with a custom logic.
hidden_dim (int
) – Size for feature maps for each hidden RNN layer (\(h_n\)).
n_rnn_layers (int
) – The number of recurrent layers.
dropout (float
) – Fraction of neurons afected by Dropout.
fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training. +
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -934,8 +933,8 @@
None
.pl_trainer_kwargs –
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presetsthat performs the training, validation and prediction processes. These presets include automatic +
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -943,8 +942,6 @@
"accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
fit()
and predict()
.
show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
Examples
>>> from darts.datasets import WeatherDataset
>>> from darts.models import RNNModel
@@ -1027,9 +1021,15 @@ Recurrent Neural Networks
A 6-tuple containing in order: (min target lag, max target lag, min past covariate lag, max past covariate lag, min future covariate lag, max future covariate lag).
-
+
+Returns the index of the first predicted within the output of self.model.
+
+
The minimum number of samples for training the model.
+
+Class property defining the minimum required length for the training series; overriding the default value of 3 of ForecastingModel
+
Number of time steps predicted at once by the model, not defined for statistical models.
@@ -1048,13 +1048,16 @@ Recurrent Neural Networks
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1113,39 +1116,45 @@ Recurrent Neural Networkshistorical_forecasts
(series[, ...])
Compute the historical forecasts that would have been obtained by this model on (potentially multiple) series.
-load
(path, **kwargs)
+
+instantiates the SequentialEncoder object based on self._model_encoder_settings and parameter add_encoders
used at model creation
+
+load
(path, **kwargs)
Loads a model from a given file path.
-load_from_checkpoint
(model_name[, work_dir, ...])
+load_from_checkpoint
(model_name[, work_dir, ...])
Load the model from automatically saved checkpoints under '{work_dir}/darts_logs/{model_name}/checkpoints/'.
-load_weights
(path[, load_encoders, skip_checks])
+load_weights
(path[, load_encoders, skip_checks])
Loads the weights from a manually saved model (saved with save()
).
-load_weights_from_checkpoint
([model_name, ...])
+load_weights_from_checkpoint
([model_name, ...])
Load only the weights from automatically saved checkpoints under '{work_dir}/darts_logs/{model_name}/ checkpoints/'.
-lr_find
(series[, past_covariates, ...])
+lr_find
(series[, past_covariates, ...])
A wrapper around PyTorch Lightning's Tuner.lr_find().
-predict
(n[, series, past_covariates, ...])
+predict
(n[, series, past_covariates, ...])
Predict the n
time step following the end of the training series, or of the specified series
.
-predict_from_dataset
(n, input_series_dataset)
+predict_from_dataset
(n, input_series_dataset)
This method allows for predicting with a specific darts.utils.data.InferenceDataset
instance.
-
+
Resets the model object and removes all stored data - model, checkpoints, loggers and training history.
-residuals
(series[, past_covariates, ...])
+residuals
(series[, past_covariates, ...])
Compute the residuals produced by this model on a (or sequence of) univariate time series.
-save
([path])
+save
([path])
Saves the model under a given path.
-to_cpu
()
+to_cpu
()
Updates the PyTorch Lightning Trainer parameters to move the model to CPU the next time :fun:`fit()` or predict()
is called.
+
+Returns a new (untrained) model instance create with the same parameters.
+
@@ -1268,16 +1277,6 @@ Recurrent Neural Networks
--
-property epochs_trained: int¶
-
-- Return type
-int
-
-
-
-
-
property extreme_lags: Tuple[Optional[int], Optional[int], Optional[int], Optional[int], Optional[int], Optional[int]]¶
@@ -1328,6 +1327,17 @@ Recurrent Neural Networks
+-
+property first_prediction_index: int¶
+Returns the index of the first predicted within the output of self.model.
+
+- Return type
+int
+
+
+
+
-
fit(series, past_covariates=None, future_covariates=None, val_series=None, val_past_covariates=None, val_future_covariates=None, trainer=None, verbose=None, epochs=0, max_samples_per_ts=None, num_loader_workers=0)¶
@@ -1716,22 +1726,14 @@ Recurrent Neural Networks
--
-property input_chunk_length: int¶
-
-- Return type
-int
-
-
-
-
-
--
-property likelihood: Optional[darts.utils.likelihood_models.Likelihood]¶
-
+
+-
+initialize_encoders()¶
+instantiates the SequentialEncoder object based on self._model_encoder_settings and parameter
+add_encoders
used at model creation
+
- Return type
-Optional
[Likelihood
]
+-
@@ -1977,21 +1979,13 @@ Recurrent Neural Networks
--
-property model_created: bool¶
-
-- Return type
-bool
-
-
-
-
-
--
-property model_params: dict¶
-
+-
+property min_train_series_length: int¶
+Class property defining the minimum required length for the training series;
+overriding the default value of 3 of ForecastingModel
+
- Return type
-dict
+int
@@ -2067,7 +2061,8 @@ Recurrent Neural Networksbool) – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
supported for probabilistic models with a likelihood, num_samples = 1 and n<=output_chunk_length.
-Default: False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -2242,11 +2237,6 @@ Recurrent Neural Networks
--
-supports_past_covariates = False¶
-
-
-
property supports_static_covariates: bool¶
@@ -2258,6 +2248,17 @@ Recurrent Neural Networks
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
+
+-
+untrained_model()¶
+Returns a new (untrained) model instance create with the same parameters.
+
+
-
property uses_future_covariates: bool¶
@@ -2300,6 +2307,529 @@ Recurrent Neural Networks
+-
+class darts.models.forecasting.rnn_model.CustomRNNModule(input_size, hidden_dim, num_layers, target_size, nr_params, dropout=0.0, **kwargs)[source]¶
+Bases: darts.models.forecasting.pl_forecasting_module.PLDualCovariatesModule
, abc.ABC
+This class allows to create custom RNN modules that can later be used with Darts’ RNNModel
.
+It adds the backbone that is required to be used with Darts’ TorchForecastingModel
and
+RNNModel
.
+To create a new module, subclass from CustomRNNModule
and:
+
+Define the architecture in the module constructor (__init__())
+Add the forward() method and define the logic of your module’s forward pass
+Use the custom module class when creating a new RNNModel
with parameter model.
+
+You can use darts.models.forecasting.rnn_model._RNNModule as an example.
+
+- Parameters
+
+input_size (int
) – The dimensionality of the input time series.
+hidden_dim (int
) – The number of features in the hidden state h of the RNN module.
+num_layers (int
) – The number of recurrent layers.
+target_size (int
) – The dimensionality of the output time series.
+nr_params (int
) – The number of parameters of the likelihood (or 1 if no likelihood is used).
+dropout (float
) – The fraction of neurons that are dropped in all-but-last RNN layers.
+**kwargs – all parameters required for darts.model.forecasting_models.PLForecastingModule
base class.
+
+
+
+Attributes
+
+
+
+
+
+
+automatic_optimization
+If set to False
you are responsible for calling .backward()
, .step()
, .zero_grad()
.
+
+current_epoch
+The current epoch in the Trainer
, or 0 if not attached.
+
+example_input_array
+The example input array is a specification of what the module can consume in the forward()
method.
+
+global_rank
+The index of the current process across all nodes and devices.
+
+global_step
+Total training batches seen across all epochs.
+
+hparams
+The collection of hyperparameters saved with save_hyperparameters()
.
+
+hparams_initial
+The collection of hyperparameters saved with save_hyperparameters()
.
+
+local_rank
+The index of the current process within a single node.
+
+logger
+Reference to the logger object in the Trainer.
+
+loggers
+Reference to the list of loggers in the Trainer.
+
+on_gpu
+Returns True
if this model is currently located on a GPU.
+
+output_chunk_length
+Number of time steps predicted at once by the model.
+
+
+
+
+
+
+
+
+
+device
+
+
+dtype
+
+
+epochs_trained
+
+
+fabric
+
+
+trainer
+
+
+
+
+Methods
+
+
+
+
+
+
+add_module
(name, module)
+Adds a child module to the current module.
+
+all_gather
(data[, group, sync_grads])
+Gather tensors or collections of tensors from multiple processes.
+
+apply
(fn)
+Applies fn
recursively to every submodule (as returned by .children()
) as well as self.
+
+backward
(loss, *args, **kwargs)
+Called to perform backward on the loss returned in training_step()
.
+
+bfloat16
()
+Casts all floating point parameters and buffers to bfloat16
datatype.
+
+buffers
([recurse])
+Returns an iterator over module buffers.
+
+children
()
+Returns an iterator over immediate children modules.
+
+clip_gradients
(optimizer[, ...])
+Handles gradient clipping internally.
+
+compile
(*args, **kwargs)
+Compile this Module's forward using torch.compile()
.
+
+configure_callbacks
()
+Configure model-specific callbacks.
+
+configure_gradient_clipping
(optimizer[, ...])
+Perform gradient clipping for the optimizer parameters.
+
+configure_model
()
+Hook to create modules in a strategy and precision aware context.
+
+configure_optimizers
()
+configures optimizers and learning rate schedulers for model optimization.
+
+configure_sharded_model
()
+Deprecated.
+
+configure_torch_metrics
(torch_metrics)
+process the torch_metrics parameter.
+
+cpu
()
+See torch.nn.Module.cpu()
.
+
+cuda
([device])
+Moves all model parameters and buffers to the GPU.
+
+double
()
+See torch.nn.Module.double()
.
+
+eval
()
+Sets the module in evaluation mode.
+
+extra_repr
()
+Set the extra representation of the module
+
+float
()
+See torch.nn.Module.float()
.
+
+forward
(x_in[, h])
+RNN Module forward.
+
+freeze
()
+Freeze all params for inference.
+
+get_buffer
(target)
+Returns the buffer given by target
if it exists, otherwise throws an error.
+
+get_extra_state
()
+Returns any extra state to include in the module's state_dict.
+
+get_parameter
(target)
+Returns the parameter given by target
if it exists, otherwise throws an error.
+
+get_submodule
(target)
+Returns the submodule given by target
if it exists, otherwise throws an error.
+
+half
()
+See torch.nn.Module.half()
.
+
+ipu
([device])
+Moves all model parameters and buffers to the IPU.
+
+load_from_checkpoint
([map_location, ...])
+Primary way of loading a model from a checkpoint.
+
+load_state_dict
(state_dict[, strict, assign])
+Copies parameters and buffers from state_dict
into this module and its descendants.
+
+log
(name, value[, prog_bar, logger, ...])
+Log a key, value pair.
+
+log_dict
(dictionary[, prog_bar, logger, ...])
+Log a dictionary of values at once.
+
+lr_scheduler_step
(scheduler, metric)
+Override this method to adjust the default way the Trainer
calls each scheduler.
+
+lr_schedulers
()
+Returns the learning rate scheduler(s) that are being used during training.
+
+manual_backward
(loss, *args, **kwargs)
+Call this directly from your training_step()
when doing optimizations manually.
+
+modules
()
+Returns an iterator over all modules in the network.
+
+named_buffers
([prefix, recurse, ...])
+Returns an iterator over module buffers, yielding both the name of the buffer as well as the buffer itself.
+
+named_children
()
+Returns an iterator over immediate children modules, yielding both the name of the module as well as the module itself.
+
+named_modules
([memo, prefix, remove_duplicate])
+Returns an iterator over all modules in the network, yielding both the name of the module as well as the module itself.
+
+named_parameters
([prefix, recurse, ...])
+Returns an iterator over module parameters, yielding both the name of the parameter as well as the parameter itself.
+
+on_after_backward
()
+Called after loss.backward()
and before optimizers are stepped.
+
+on_after_batch_transfer
(batch, dataloader_idx)
+Override to alter or apply batch augmentations to your batch after it is transferred to the device.
+
+on_before_backward
(loss)
+Called before loss.backward()
.
+
+on_before_batch_transfer
(batch, dataloader_idx)
+Override to alter or apply batch augmentations to your batch before it is transferred to the device.
+
+on_before_optimizer_step
(optimizer)
+Called before optimizer.step()
.
+
+on_before_zero_grad
(optimizer)
+Called after training_step()
and before optimizer.zero_grad()
.
+
+on_fit_end
()
+Called at the very end of fit.
+
+on_fit_start
()
+Called at the very beginning of fit.
+
+on_load_checkpoint
(checkpoint)
+Called by Lightning to restore your model.
+
+on_predict_batch_end
(outputs, batch, batch_idx)
+Called in the predict loop after the batch.
+
+on_predict_batch_start
(batch, batch_idx[, ...])
+Called in the predict loop before anything happens for that batch.
+
+on_predict_end
()
+Called at the end of predicting.
+
+on_predict_epoch_end
()
+Called at the end of predicting.
+
+on_predict_epoch_start
()
+Called at the beginning of predicting.
+
+on_predict_model_eval
()
+Sets the model to eval during the predict loop.
+
+on_predict_start
()
+Called at the beginning of predicting.
+
+on_save_checkpoint
(checkpoint)
+Called by Lightning when saving a checkpoint to give you a chance to store anything else you might want to save.
+
+on_test_batch_end
(outputs, batch, batch_idx)
+Called in the test loop after the batch.
+
+on_test_batch_start
(batch, batch_idx[, ...])
+Called in the test loop before anything happens for that batch.
+
+on_test_end
()
+Called at the end of testing.
+
+on_test_epoch_end
()
+Called in the test loop at the very end of the epoch.
+
+on_test_epoch_start
()
+Called in the test loop at the very beginning of the epoch.
+
+on_test_model_eval
()
+Sets the model to eval during the test loop.
+
+on_test_model_train
()
+Sets the model to train during the test loop.
+
+on_test_start
()
+Called at the beginning of testing.
+
+on_train_batch_end
(outputs, batch, batch_idx)
+Called in the training loop after the batch.
+
+on_train_batch_start
(batch, batch_idx)
+Called in the training loop before anything happens for that batch.
+
+on_train_end
()
+Called at the end of training before logger experiment is closed.
+
+on_train_epoch_end
()
+Called in the training loop at the very end of the epoch.
+
+on_train_epoch_start
()
+Called in the training loop at the very beginning of the epoch.
+
+on_train_start
()
+Called at the beginning of training after sanity check.
+
+on_validation_batch_end
(outputs, batch, ...)
+Called in the validation loop after the batch.
+
+on_validation_batch_start
(batch, batch_idx)
+Called in the validation loop before anything happens for that batch.
+
+on_validation_end
()
+Called at the end of validation.
+
+on_validation_epoch_end
()
+Called in the validation loop at the very end of the epoch.
+
+on_validation_epoch_start
()
+Called in the validation loop at the very beginning of the epoch.
+
+on_validation_model_eval
()
+Sets the model to eval during the val loop.
+
+on_validation_model_train
()
+Sets the model to train during the val loop.
+
+on_validation_model_zero_grad
()
+Called by the training loop to release gradients before entering the validation loop.
+
+on_validation_start
()
+Called at the beginning of validation.
+
+optimizer_step
(epoch, batch_idx, optimizer)
+Override this method to adjust the default way the Trainer
calls the optimizer.
+
+optimizer_zero_grad
(epoch, batch_idx, optimizer)
+Override this method to change the default behaviour of optimizer.zero_grad()
.
+
+optimizers
([use_pl_optimizer])
+Returns the optimizer(s) that are being used during training.
+
+parameters
([recurse])
+Returns an iterator over module parameters.
+
+predict_dataloader
()
+An iterable or collection of iterables specifying prediction samples.
+
+predict_step
(batch, batch_idx[, dataloader_idx])
+performs the prediction step
+
+prepare_data
()
+Use this to download and prepare data.
+
+print
(*args, **kwargs)
+Prints only from process 0.
+
+register_backward_hook
(hook)
+Registers a backward hook on the module.
+
+register_buffer
(name, tensor[, persistent])
+Adds a buffer to the module.
+
+register_forward_hook
(hook, *[, prepend, ...])
+Registers a forward hook on the module.
+
+register_forward_pre_hook
(hook, *[, ...])
+Registers a forward pre-hook on the module.
+
+register_full_backward_hook
(hook[, prepend])
+Registers a backward hook on the module.
+
+register_full_backward_pre_hook
(hook[, prepend])
+Registers a backward pre-hook on the module.
+
+register_load_state_dict_post_hook
(hook)
+Registers a post hook to be run after module's load_state_dict
is called.
+
+register_module
(name, module)
+Alias for add_module()
.
+
+register_parameter
(name, param)
+Adds a parameter to the module.
+
+register_state_dict_pre_hook
(hook)
+These hooks will be called with arguments: self
, prefix
, and keep_vars
before calling state_dict
on self
.
+
+requires_grad_
([requires_grad])
+Change if autograd should record operations on parameters in this module.
+
+save_hyperparameters
(*args[, ignore, frame, ...])
+Save arguments to hparams
attribute.
+
+set_extra_state
(state)
+This function is called from load_state_dict()
to handle any extra state found within the state_dict.
+
+set_predict_parameters
(n, num_samples, ...)
+to be set from TorchForecastingModel before calling trainer.predict() and reset at self.on_predict_end()
+
+setup
(stage)
+Called at the beginning of fit (train + validate), validate, test, or predict.
+
+share_memory
()
+See torch.Tensor.share_memory_()
+
+state_dict
(*args[, destination, prefix, ...])
+Returns a dictionary containing references to the whole state of the module.
+
+teardown
(stage)
+Called at the end of fit (train + validate), validate, test, or predict.
+
+test_dataloader
()
+An iterable or collection of iterables specifying test samples.
+
+test_step
(*args, **kwargs)
+Operates on a single batch of data from the test set.
+
+to
(*args, **kwargs)
+See torch.nn.Module.to()
.
+
+to_dtype
(dtype)
+Cast module precision (float32 by default) to another precision.
+
+to_empty
(*, device[, recurse])
+Moves the parameters and buffers to the specified device without copying storage.
+
+to_onnx
(file_path[, input_sample])
+Saves the model in ONNX format.
+
+to_torchscript
([file_path, method, ...])
+By default compiles the whole model to a ScriptModule
.
+
+toggle_optimizer
(optimizer)
+Makes sure only the gradients of the current optimizer's parameters are calculated in the training step to prevent dangling gradients in multiple-optimizer setup.
+
+train
([mode])
+Sets the module in training mode.
+
+train_dataloader
()
+An iterable or collection of iterables specifying training samples.
+
+training_step
(train_batch, batch_idx)
+performs the training step
+
+transfer_batch_to_device
(batch, device, ...)
+Override this hook if your DataLoader
returns tensors wrapped in a custom data structure.
+
+type
(dst_type)
+See torch.nn.Module.type()
.
+
+unfreeze
()
+Unfreeze all parameters for training.
+
+untoggle_optimizer
(optimizer)
+Resets the state of required gradients that were toggled with toggle_optimizer()
.
+
+val_dataloader
()
+An iterable or collection of iterables specifying validation samples.
+
+validation_step
(val_batch, batch_idx)
+performs the validation step
+
+xpu
([device])
+Moves all model parameters and buffers to the XPU.
+
+zero_grad
([set_to_none])
+Resets gradients of all model parameters.
+
+
+
+
+
+
+
+
+
+__call__
+
+
+set_mc_dropout
+
+
+
+
+
+-
+abstract forward(x_in, h=None)[source]¶
+RNN Module forward.
+
+- Parameters
+
+x_in (Tuple
) – Tuple of Tensors containing the features of the input sequence. The tuple has elements (past target,
+historic future covariates, future covariates, static covariates). The shape of the past target is
+(batch_size, input_length, input_size).
+h (Optional
[Tensor
]) – Optionally, the hidden state.
+
+
+- Returns
+Tuple of Tensors with elements (RNN output, hidden state). The RNN output Tensor has shape
+(batch_size, output_chunk_length, target_size, nr_params). It contains the outputs at every
+time step of the input sequence. During training the whole tensor is used as output, whereas during
+prediction we only use y[:, -1, :]. However, this module always returns the whole Tensor.
+
+- Return type
+Tuple[torch.Tensor, torch.Tensor]
+
+
+
+
+
+
diff --git a/generated_api/darts.models.forecasting.sf_auto_arima.html b/generated_api/darts.models.forecasting.sf_auto_arima.html
index dec1be7568..abb9157d15 100644
--- a/generated_api/darts.models.forecasting.sf_auto_arima.html
+++ b/generated_api/darts.models.forecasting.sf_auto_arima.html
@@ -931,13 +931,16 @@ StatsForecastAutoARIMA
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -984,7 +987,7 @@ StatsForecastAutoARIMAload
(path)
Loads the model from a given path or file handle.
-predict
(n[, future_covariates, num_samples])
+predict
(n[, future_covariates, num_samples, ...])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -1530,7 +1533,7 @@ StatsForecastAutoARIMA
-
-predict(n, future_covariates=None, num_samples=1, **kwargs)¶
+predict(n, future_covariates=None, num_samples=1, verbose=False, show_warnings=True, **kwargs)¶
Forecasts values for n time steps after the end of the training series.
If some future covariates were specified during the training, they must also be specified here.
@@ -1542,6 +1545,8 @@ StatsForecastAutoARIMAn time steps/indices after the end of the training target series.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -1683,6 +1688,17 @@ StatsForecastAutoARIMA
+
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.sf_auto_ces.html b/generated_api/darts.models.forecasting.sf_auto_ces.html
index 9e6c5a975d..33e71d0e08 100644
--- a/generated_api/darts.models.forecasting.sf_auto_ces.html
+++ b/generated_api/darts.models.forecasting.sf_auto_ces.html
@@ -905,13 +905,16 @@ StatsForecastAutoCES
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -958,7 +961,7 @@ StatsForecastAutoCESload
(path)
Loads the model from a given path or file handle.
-predict
(n[, num_samples, verbose])
+predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -1498,7 +1501,7 @@ StatsForecastAutoCES
-
-predict(n, num_samples=1, verbose=False)[source]¶
+predict(n, num_samples=1, verbose=False, show_warnings=True)[source]¶
Forecasts values for n time steps after the end of the training series.
- Parameters
@@ -1506,6 +1509,8 @@ StatsForecastAutoCESn (int
) – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -1647,6 +1652,17 @@ StatsForecastAutoCES
+
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.sf_auto_ets.html b/generated_api/darts.models.forecasting.sf_auto_ets.html
index 3bec7b521b..a3d80aa229 100644
--- a/generated_api/darts.models.forecasting.sf_auto_ets.html
+++ b/generated_api/darts.models.forecasting.sf_auto_ets.html
@@ -934,13 +934,16 @@ StatsForecastAutoETS
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -987,7 +990,7 @@ StatsForecastAutoETSload
(path)
Loads the model from a given path or file handle.
-predict
(n[, future_covariates, num_samples])
+predict
(n[, future_covariates, num_samples, ...])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -1533,7 +1536,7 @@ StatsForecastAutoETS
-
-predict(n, future_covariates=None, num_samples=1, **kwargs)¶
+predict(n, future_covariates=None, num_samples=1, verbose=False, show_warnings=True, **kwargs)¶
Forecasts values for n time steps after the end of the training series.
If some future covariates were specified during the training, they must also be specified here.
- Returns
@@ -1686,6 +1691,17 @@ StatsForecastAutoETS
+
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.sf_auto_theta.html b/generated_api/darts.models.forecasting.sf_auto_theta.html
index ccc816aa94..b4749ce41d 100644
--- a/generated_api/darts.models.forecasting.sf_auto_theta.html
+++ b/generated_api/darts.models.forecasting.sf_auto_theta.html
@@ -907,13 +907,16 @@ StatsForecastAutoTheta
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -960,7 +963,7 @@ StatsForecastAutoThetaload
(path)
Loads the model from a given path or file handle.
-predict
(n[, num_samples, verbose])
+predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -1500,7 +1503,7 @@ StatsForecastAutoTheta
-
-predict(n, num_samples=1, verbose=False)[source]¶
+predict(n, num_samples=1, verbose=False, show_warnings=True)[source]¶
Forecasts values for n time steps after the end of the training series.
- Parameters
@@ -1508,6 +1511,8 @@ StatsForecastAutoThetan (int
) – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -1649,6 +1654,17 @@ StatsForecastAutoTheta
+
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.tbats_model.html b/generated_api/darts.models.forecasting.tbats_model.html
index 49568c3b8b..082de070e7 100644
--- a/generated_api/darts.models.forecasting.tbats_model.html
+++ b/generated_api/darts.models.forecasting.tbats_model.html
@@ -946,13 +946,16 @@ BATS and TBATS
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -999,7 +1002,7 @@ BATS and TBATSload
(path)
Loads the model from a given path or file handle.
-predict
(n[, num_samples, verbose])
+predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -1539,14 +1542,16 @@ BATS and TBATS
-
-predict(n, num_samples=1, verbose=False)¶
+predict(n, num_samples=1, verbose=False, show_warnings=True)¶
Forecasts values for n time steps after the end of the training series.
- Parameters
-n – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
-num_samples – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
+
n (int
) – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
+num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -1688,6 +1693,17 @@ BATS and TBATS
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
@@ -1817,13 +1833,16 @@ BATS and TBATS
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1870,7 +1889,7 @@ BATS and TBATSload
(path)
Loads the model from a given path or file handle.
-predict
(n[, num_samples, verbose])
+predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -2410,14 +2429,16 @@ BATS and TBATS
-
-predict(n, num_samples=1, verbose=False)¶
+predict(n, num_samples=1, verbose=False, show_warnings=True)¶
Forecasts values for n time steps after the end of the training series.
- Parameters
-n – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
-num_samples – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
+
n (int
) – Forecast horizon - the number of time steps after the end of the series for which to produce predictions.
+num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -2559,6 +2580,17 @@ BATS and TBATS
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.tcn_model.html b/generated_api/darts.models.forecasting.tcn_model.html
index 3b3c81f70c..e735a0f9db 100644
--- a/generated_api/darts.models.forecasting.tcn_model.html
+++ b/generated_api/darts.models.forecasting.tcn_model.html
@@ -894,7 +894,7 @@ Temporal Convolutional NetworkTimeSeries is passed to the fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
-save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training.
+
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -923,8 +923,8 @@
Temporal Convolutional Networklink for more details.
Default: None
.
-pl_trainer_kwargs –
-- By default
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets that performs the training, validation and prediction processes. These presets include automatic
+
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -933,8 +933,6 @@
Temporal Convolutional Network"devices", and "auto_select_gpus". Some examples for setting the devices inside the pl_trainer_kwargs
dict:rgs``
dict:
-
-
{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
@@ -965,14 +963,11 @@ Temporal Convolutional Networktrainer in fit()
and predict()
.
+show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
-
-- show_warnings
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
-
-
References
- 1
@@ -1047,13 +1042,16 @@ Temporal Convolutional Network
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -2066,7 +2064,8 @@ Temporal Convolutional Networkbool) – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
supported for probabilistic models with a likelihood, num_samples = 1 and n<=output_chunk_length.
-Default: False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -2257,6 +2256,17 @@ Temporal Convolutional Network
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
to_cpu()¶
diff --git a/generated_api/darts.models.forecasting.tft_model.html b/generated_api/darts.models.forecasting.tft_model.html
index d2b794abe2..c5c685936d 100644
--- a/generated_api/darts.models.forecasting.tft_model.html
+++ b/generated_api/darts.models.forecasting.tft_model.html
@@ -929,7 +929,7 @@ Temporal Fusion Transformer (TFT)TimeSeries is passed to the fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
-save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training.
+
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -958,8 +958,8 @@
Temporal Fusion Transformer (TFT)link for more details.
Default: None
.
-pl_trainer_kwargs –
-- By default
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets that performs the training, validation and prediction processes. These presets include automatic
+
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -967,8 +967,6 @@
Temporal Fusion Transformer (TFT)pl_trainer_kwargs by specifying keys "accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-
-
{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
@@ -999,14 +997,11 @@ Temporal Fusion Transformer (TFT)trainer in fit()
and predict()
.
+show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
-
-- show_warnings
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
-
-
References
- 1
@@ -1095,13 +1090,16 @@ Temporal Fusion Transformer (TFT)
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1175,7 +1173,7 @@ Temporal Fusion Transformer (TFT)lr_find
(series[, past_covariates, ...])
A wrapper around PyTorch Lightning's Tuner.lr_find().
-predict
(n, *args, **kwargs)
+predict
(n[, series, past_covariates, ...])
Predict the n
time step following the end of the training series, or of the specified series
.
predict_from_dataset
(n, input_series_dataset)
@@ -2056,7 +2054,7 @@ Temporal Fusion Transformer (TFT)
-
-predict(n, *args, **kwargs)[source]¶
+predict(n, series=None, past_covariates=None, future_covariates=None, trainer=None, batch_size=None, verbose=None, n_jobs=1, roll_size=None, num_samples=1, num_loader_workers=0, mc_dropout=False, predict_likelihood_parameters=False, show_warnings=True)¶
Predict the n
time step following the end of the training series, or of the specified series
.
Prediction is performed with a PyTorch Lightning Trainer. It uses a default Trainer object from presets and
pl_trainer_kwargs
used at model creation. You can also use a custom Trainer with optional parameter
@@ -2086,35 +2084,36 @@
Temporal Fusion Transformer (TFT)
- Parameters
-n – The number of time steps after the end of the training time series for which to produce predictions
-series – Optionally, a series or sequence of series, representing the history of the target series whose
+
n (int
) – The number of time steps after the end of the training time series for which to produce predictions
+series (Union
[TimeSeries
, Sequence
[TimeSeries
], None
]) – Optionally, a series or sequence of series, representing the history of the target series whose
future is to be predicted. If specified, the method returns the forecasts of these
series. Otherwise, the method returns the forecast of the (single) training series.
-past_covariates – Optionally, the past-observed covariates series needed as inputs for the model.
+
past_covariates (Union
[TimeSeries
, Sequence
[TimeSeries
], None
]) – Optionally, the past-observed covariates series needed as inputs for the model.
They must match the covariates used for training in terms of dimension.
-future_covariates – Optionally, the future-known covariates series needed as inputs for the model.
+
future_covariates (Union
[TimeSeries
, Sequence
[TimeSeries
], None
]) – Optionally, the future-known covariates series needed as inputs for the model.
They must match the covariates used for training in terms of dimension.
-trainer – Optionally, a custom PyTorch-Lightning Trainer object to perform prediction. Using a custom trainer
+
trainer (Optional
[Trainer
]) – Optionally, a custom PyTorch-Lightning Trainer object to perform prediction. Using a custom trainer
will override Darts’ default trainer.
-batch_size – Size of batches during prediction. Defaults to the models’ training batch_size
value.
-verbose – Optionally, whether to print the progress. Ignored if there is a ProgressBar callback in
+
batch_size (Optional
[int
]) – Size of batches during prediction. Defaults to the models’ training batch_size
value.
+verbose (Optional
[bool
]) – Optionally, whether to print the progress. Ignored if there is a ProgressBar callback in
pl_trainer_kwargs.
-n_jobs – The number of jobs to run in parallel. -1
means using all processors. Defaults to 1
.
-roll_size – For self-consuming predictions, i.e. n > output_chunk_length
, determines how many
+
n_jobs (int
) – The number of jobs to run in parallel. -1
means using all processors. Defaults to 1
.
+roll_size (Optional
[int
]) – For self-consuming predictions, i.e. n > output_chunk_length
, determines how many
outputs of the model are fed back into it at every iteration of feeding the predicted target
(and optionally future covariates) back into the model. If this parameter is not provided,
it will be set output_chunk_length
by default.
-num_samples – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
+
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
-num_loader_workers – Optionally, an integer specifying the num_workers
to use in PyTorch DataLoader
instances,
+
num_loader_workers (int
) – Optionally, an integer specifying the num_workers
to use in PyTorch DataLoader
instances,
for the inference/prediction dataset loaders (if any).
A larger number of workers can sometimes increase performance, but can also incur extra overheads
and increase memory usage, as more batches are loaded in parallel.
-mc_dropout – Optionally, enable monte carlo dropout for predictions using neural network based models.
+
mc_dropout (bool
) – Optionally, enable monte carlo dropout for predictions using neural network based models.
This allows bayesian approximation by specifying an implicit prior over learned models.
-predict_likelihood_parameters – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
+
predict_likelihood_parameters (bool
) – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
supported for probabilistic models with a likelihood, num_samples = 1 and n<=output_chunk_length.
-Default: False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -2311,6 +2310,17 @@ Temporal Fusion Transformer (TFT)
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
to_cpu()¶
diff --git a/generated_api/darts.models.forecasting.theta.html b/generated_api/darts.models.forecasting.theta.html
index 87f1bbeed9..ce464a9c69 100644
--- a/generated_api/darts.models.forecasting.theta.html
+++ b/generated_api/darts.models.forecasting.theta.html
@@ -923,13 +923,16 @@ Theta Method
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -976,7 +979,7 @@ Theta Methodload
(path)
Loads the model from a given path or file handle.
-predict
(n[, num_samples, verbose])
+predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -1519,7 +1522,7 @@ Theta Method
-
-predict(n, num_samples=1, verbose=False)[source]¶
+predict(n, num_samples=1, verbose=False, show_warnings=True)[source]¶
Forecasts values for n time steps after the end of the training series.
- Returns
@@ -1695,6 +1700,17 @@ Theta Method
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
@@ -1812,13 +1828,16 @@ Theta Method
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1865,7 +1884,7 @@ Theta Methodload
(path)
Loads the model from a given path or file handle.
-predict
(n[, num_samples, verbose])
+predict
(n[, num_samples, verbose, show_warnings])
Forecasts values for n time steps after the end of the training series.
residuals
(series[, past_covariates, ...])
@@ -2405,7 +2424,7 @@ Theta Method
-
-predict(n, num_samples=1, verbose=False)[source]¶
+predict(n, num_samples=1, verbose=False, show_warnings=True)[source]¶
Forecasts values for n time steps after the end of the training series.
- Returns
@@ -2554,6 +2575,17 @@ Theta Method
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.tide_model.html b/generated_api/darts.models.forecasting.tide_model.html
index c1a3c98e1a..29b4304682 100644
--- a/generated_api/darts.models.forecasting.tide_model.html
+++ b/generated_api/darts.models.forecasting.tide_model.html
@@ -907,7 +907,7 @@ Time-series Dense Encoder (TiDE)TimeSeries is passed to the fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
-save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training.
+
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -936,8 +936,8 @@
Time-series Dense Encoder (TiDE)link for more details.
Default: None
.
-pl_trainer_kwargs –
-- By default
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets that performs the training, validation and prediction processes. These presets include automatic
+
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -945,8 +945,6 @@
Time-series Dense Encoder (TiDE)pl_trainer_kwargs by specifying keys "accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-
-
{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
@@ -977,14 +975,11 @@ Time-series Dense Encoder (TiDE)trainer in fit()
and predict()
.
+show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
-
-- show_warnings
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
-
-
References
- 1
@@ -1064,13 +1059,16 @@ Time-series Dense Encoder (TiDE)
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1144,7 +1142,7 @@ Time-series Dense Encoder (TiDE)lr_find
(series[, past_covariates, ...])
A wrapper around PyTorch Lightning's Tuner.lr_find().
-predict
(n, *args, **kwargs)
+predict
(n[, series, past_covariates, ...])
Predict the n
time step following the end of the training series, or of the specified series
.
predict_from_dataset
(n, input_series_dataset)
@@ -2025,7 +2023,7 @@ Time-series Dense Encoder (TiDE)
-
-predict(n, *args, **kwargs)[source]¶
+predict(n, series=None, past_covariates=None, future_covariates=None, trainer=None, batch_size=None, verbose=None, n_jobs=1, roll_size=None, num_samples=1, num_loader_workers=0, mc_dropout=False, predict_likelihood_parameters=False, show_warnings=True)¶
Predict the n
time step following the end of the training series, or of the specified series
.
Prediction is performed with a PyTorch Lightning Trainer. It uses a default Trainer object from presets and
pl_trainer_kwargs
used at model creation. You can also use a custom Trainer with optional parameter
@@ -2055,35 +2053,36 @@
Time-series Dense Encoder (TiDE)
- Parameters
-n – The number of time steps after the end of the training time series for which to produce predictions
-series – Optionally, a series or sequence of series, representing the history of the target series whose
+
n (int
) – The number of time steps after the end of the training time series for which to produce predictions
+series (Union
[TimeSeries
, Sequence
[TimeSeries
], None
]) – Optionally, a series or sequence of series, representing the history of the target series whose
future is to be predicted. If specified, the method returns the forecasts of these
series. Otherwise, the method returns the forecast of the (single) training series.
-past_covariates – Optionally, the past-observed covariates series needed as inputs for the model.
+
past_covariates (Union
[TimeSeries
, Sequence
[TimeSeries
], None
]) – Optionally, the past-observed covariates series needed as inputs for the model.
They must match the covariates used for training in terms of dimension.
-future_covariates – Optionally, the future-known covariates series needed as inputs for the model.
+
future_covariates (Union
[TimeSeries
, Sequence
[TimeSeries
], None
]) – Optionally, the future-known covariates series needed as inputs for the model.
They must match the covariates used for training in terms of dimension.
-trainer – Optionally, a custom PyTorch-Lightning Trainer object to perform prediction. Using a custom trainer
+
trainer (Optional
[Trainer
]) – Optionally, a custom PyTorch-Lightning Trainer object to perform prediction. Using a custom trainer
will override Darts’ default trainer.
-batch_size – Size of batches during prediction. Defaults to the models’ training batch_size
value.
-verbose – Optionally, whether to print the progress. Ignored if there is a ProgressBar callback in
+
batch_size (Optional
[int
]) – Size of batches during prediction. Defaults to the models’ training batch_size
value.
+verbose (Optional
[bool
]) – Optionally, whether to print the progress. Ignored if there is a ProgressBar callback in
pl_trainer_kwargs.
-n_jobs – The number of jobs to run in parallel. -1
means using all processors. Defaults to 1
.
-roll_size – For self-consuming predictions, i.e. n > output_chunk_length
, determines how many
+
n_jobs (int
) – The number of jobs to run in parallel. -1
means using all processors. Defaults to 1
.
+roll_size (Optional
[int
]) – For self-consuming predictions, i.e. n > output_chunk_length
, determines how many
outputs of the model are fed back into it at every iteration of feeding the predicted target
(and optionally future covariates) back into the model. If this parameter is not provided,
it will be set output_chunk_length
by default.
-num_samples – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
+
num_samples (int
) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
-num_loader_workers – Optionally, an integer specifying the num_workers
to use in PyTorch DataLoader
instances,
+
num_loader_workers (int
) – Optionally, an integer specifying the num_workers
to use in PyTorch DataLoader
instances,
for the inference/prediction dataset loaders (if any).
A larger number of workers can sometimes increase performance, but can also incur extra overheads
and increase memory usage, as more batches are loaded in parallel.
-mc_dropout – Optionally, enable monte carlo dropout for predictions using neural network based models.
+
mc_dropout (bool
) – Optionally, enable monte carlo dropout for predictions using neural network based models.
This allows bayesian approximation by specifying an implicit prior over learned models.
-predict_likelihood_parameters – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
+
predict_likelihood_parameters (bool
) – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
supported for probabilistic models with a likelihood, num_samples = 1 and n<=output_chunk_length.
-Default: False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -2280,6 +2279,17 @@ Time-series Dense Encoder (TiDE)
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
to_cpu()¶
diff --git a/generated_api/darts.models.forecasting.transformer_model.html b/generated_api/darts.models.forecasting.transformer_model.html
index d0431f3241..569af52b5d 100644
--- a/generated_api/darts.models.forecasting.transformer_model.html
+++ b/generated_api/darts.models.forecasting.transformer_model.html
@@ -907,7 +907,7 @@ Transformer ModelTimeSeries is passed to the fit()
method). Default: 1
.
force_reset – If set to True
, any previously-existing model with the same name will be reset (all checkpoints will
be discarded). Default: False
.
-save_checkpoints – Whether or not to automatically save the untrained model and checkpoints from training.
+
save_checkpoints – Whether to automatically save the untrained model and checkpoints from training.
To load the model from checkpoint, call MyModelClass.load_from_checkpoint()
, where
MyModelClass
is the TorchForecastingModel
class that was used (such as TFTModel
,
NBEATSModel
, etc.). If set to False
, the model can still be manually saved using
@@ -936,8 +936,8 @@
Transformer Modellink for more details.
Default: None
.
-pl_trainer_kwargs –
-- By default
TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets that performs the training, validation and prediction processes. These presets include automatic
+
pl_trainer_kwargs –
By default TorchForecastingModel
creates a PyTorch Lightning Trainer with several useful presets
+that performs the training, validation and prediction processes. These presets include automatic
checkpointing, tensorboard logging, setting the torch device and more.
With pl_trainer_kwargs
you can add additional kwargs to instantiate the PyTorch Lightning trainer
object. Check the PL Trainer documentation for more information about the
@@ -945,8 +945,6 @@
Transformer Modelpl_trainer_kwargs by specifying keys "accelerator",
"devices", and "auto_select_gpus"
. Some examples for setting the devices inside the pl_trainer_kwargs
dict:
-
-
{"accelerator": "cpu"}
for CPU,
{"accelerator": "gpu", "devices": [i]}
to use only GPU i
(i
must be an integer),
@@ -977,14 +975,11 @@ Transformer Modeltrainer in fit()
and predict()
.
+show_warnings – whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
+your forecasting use case. Default: False
.
-
-- show_warnings
whether to show warnings raised from PyTorch Lightning. Useful to detect potential issues of
-your forecasting use case. Default: False
.
-
-
References
- 1
@@ -1071,13 +1066,16 @@ Transformer Model
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -2090,7 +2088,8 @@ Transformer Modelbool) – If set to True, the model predict the parameters of its Likelihood parameters instead of the target. Only
supported for probabilistic models with a likelihood, num_samples = 1 and n<=output_chunk_length.
-Default: False
+Default: False
.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -2281,6 +2280,17 @@ Transformer Model
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
to_cpu()¶
diff --git a/generated_api/darts.models.forecasting.varima.html b/generated_api/darts.models.forecasting.varima.html
index dfcf93db4d..73ada0ef7c 100644
--- a/generated_api/darts.models.forecasting.varima.html
+++ b/generated_api/darts.models.forecasting.varima.html
@@ -942,13 +942,16 @@ VARIMA
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1541,7 +1544,7 @@ VARIMA
-
-predict(n, series=None, future_covariates=None, num_samples=1, **kwargs)¶
+predict(n, series=None, future_covariates=None, num_samples=1, verbose=False, show_warnings=True, **kwargs)¶
If the series parameter is not set, forecasts values for n time steps after the end of the training
series. If some future covariates were specified during the training, they must also be specified here.
If the series parameter is set, forecasts values for n time steps after the end of the new target
@@ -1560,6 +1563,8 @@
VARIMAint) – Number of times a prediction is sampled from a probabilistic model. Should be left set to 1
for deterministic models.
+verbose (bool
) – Optionally, set the prediction verbosity. Not effective for all models.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Returns
@@ -1701,6 +1706,17 @@ VARIMA
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.models.forecasting.xgboost.html b/generated_api/darts.models.forecasting.xgboost.html
index f722595532..57040a92f2 100644
--- a/generated_api/darts.models.forecasting.xgboost.html
+++ b/generated_api/darts.models.forecasting.xgboost.html
@@ -983,13 +983,16 @@ XGBoost Model
Whether model supports static covariates
-
+
+Whether the model supports prediction for any input series.
+
+
Whether the model uses future covariates, once fitted.
-
+
Whether the model uses past covariates, once fitted.
-
+
Whether the model uses static covariates, once fitted.
@@ -1662,6 +1665,7 @@ XGBoost ModelFalse
**kwargs (dict, optional) – Additional keyword arguments passed to the predict method of the model. Only works with
univariate target series.
+show_warnings (bool
) – Optionally, control whether warnings are shown. Not effective for all models.
- Return type
@@ -1801,6 +1805,17 @@ XGBoost Model
+-
+property supports_transferrable_series_prediction: bool¶
+Whether the model supports prediction for any input series.
+
+- Return type
+bool
+
+
+
+
-
property uses_future_covariates: bool¶
diff --git a/generated_api/darts.utils.data.shifted_dataset.html b/generated_api/darts.utils.data.shifted_dataset.html
index 48c948f6cf..1d19eefb4d 100644
--- a/generated_api/darts.utils.data.shifted_dataset.html
+++ b/generated_api/darts.utils.data.shifted_dataset.html
@@ -934,7 +934,7 @@ Shifted Training Datasetint) – The length of the emitted past series.
output_chunk_length (int
) – The length of the emitted future series.
shift (int
) – The number of time steps by which to shift the output chunks relative to the input chunks.
-shift_covariates (bool
) – Whether or not to shift the covariates forward the same way as the target.
+
shift_covariates (bool
) – Whether to shift the covariates forward the same way as the target.
FutureCovariatesModel’s require this set to True, while PastCovariatesModel’s require this set to False.
max_samples_per_ts (Optional
[int
]) – This is an upper bound on the number of (input, output, input_covariates) tuples that can be produced
per time series. It can be used in order to have an upper bound on the total size of the dataset and
diff --git a/genindex.html b/genindex.html
index 9ab44306e8..fe81babb6a 100644
--- a/genindex.html
+++ b/genindex.html
@@ -1435,9 +1435,13 @@
C
- (darts.models.forecasting.pl_forecasting_module.PLSplitCovariatesModule property)
+ - CustomBlockRNNModule (class in darts.models.forecasting.block_rnn_model)
+
- CustomFeedForwardDecoderLayer (class in darts.models.components.transformer)
- CustomFeedForwardEncoderLayer (class in darts.models.components.transformer)
+
+ - CustomRNNModule (class in darts.models.forecasting.rnn_model)
- CyclicTemporalEncoder (class in darts.dataprocessing.encoders.encoders)
@@ -1984,13 +1988,6 @@ D
- module
-
-
- -
- darts.models.forecasting.block_rnn_model
-
-
- - module
-
@@ -2119,13 +2116,6 @@
D
- module
-
-
- -
- darts.models.forecasting.rnn_model
-
-
- - module
-
@@ -2777,11 +2767,9 @@
E
- EnsembleSklearnAggregator (class in darts.ad.aggregators.ensemble_sklearn_aggregator)
- - epochs_trained (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
- epochs_trained (darts.models.forecasting.dlinear.DLinearModel property)
- - (darts.models.forecasting.dlinear.DLinearModel property)
-
- (darts.models.forecasting.nbeats.NBEATSModel property)
- (darts.models.forecasting.nhits.NHiTSModel property)
@@ -2799,8 +2787,6 @@
E
- (darts.models.forecasting.pl_forecasting_module.PLPastCovariatesModule property)
- (darts.models.forecasting.pl_forecasting_module.PLSplitCovariatesModule property)
-
- - (darts.models.forecasting.rnn_model.RNNModel property)
- (darts.models.forecasting.tcn_model.TCNModel property)
@@ -3167,6 +3153,12 @@ F
- find_list_index() (darts.utils.data.inference_dataset.GenericInferenceDataset static method)
+ - first_prediction_index (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
+
- first_value() (darts.timeseries.TimeSeries method)
- first_values() (darts.timeseries.TimeSeries method)
@@ -3491,6 +3483,8 @@
F
- (darts.models.components.transformer.CustomFeedForwardDecoderLayer method)
- (darts.models.components.transformer.CustomFeedForwardEncoderLayer method)
+
+ - (darts.models.forecasting.block_rnn_model.CustomBlockRNNModule method)
- (darts.models.forecasting.pl_forecasting_module.PLDualCovariatesModule method)
@@ -3503,6 +3497,8 @@ F
- (darts.models.forecasting.pl_forecasting_module.PLPastCovariatesModule method)
- (darts.models.forecasting.pl_forecasting_module.PLSplitCovariatesModule method)
+
+ - (darts.models.forecasting.rnn_model.CustomRNNModule method)
- (darts.utils.losses.MAELoss method)
@@ -4527,20 +4523,22 @@ I
- init_validation_tqdm() (darts.utils.callbacks.TFMProgressBar method)
+ - initialize_encoders() (darts.models.forecasting.block_rnn_model.BlockRNNModel method)
+
+
- inplace (darts.utils.torch.MonteCarloDropout attribute)
- - input_chunk_length (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
- input_chunk_length (darts.models.forecasting.dlinear.DLinearModel property)
- - (darts.models.forecasting.dlinear.DLinearModel property)
-
- (darts.models.forecasting.nbeats.NBEATSModel property)
- (darts.models.forecasting.nhits.NHiTSModel property)
- (darts.models.forecasting.nlinear.NLinearModel property)
-
- - (darts.models.forecasting.rnn_model.RNNModel property)
- (darts.models.forecasting.tcn_model.TCNModel property)
@@ -4749,18 +4747,14 @@ L
- Likelihood (class in darts.utils.likelihood_models)
- - likelihood (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
- likelihood (darts.models.forecasting.dlinear.DLinearModel property)
- - (darts.models.forecasting.dlinear.DLinearModel property)
-
- (darts.models.forecasting.nbeats.NBEATSModel property)
- (darts.models.forecasting.nhits.NHiTSModel property)
- (darts.models.forecasting.nlinear.NLinearModel property)
-
- - (darts.models.forecasting.rnn_model.RNNModel property)
- (darts.models.forecasting.tcn_model.TCNModel property)
@@ -5373,6 +5367,12 @@ M
- (darts.models.forecasting.varima.VARIMA property)
- (darts.models.forecasting.xgboost.XGBModel property)
+
+
+ - min_train_series_length (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
+
- MinTReconciliator (class in darts.dataprocessing.transformers.reconciliation)
@@ -5395,18 +5395,14 @@
M
- (darts.explainability.tft_explainer.TFTExplainer attribute)
- - model_created (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
- model_created (darts.models.forecasting.dlinear.DLinearModel property)
- - (darts.models.forecasting.dlinear.DLinearModel property)
-
- (darts.models.forecasting.nbeats.NBEATSModel property)
- (darts.models.forecasting.nhits.NHiTSModel property)
- (darts.models.forecasting.nlinear.NLinearModel property)
-
- - (darts.models.forecasting.rnn_model.RNNModel property)
- (darts.models.forecasting.tcn_model.TCNModel property)
@@ -5431,8 +5427,6 @@ M
- (darts.models.forecasting.baselines.NaiveMovingAverage property)
- (darts.models.forecasting.baselines.NaiveSeasonal property)
-
- - (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
- (darts.models.forecasting.catboost_model.CatBoostModel property)
@@ -5467,8 +5461,6 @@ M
- (darts.models.forecasting.regression_model.RegressionModel property)
- (darts.models.forecasting.regression_model.RegressionModelWithCategoricalCovariates property)
-
- - (darts.models.forecasting.rnn_model.RNNModel property)
- (darts.models.forecasting.sf_auto_arima.StatsForecastAutoARIMA property)
@@ -5660,8 +5652,6 @@ M
- darts.models.forecasting.auto_arima
- darts.models.forecasting.baselines
-
- - darts.models.forecasting.block_rnn_model
- darts.models.forecasting.catboost_model
@@ -5698,8 +5688,6 @@ M
- darts.models.forecasting.regression_ensemble_model
- darts.models.forecasting.regression_model
-
- - darts.models.forecasting.rnn_model
- darts.models.forecasting.sf_auto_arima
@@ -8964,8 +8952,6 @@ S
- (darts.models.forecasting.baselines.NaiveMovingAverage property)
- (darts.models.forecasting.baselines.NaiveSeasonal property)
-
- - (darts.models.forecasting.block_rnn_model.BlockRNNModel attribute)
- (darts.models.forecasting.catboost_model.CatBoostModel property)
@@ -9328,8 +9314,6 @@ S
- (darts.models.forecasting.regression_model.RegressionModel property)
- (darts.models.forecasting.regression_model.RegressionModelWithCategoricalCovariates property)
-
- - (darts.models.forecasting.rnn_model.RNNModel attribute)
- (darts.models.forecasting.sf_auto_arima.StatsForecastAutoARIMA property)
@@ -9440,6 +9424,88 @@ S
- (darts.models.forecasting.varima.VARIMA property)
- (darts.models.forecasting.xgboost.XGBModel property)
+
+
+ - supports_transferrable_series_prediction (darts.models.forecasting.arima.ARIMA property)
+
+
+ - (darts.models.forecasting.auto_arima.AutoARIMA property)
+
+ - (darts.models.forecasting.baselines.NaiveDrift property)
+
+ - (darts.models.forecasting.baselines.NaiveEnsembleModel property)
+
+ - (darts.models.forecasting.baselines.NaiveMean property)
+
+ - (darts.models.forecasting.baselines.NaiveMovingAverage property)
+
+ - (darts.models.forecasting.baselines.NaiveSeasonal property)
+
+ - (darts.models.forecasting.block_rnn_model.BlockRNNModel property)
+
+ - (darts.models.forecasting.catboost_model.CatBoostModel property)
+
+ - (darts.models.forecasting.croston.Croston property)
+
+ - (darts.models.forecasting.dlinear.DLinearModel property)
+
+ - (darts.models.forecasting.ensemble_model.EnsembleModel property)
+
+ - (darts.models.forecasting.exponential_smoothing.ExponentialSmoothing property)
+
+ - (darts.models.forecasting.fft.FFT property)
+
+ - (darts.models.forecasting.kalman_forecaster.KalmanForecaster property)
+
+ - (darts.models.forecasting.lgbm.LightGBMModel property)
+
+ - (darts.models.forecasting.linear_regression_model.LinearRegressionModel property)
+
+ - (darts.models.forecasting.nbeats.NBEATSModel property)
+
+ - (darts.models.forecasting.nhits.NHiTSModel property)
+
+ - (darts.models.forecasting.nlinear.NLinearModel property)
+
+ - (darts.models.forecasting.prophet_model.Prophet property)
+
+ - (darts.models.forecasting.random_forest.RandomForest property)
+
+ - (darts.models.forecasting.regression_ensemble_model.RegressionEnsembleModel property)
+
+ - (darts.models.forecasting.regression_model.RegressionModel property)
+
+ - (darts.models.forecasting.regression_model.RegressionModelWithCategoricalCovariates property)
+
+ - (darts.models.forecasting.rnn_model.RNNModel property)
+
+ - (darts.models.forecasting.sf_auto_arima.StatsForecastAutoARIMA property)
+
+ - (darts.models.forecasting.sf_auto_ces.StatsForecastAutoCES property)
+
+ - (darts.models.forecasting.sf_auto_ets.StatsForecastAutoETS property)
+
+ - (darts.models.forecasting.sf_auto_theta.StatsForecastAutoTheta property)
+
+ - (darts.models.forecasting.tbats_model.BATS property)
+
+ - (darts.models.forecasting.tbats_model.TBATS property)
+
+ - (darts.models.forecasting.tcn_model.TCNModel property)
+
+ - (darts.models.forecasting.tft_model.TFTModel property)
+
+ - (darts.models.forecasting.theta.FourTheta property)
+
+ - (darts.models.forecasting.theta.Theta property)
+
+ - (darts.models.forecasting.tide_model.TiDEModel property)
+
+ - (darts.models.forecasting.transformer_model.TransformerModel property)
+
+ - (darts.models.forecasting.varima.VARIMA property)
+
+ - (darts.models.forecasting.xgboost.XGBModel property)
- swapaxes() (darts.dataprocessing.dtw.cost_matrix.DenseCostMatrix method)
@@ -10236,6 +10302,12 @@
U
- (darts.models.forecasting.pl_forecasting_module.PLPastCovariatesModule method)
- (darts.models.forecasting.pl_forecasting_module.PLSplitCovariatesModule method)
+
+
+ - untrained_model() (darts.models.forecasting.block_rnn_model.BlockRNNModel method)
+
+
- uri (darts.datasets.dataset_loaders.DatasetLoaderMetadata attribute)
diff --git a/index.html b/index.html
index a5a129f2f4..30454a112c 100644
--- a/index.html
+++ b/index.html
@@ -258,7 +258,7 @@
Time Series Made Easy in Python
-
+
@@ -463,28 +463,28 @@ Forecasting Models
-🟩 🟥
+🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
-🟩 🟥
+🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
-🟩 🟥
+🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
-🟩 🟥
+🟩 🟩
🟥 🟥 🟥
🟥 🟥
🟥
@@ -507,7 +507,7 @@ Forecasting Models
@@ -566,7 +566,7 @@ Forecasting ModelsProphet (see install notes)
+
🟩 🟥
🟥 🟩 🟥
@@ -622,7 +622,7 @@ Forecasting Models
+
🟩 🟩
🟩 🟩 🟩
diff --git a/objects.inv b/objects.inv
index 3616fcef22..7c95c69b5a 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/py-modindex.html b/py-modindex.html
index 823a276528..f11325e8ec 100644
--- a/py-modindex.html
+++ b/py-modindex.html
@@ -564,11 +564,6 @@ Python Module Index
darts.models.forecasting.baselines
-
-
-
- darts.models.forecasting.block_rnn_model
-
@@ -659,11 +654,6 @@ Python Module Index
darts.models.forecasting.regression_model
-
-
-
- darts.models.forecasting.rnn_model
-
diff --git a/quickstart/00-quickstart.html b/quickstart/00-quickstart.html
index 465d0b1a5e..1d51c2ee3f 100644
--- a/quickstart/00-quickstart.html
+++ b/quickstart/00-quickstart.html
@@ -723,7 +723,7 @@ Some TimeSeries
-series1, series2 = series.split_before(0.75)
+series1, series2 = series.split_after(0.75)
series1.plot()
series2.plot()
diff --git a/quickstart/00-quickstart.ipynb b/quickstart/00-quickstart.ipynb
index 027ceb95e7..c4bf8a58f6 100644
--- a/quickstart/00-quickstart.ipynb
+++ b/quickstart/00-quickstart.ipynb
@@ -134,7 +134,7 @@
"outputs": [
{
"data": {
- "image/png": "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2uXzFgRBCJROIegVFRVN9u3atYt3332XuLg4rrzyStf+CRMmMHnyZIqLi3n11Vd9at8W8BkzZmCM4fLLL2fHjh1+Cbo9Mbpp0yYqKysZPHgwJ510km8DFARB8IEOL+iPPvoo8fHxfP/7328Q7/3kk08CcMkll9CjR48G11x++eUArhS1nti6dSubNm0iOTmZ119/nfnz51NdXc3VV1/Nnj176Nq1KyNHjmzxejt0cc2aNVRXV7tcL+PGjfNvoIIgCF7o0IJeV1fnilhZvnw5I0aM4O9//zuVlZUuX7e9YtOdCy64gIiICD744AOKioo83sO2zufMmUNMTAz33XcfCQkJLuv8zDPPJCqq5bTyGRkZDB06lNLSUj799FMRdEEQQkaHFvTVq1eTk5NDRkYGN9xwA8YYfvazn/H73/+ew4cPM3r06GaFMzU1lcmTJ1NdXe1KZtUcxhheeuklwLL0wVoB+otf/MJ1jid3i83s2bMBePPNN0XQBUEIGR1a0J977jnAihp57LHHWLhwIZWVldx7772AZZ23lBPFTmblye3y3nvv8fXXX9OnT58GlXluueUWUlNTAZpUo28Ou2Tb0qVL2b59OzExMQGvChUEQWiCp5jGEP8ExPHjx01iYqIBzLZt24wxxhQXF5vMzEwDmK5du5qSkpIWr8/NzTWAiY+PN2VlZU2O19bWmsGDBxvAPPLII02Or1+/3vzjH//wqWJPdXW1SUlJcRWtGDdunB8jDQ5hHlfrFzKW8ETG0mZ0vjj0l19+mdLSUsaNG+fKUNitWzeee+45unbtys9//nOPmQbT09MZP3485eXlLrdLYWEhF198MX/4wx9YsmQJO3bsoH///lx99dVNrj/ttNO46qqrfMqKGBUVxcyZM12vxd0iCEIo6JBFolevXs2NN94IwMKFCxscmzx5MkVFRa64c09ccsklrF27lmeffZaLLrqIP//5z7zyyiu88sorrnMWL14clGo/559/Pi+88AIggi4IQmjocBb6+vXrmTVrFsePH2fBggVcddVVTc7xRcwBfvSjHxEVFcW7777L3r17WbJkCYDL4h84cCBXXHFFUPr93e9+1xUNI4IuCEIo6FAWul0js6SkhAsvvJCnnnoqoARUvXr1Yvbs2SxbtozLLruMwsJChg4dyldffcWaNWtISEhodX7yxiQnJ/Poo49y4MAB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",
+ "image/png": "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",
"text/plain": [
"