:py:mod:`ethos_penalps.storage`
===============================

.. py:module:: ethos_penalps.storage


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

Classes
~~~~~~~

.. autoapisummary::

   ethos_penalps.storage.BaseStorage
   ethos_penalps.storage.Storage




Attributes
~~~~~~~~~~

.. autoapisummary::

   ethos_penalps.storage.logger


.. py:data:: logger

   

.. py:class:: BaseStorage(stream_handler: ethos_penalps.stream_handler.StreamHandler, input_to_output_conversion_factor: numbers.Number, commodity: ethos_penalps.data_classes.Commodity, process_step_name: str, storage_level_at_start: numbers.Number = 0)


   .. py:method:: create_storage_entries_from_start_to_end(list_of_input_stream_states: list[ethos_penalps.stream.BaseStreamState], list_of_output_stream_states: list[ethos_penalps.stream.BaseStreamState], last_storage_update_time: datetime.datetime) -> list[ethos_penalps.data_classes.StorageProductionPlanEntry]


   .. py:method:: determine_net_mass(list_of_input_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], list_of_output_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState]) -> numbers.Number


   .. py:method:: create_a_list_of_datetime_ranges_from_list_of_stream_states(list_of_input_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], list_of_output_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], exclude_output_times_before_input_end_time: bool, exclude_output_times_before_input_start_time: bool, last_update_time_storage: datetime.datetime, order_from_end_to_start: bool) -> list[datetimerange.DateTimeRange]


   .. py:method:: create_storage_entry_from_start_to_end(list_of_input_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], list_of_output_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], storage_date_range: datetimerange.DateTimeRange) -> ethos_penalps.data_classes.StorageProductionPlanEntry


   .. py:method:: determine_net_mass_in_date_range(list_of_input_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], list_of_output_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], storage_date_range: datetimerange.DateTimeRange, from_start_to_end: bool) -> numbers.Number


   .. py:method:: convert_output_to_input_mass(output_mass: numbers.Number) -> numbers.Number


   .. py:method:: convert_input_to_output_mass(input_mass: numbers.Number) -> numbers.Number



.. py:class:: Storage(name: str, commodity: ethos_penalps.data_classes.Commodity, stream_handler: ethos_penalps.stream_handler.StreamHandler, input_stream_name: str, output_stream_name: str, time_data: ethos_penalps.time_data.TimeData, input_to_output_conversion_factor: numbers.Number, state_data_container: ethos_penalps.simulation_data.container_simulation_data.ProductionProcessStateContainer, process_step_name: str, minimum_storage_level: numbers.Number = 0, maximum_storage_level: numbers.Number | None = None, minimum_storage_level_at_start_time_of_production_branch: numbers.Number | None = None, maximum_storage_level_at_start_time_of_production_branch: numbers.Number | None = None)


   Bases: :py:obj:`BaseStorage`

   .. py:method:: determine_missing_input_mass(target_output_mass: numbers.Number) -> numbers.Number


   .. py:method:: convert_output_to_input_mass(output_mass: numbers.Number) -> numbers.Number


   .. py:method:: convert_input_to_output_mass(input_mass: numbers.Number) -> numbers.Number


   .. py:method:: create_batch_dictionary(list_of_storage_date_ranges: list[datetimerange.DateTimeRange], list_of_input_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], list_of_output_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState]) -> dict[datetime.datetime, numbers.Number]


   .. py:method:: create_a_list_of_datetime_ranges_from_list_of_stream_states(list_of_input_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], list_of_output_stream_states: list[ethos_penalps.stream.ContinuousStreamState | ethos_penalps.stream.BatchStreamState], exclude_output_times_before_input_end_time: bool, exclude_output_times_before_input_start_time: bool) -> list[datetimerange.DateTimeRange]


   .. py:method:: create_all_storage_production_plan_entry(exclude_output_times_before_input_end_time: bool, exclude_output_times_before_input_start_time: bool, back_calculation: bool)



