riverine.echo
=============

.. py:module:: riverine.echo


Attributes
----------

.. autoapisummary::

   riverine.echo.DEFAULT_DROPLET_VOL


Classes
-------

.. autoapisummary::

   riverine.echo.AbstractEchoAction
   riverine.echo.EchoFixedVolume
   riverine.echo.EchoEqualTargetConcentration
   riverine.echo.EchoTargetConcentration
   riverine.echo.EchoFillToVolume


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

.. py:data:: DEFAULT_DROPLET_VOL

.. py:class:: AbstractEchoAction

   Bases: :py:obj:`riverine.actions.ActionWithComponents`


   Abstract base class for Echo actions.


   .. py:method:: to_picklist(mix: riverine.mixes.Mix, experiment: riverine.experiments.Experiment | None = None, _cache_key=None) -> kithairon.picklists.PickList


.. py:class:: EchoFixedVolume

   Bases: :py:obj:`AbstractEchoAction`


   Transfer a fixed volume of liquid to a target mix.


   .. py:attribute:: fixed_volume
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: set_name
      :type:  str | None
      :value: None



   .. py:attribute:: droplet_volume
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: compact_display
      :type:  bool
      :value: True



   .. py:method:: _check_volume() -> None


   .. py:method:: dest_concentrations(mix_vol: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:method:: each_volumes(mix_volume: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:property:: name
      :type: str



   .. py:method:: _mixlines(tablefmt: str | tabulate.TableFormat, mix_vol: riverine.units.DecimalQuantity, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.printing.MixLine]


   .. py:method:: mix_volume_effect(_cache_key=None) -> (riverine.actions.MixVolumeDep, riverine.units.DecimalQuantity)

      The effect of the action on the mix volume.

      :returns: * *MixVolumeDep* -- How the mix volume affects the action.
                * *DecimalQuantity* -- If MixVolumeDep is DETERMINES, the total mix volume that the action causes.
                  If MixVolumeDep is DEPENDS, NAN.
                  If MixVolumeDep is INDEPENDENT, the total volume that the action adds.



.. py:class:: EchoEqualTargetConcentration

   Bases: :py:obj:`AbstractEchoAction`


   Transfer a fixed volume of liquid to a target mix.


   .. py:attribute:: fixed_volume
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: set_name
      :type:  str | None
      :value: None



   .. py:attribute:: droplet_volume
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: compact_display
      :type:  bool
      :value: False



   .. py:attribute:: method
      :type:  Literal['max_volume', 'min_volume', 'check'] | tuple[Literal['max_fill'], str]
      :value: 'min_volume'



   .. py:method:: _check_volume() -> None


   .. py:method:: dest_concentrations(mix_vol: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:method:: each_volumes(mix_volume: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:property:: name
      :type: str



   .. py:method:: _mixlines(tablefmt: str | tabulate.TableFormat, mix_vol: riverine.units.DecimalQuantity, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.printing.MixLine]


   .. py:method:: mix_volume_effect(_cache_key=None) -> (riverine.actions.MixVolumeDep, riverine.units.DecimalQuantity)

      The effect of the action on the mix volume.

      :returns: * *MixVolumeDep* -- How the mix volume affects the action.
                * *DecimalQuantity* -- If MixVolumeDep is DETERMINES, the total mix volume that the action causes.
                  If MixVolumeDep is DEPENDS, NAN.
                  If MixVolumeDep is INDEPENDENT, the total volume that the action adds.



.. py:class:: EchoTargetConcentration

   Bases: :py:obj:`AbstractEchoAction`


   Get as close as possible (using direct transfers) to a target concentration, possibly varying mix volume.


   .. py:attribute:: target_concentration
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: set_name
      :type:  str | None
      :value: None



   .. py:attribute:: droplet_volume
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: compact_display
      :type:  bool
      :value: True



   .. py:method:: dest_concentrations(mix_vol: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:method:: each_volumes(mix_volume: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:method:: _mixlines(tablefmt: str | tabulate.TableFormat, mix_vol: riverine.units.DecimalQuantity, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.printing.MixLine]


   .. py:property:: name
      :type: str



   .. py:method:: mix_volume_effect(_cache_key=None) -> (riverine.actions.MixVolumeDep, riverine.units.DecimalQuantity)

      The effect of the action on the mix volume.

      :returns: * *MixVolumeDep* -- How the mix volume affects the action.
                * *DecimalQuantity* -- If MixVolumeDep is DETERMINES, the total mix volume that the action causes.
                  If MixVolumeDep is DEPENDS, NAN.
                  If MixVolumeDep is INDEPENDENT, the total volume that the action adds.



.. py:class:: EchoFillToVolume

   Bases: :py:obj:`AbstractEchoAction`


   Abstract base class for Echo actions.


   .. py:attribute:: target_total_volume
      :type:  riverine.units.DecimalQuantity


   .. py:attribute:: droplet_volume
      :type:  riverine.units.DecimalQuantity


   .. py:method:: dest_concentrations(mix_vol: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:method:: each_volumes(mix_volume: riverine.units.DecimalQuantity = NAN_VOL, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.units.DecimalQuantity]


   .. py:method:: _mixlines(tablefmt: str | tabulate.TableFormat, mix_vol: riverine.units.DecimalQuantity, actions: Sequence[riverine.actions.AbstractAction] = (), _cache_key=None) -> list[riverine.printing.MixLine]


   .. py:method:: mix_volume_effect(_cache_key=None) -> (riverine.actions.MixVolumeDep, riverine.units.DecimalQuantity)

      The effect of the action on the mix volume.

      :returns: * *MixVolumeDep* -- How the mix volume affects the action.
                * *DecimalQuantity* -- If MixVolumeDep is DETERMINES, the total mix volume that the action causes.
                  If MixVolumeDep is DEPENDS, NAN.
                  If MixVolumeDep is INDEPENDENT, the total volume that the action adds.



