credit.ensemble.bred_vector
===========================

.. py:module:: credit.ensemble.bred_vector


Attributes
----------

.. autoapisummary::

   credit.ensemble.bred_vector.logger


Classes
-------

.. autoapisummary::

   credit.ensemble.bred_vector.BredVector


Functions
---------

.. autoapisummary::

   credit.ensemble.bred_vector.generate_bred_vectors
   credit.ensemble.bred_vector.generate_bred_vectors_cycle
   credit.ensemble.bred_vector.clone_dataset
   credit.ensemble.bred_vector.adjust_start_times


Module Contents
---------------

.. py:class:: BredVector(model: Callable[[torch.Tensor], torch.Tensor], noise_amplitude: float = 0.15, num_cycles: int = 5, integration_steps: int = 1, perturbation_method: Optional[Callable[[torch.Tensor, collections.OrderedDict[str, numpy.ndarray]], torch.Tensor]] = None, hemispheric_rescale: Optional[Callable[[torch.Tensor, torch.Tensor], torch.Tensor]] = None, terrain_file: str = None, perturb_channel_idx: int = None, ensemble_perturb: bool = False, clamp: bool = False, clamp_min: float = None, clamp_max: float = None, input_static_dim: int = 3, varnum_diag: int = 0, post_conf: dict = {})

   .. py:attribute:: model


   .. py:attribute:: noise_amplitude
      :value: 0.15



   .. py:attribute:: num_cycles
      :value: 5



   .. py:attribute:: integration_steps
      :value: 1



   .. py:attribute:: perturbation_method
      :value: None



   .. py:attribute:: hemispheric_rescale


   .. py:attribute:: ensemble_perturb
      :value: False



   .. py:attribute:: perturb_channel_idx
      :value: None



   .. py:attribute:: clamp
      :value: False



   .. py:attribute:: clamp_min
      :value: None



   .. py:attribute:: clamp_max
      :value: None



   .. py:attribute:: input_static_dim
      :value: 3



   .. py:attribute:: varnum_diag
      :value: 0



   .. py:attribute:: post_conf


   .. py:attribute:: flag_mass_conserve
      :value: False



   .. py:attribute:: flag_water_conserve
      :value: False



   .. py:attribute:: flag_energy_conserve
      :value: False



   .. py:attribute:: use_post_block
      :value: False



   .. py:method:: perturb(x_input: torch.Tensor, forecast_step: int = 1) -> torch.Tensor


   .. py:method:: __call__(initial_condition: torch.Tensor, dataset, return_delta_x=False) -> list[torch.Tensor]


.. py:function:: generate_bred_vectors(x_batch, model, num_cycles=5, perturbation_std=0.15, epsilon=1.0, flag_clamp=False, clamp_min=None, clamp_max=None)

   Generate bred vectors and initialize initial conditions for the given batch.

   :param x_batch: The input batch.
   :type x_batch: torch.Tensor
   :param batch: A dictionary containing additional batch data.
   :type batch: dict
   :param model: The model used for predictions.
   :type model: nn.Module
   :param num_cycles: Number of perturbation cycles.
   :type num_cycles: int
   :param perturbation_std: Magnitude of initial perturbations.
   :type perturbation_std: float
   :param epsilon: Scaling factor for bred vectors.
   :type epsilon: float
   :param flag_clamp: Whether to clamp inputs. Defaults to False.
   :type flag_clamp: bool, optional
   :param clamp_min: Minimum clamp value. Required if flag_clamp is True.
   :type clamp_min: float, optional
   :param clamp_max: Maximum clamp value. Required if flag_clamp is True.
   :type clamp_max: float, optional

   :returns: List of initial conditions generated using bred vectors.
   :rtype: list[torch.Tensor]


.. py:function:: generate_bred_vectors_cycle(initial_condition, dataset, model, num_cycles=5, perturbation_std=0.15, epsilon=1.0, flag_clamp=False, clamp_min=None, clamp_max=None, device='cuda', history_len=1, varnum_diag=None, static_dim_size=None, post_conf={})

   Generate bred vectors and initialize initial conditions for the given batch.

   :param x_batch: The input batch.
   :type x_batch: torch.Tensor
   :param batch: A dictionary containing additional batch data.
   :type batch: dict
   :param model: The model used for predictions.
   :type model: nn.Module
   :param num_cycles: Number of perturbation cycles.
   :type num_cycles: int
   :param perturbation_std: Magnitude of initial perturbations.
   :type perturbation_std: float
   :param epsilon: Scaling factor for bred vectors.
   :type epsilon: float
   :param flag_clamp: Whether to clamp inputs. Defaults to False.
   :type flag_clamp: bool, optional
   :param clamp_min: Minimum clamp value. Required if flag_clamp is True.
   :type clamp_min: float, optional
   :param clamp_max: Maximum clamp value. Required if flag_clamp is True.
   :type clamp_max: float, optional

   :returns: List of initial conditions generated using bred vectors.
   :rtype: list[torch.Tensor]


.. py:function:: clone_dataset(dataset)

   Clones a PyTorch Dataset by creating a deep copy.

   :param dataset: The original dataset.
   :type dataset: torch.utils.data.Dataset

   :returns: A cloned dataset.
   :rtype: torch.utils.data.Dataset


.. py:function:: adjust_start_times(time_ranges, hours=24)

   Adjusts the start times by subtracting 24 hours.

   :param time_ranges: Each sublist contains [start_time, end_time] as strings.
   :type time_ranges: list of lists

   :returns: Adjusted time ranges [[start_time - 24hrs, start_time], ...]
   :rtype: list of lists


.. py:data:: logger

