def forward(
        self, x_in: PLModuleInput, h: Optional[torch.Tensor] = None
    ) -> tuple[torch.Tensor, torch.Tensor]:
        """RNN 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)`.
        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
RNN 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)`.
        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.
        
darts/models/forecasting/rnn_model.py