:py:mod:`ethos_penalps.mass_balance`
====================================

.. py:module:: ethos_penalps.mass_balance


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

Classes
~~~~~~~

.. autoapisummary::

   ethos_penalps.mass_balance.MassBalance




Attributes
~~~~~~~~~~

.. autoapisummary::

   ethos_penalps.mass_balance.logger


.. py:data:: logger

   

.. py:class:: MassBalance(commodity: ethos_penalps.data_classes.Commodity, stream_handler: ethos_penalps.stream_handler.StreamHandler, time_data: ethos_penalps.time_data.TimeData, input_to_output_conversion_factor: numbers.Number, main_output_stream: ethos_penalps.stream.ContinuousStream | ethos_penalps.stream.BatchStream, main_input_stream: ethos_penalps.stream.ContinuousStream | ethos_penalps.stream.BatchStream, optional_input_stream_list: list[ethos_penalps.stream.ContinuousStream | ethos_penalps.stream.BatchStream], state_data_container: ethos_penalps.simulation_data.container_simulation_data.ProductionProcessStateContainer, process_step_name: str)


   .. py:attribute:: standard_mass_unit

      

   .. py:attribute:: standard_time_unit

      A mass balance realizes three functions.
      - Connection of input and output streams.
      - Integration of storage for mass
      - Conversion of commodities


   .. py:method:: set_continuous_operation_rate_for_parallel_input_and_output_stream_with_storage() -> ethos_penalps.stream.ContinuousStreamState


   .. py:method:: set_batch_stream_for_parallel_input_and_output_with_storage() -> ethos_penalps.stream.BatchStreamState


   .. py:method:: get_output_stream_mass_without_storage() -> numbers.Number


   .. py:method:: set_continuous_input_stream_according_to_output_stream_with_storage(operation_rate: numbers.Number = float('inf')) -> ethos_penalps.stream.ContinuousStreamState


   .. py:method:: set_batch_input_stream_according_to_output_stream_with_storage() -> ethos_penalps.stream.BatchStreamState


   .. py:method:: determine_next_stream_end_time_from_previous_input_streams() -> datetime.datetime


   .. py:method:: determine_next_stream_start_time_from_previous_input_streams() -> datetime.datetime


   .. py:method:: determine_required_batch_end_time_to_fulfill_storage() -> datetime.datetime


   .. 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:: determine_required_input_rate(output_stream_state: ethos_penalps.stream.ContinuousStreamState, input_to_output_conversion_factor: numbers.Number)


   .. py:method:: reevaluate_storage_level_according_to_adapted_input_stream() -> ethos_penalps.stream.BatchStreamState | ethos_penalps.stream.ContinuousStreamState


   .. py:method:: create_storage(current_storage_level: numbers.Number = 0, minimum_storage_level_at_start_time_of_production_branch: numbers.Number = 0, maximum_storage_level_at_start_time_of_production_branch: numbers.Number | None = None) -> ethos_penalps.storage.Storage

      Each process step requires a storage currently.
      Currently storage level must be 0 at start

      :return: _description_
      :rtype: _type_


   .. py:method:: add_main_input_stream_name(input_stream_name: str)


   .. py:method:: add_main_output_stream_name(output_stream_name: str)


   .. py:method:: get_input_stream_name() -> str


   .. py:method:: get_output_stream_name() -> str


   .. py:method:: check_input_and_output_stream_mass_balance()


   .. py:method:: determine_missing_mass_for_output_stream()


   .. py:method:: check_if_production_branch_is_fulfilled()


   .. py:method:: check_if_production_branch_is_fulfilled_with_over_production() -> bool


   .. py:method:: check_if_output_stream_can_be_supplied_directly_from_storage()


   .. py:method:: determine_if_input_stream_is_bigger_than_output() -> bool



