:py:mod:`leads.data_persistence.core`
=====================================

.. py:module:: leads.data_persistence.core

.. autodoc2-docstring:: leads.data_persistence.core
   :allowtitles:

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

Classes
~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`DataPersistence <leads.data_persistence.core.DataPersistence>`
     - .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence
          :summary:
   * - :py:obj:`Vector <leads.data_persistence.core.Vector>`
     - .. autodoc2-docstring:: leads.data_persistence.core.Vector
          :summary:
   * - :py:obj:`CSV <leads.data_persistence.core.CSV>`
     - .. autodoc2-docstring:: leads.data_persistence.core.CSV
          :summary:
   * - :py:obj:`CSVDataset <leads.data_persistence.core.CSVDataset>`
     - .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset
          :summary:

Functions
~~~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`weighed_sum <leads.data_persistence.core.weighed_sum>`
     - .. autodoc2-docstring:: leads.data_persistence.core.weighed_sum
          :summary:
   * - :py:obj:`weighed_mean <leads.data_persistence.core.weighed_mean>`
     - .. autodoc2-docstring:: leads.data_persistence.core.weighed_mean
          :summary:
   * - :py:obj:`mean_compressor <leads.data_persistence.core.mean_compressor>`
     - .. autodoc2-docstring:: leads.data_persistence.core.mean_compressor
          :summary:

Data
~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`T <leads.data_persistence.core.T>`
     - .. autodoc2-docstring:: leads.data_persistence.core.T
          :summary:
   * - :py:obj:`E <leads.data_persistence.core.E>`
     - .. autodoc2-docstring:: leads.data_persistence.core.E
          :summary:
   * - :py:obj:`DEFAULT_HEADER <leads.data_persistence.core.DEFAULT_HEADER>`
     - .. autodoc2-docstring:: leads.data_persistence.core.DEFAULT_HEADER
          :summary:
   * - :py:obj:`DEFAULT_HEADER_FULL <leads.data_persistence.core.DEFAULT_HEADER_FULL>`
     - .. autodoc2-docstring:: leads.data_persistence.core.DEFAULT_HEADER_FULL
          :summary:
   * - :py:obj:`VISUAL_HEADER_ONLY <leads.data_persistence.core.VISUAL_HEADER_ONLY>`
     - .. autodoc2-docstring:: leads.data_persistence.core.VISUAL_HEADER_ONLY
          :summary:
   * - :py:obj:`VISUAL_HEADER <leads.data_persistence.core.VISUAL_HEADER>`
     - .. autodoc2-docstring:: leads.data_persistence.core.VISUAL_HEADER
          :summary:
   * - :py:obj:`VISUAL_HEADER_FULL <leads.data_persistence.core.VISUAL_HEADER_FULL>`
     - .. autodoc2-docstring:: leads.data_persistence.core.VISUAL_HEADER_FULL
          :summary:

API
~~~

.. py:data:: T
   :canonical: leads.data_persistence.core.T
   :value: '_TypeVar(...)'

   .. autodoc2-docstring:: leads.data_persistence.core.T

.. py:function:: weighed_sum(elements: tuple[leads.data_persistence.core.T, ...], indexes: tuple[float, ...], a: int = 0, b: int | None = None) -> leads.data_persistence.core.T
   :canonical: leads.data_persistence.core.weighed_sum

   .. autodoc2-docstring:: leads.data_persistence.core.weighed_sum

.. py:function:: weighed_mean(elements: tuple[leads.data_persistence.core.T, ...], indexes: tuple[float, ...], a: int = 0, b: int | None = None) -> leads.data_persistence.core.T
   :canonical: leads.data_persistence.core.weighed_mean

   .. autodoc2-docstring:: leads.data_persistence.core.weighed_mean

.. py:function:: mean_compressor(sequence: dict[leads.data_persistence.core.T, float], target_size: int) -> dict[leads.data_persistence.core.T, float]
   :canonical: leads.data_persistence.core.mean_compressor

   .. autodoc2-docstring:: leads.data_persistence.core.mean_compressor

.. py:class:: DataPersistence(max_size: int = -1, crop_ratio: int = 2, compressor: leads.types.Compressor[leads.data_persistence.core.T] = mean_compressor)
   :canonical: leads.data_persistence.core.DataPersistence

   Bases: :py:obj:`typing.Sequence`\ [\ :py:obj:`leads.data_persistence.core.T`\ ], :py:obj:`typing.Generic`\ [\ :py:obj:`leads.data_persistence.core.T`\ ]

   .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence

   .. rubric:: Initialization

   .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.__init__

   .. py:method:: __len__() -> int
      :canonical: leads.data_persistence.core.DataPersistence.__len__

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.__len__

   .. py:method:: __getitem__(index: int) -> leads.data_persistence.core.T | list[leads.data_persistence.core.T]
      :canonical: leads.data_persistence.core.DataPersistence.__getitem__

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.__getitem__

   .. py:method:: __str__() -> str
      :canonical: leads.data_persistence.core.DataPersistence.__str__

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.__str__

   .. py:method:: sum() -> leads.data_persistence.core.T
      :canonical: leads.data_persistence.core.DataPersistence.sum

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.sum

   .. py:method:: indexes() -> list[float]
      :canonical: leads.data_persistence.core.DataPersistence.indexes

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.indexes

   .. py:method:: weights() -> list[float]
      :canonical: leads.data_persistence.core.DataPersistence.weights

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.weights

   .. py:method:: to_list() -> list[leads.data_persistence.core.T]
      :canonical: leads.data_persistence.core.DataPersistence.to_list

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.to_list

   .. py:method:: append(element: leads.data_persistence.core.T) -> None
      :canonical: leads.data_persistence.core.DataPersistence.append

      .. autodoc2-docstring:: leads.data_persistence.core.DataPersistence.append

.. py:data:: E
   :canonical: leads.data_persistence.core.E
   :value: '_TypeVar(...)'

   .. autodoc2-docstring:: leads.data_persistence.core.E

.. py:class:: Vector(*coordinates: leads.data_persistence.core.E)
   :canonical: leads.data_persistence.core.Vector

   Bases: :py:obj:`typing.Sequence`\ [\ :py:obj:`leads.data_persistence.core.E`\ ], :py:obj:`typing.Iterable`\ [\ :py:obj:`leads.data_persistence.core.E`\ ], :py:obj:`typing.Generic`\ [\ :py:obj:`leads.data_persistence.core.E`\ ]

   .. autodoc2-docstring:: leads.data_persistence.core.Vector

   .. rubric:: Initialization

   .. autodoc2-docstring:: leads.data_persistence.core.Vector.__init__

   .. py:method:: __hash__() -> int
      :canonical: leads.data_persistence.core.Vector.__hash__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__hash__

   .. py:method:: __len__() -> int
      :canonical: leads.data_persistence.core.Vector.__len__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__len__

   .. py:method:: __iter__() -> typing.Iterator[leads.data_persistence.core.E]
      :canonical: leads.data_persistence.core.Vector.__iter__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__iter__

   .. py:method:: __getitem__(item: int | slice) -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__getitem__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__getitem__

   .. py:method:: __str__() -> str
      :canonical: leads.data_persistence.core.Vector.__str__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__str__

   .. py:method:: __eq__(other: typing.Self) -> bool
      :canonical: leads.data_persistence.core.Vector.__eq__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__eq__

   .. py:method:: _check_dimension(other: typing.Self) -> None
      :canonical: leads.data_persistence.core.Vector._check_dimension

      .. autodoc2-docstring:: leads.data_persistence.core.Vector._check_dimension

   .. py:method:: __neg__() -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__neg__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__neg__

   .. py:method:: __abs__() -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__abs__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__abs__

   .. py:method:: _operate(other: typing.Self | leads.data_persistence.core.E, operator: typing.Callable[[leads.data_persistence.core.E, leads.data_persistence.core.E], leads.data_persistence.core.E]) -> typing.Self
      :canonical: leads.data_persistence.core.Vector._operate

      .. autodoc2-docstring:: leads.data_persistence.core.Vector._operate

   .. py:method:: __add__(other: typing.Self | leads.data_persistence.core.E) -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__add__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__add__

   .. py:method:: __sub__(other: typing.Self | leads.data_persistence.core.E) -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__sub__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__sub__

   .. py:method:: __mul__(other: typing.Self | leads.data_persistence.core.E) -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__mul__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__mul__

   .. py:method:: __truediv__(other: typing.Self | leads.data_persistence.core.E) -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__truediv__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__truediv__

   .. py:method:: __floordiv__(other: typing.Self | leads.data_persistence.core.E) -> typing.Self
      :canonical: leads.data_persistence.core.Vector.__floordiv__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__floordiv__

   .. py:method:: distance(other: typing.Self) -> float
      :canonical: leads.data_persistence.core.Vector.distance

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.distance

   .. py:method:: magnitude() -> float
      :canonical: leads.data_persistence.core.Vector.magnitude

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.magnitude

   .. py:method:: _compare(other: typing.Self | leads.data_persistence.core.E, comparer: typing.Callable[[leads.data_persistence.core.E, leads.data_persistence.core.E], bool]) -> bool
      :canonical: leads.data_persistence.core.Vector._compare

      .. autodoc2-docstring:: leads.data_persistence.core.Vector._compare

   .. py:method:: __lt__(other: typing.Self | leads.data_persistence.core.E) -> bool
      :canonical: leads.data_persistence.core.Vector.__lt__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__lt__

   .. py:method:: __le__(other: typing.Self | leads.data_persistence.core.E) -> bool
      :canonical: leads.data_persistence.core.Vector.__le__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__le__

   .. py:method:: __gt__(other: typing.Self | leads.data_persistence.core.E) -> bool
      :canonical: leads.data_persistence.core.Vector.__gt__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__gt__

   .. py:method:: __ge__(other: typing.Self | leads.data_persistence.core.E) -> bool
      :canonical: leads.data_persistence.core.Vector.__ge__

      .. autodoc2-docstring:: leads.data_persistence.core.Vector.__ge__

.. py:class:: CSV(file: str | typing.TextIO, header: tuple[str, ...], *columns: leads.data_persistence.core.DataPersistence | None)
   :canonical: leads.data_persistence.core.CSV

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: leads.data_persistence.core.CSV

   .. rubric:: Initialization

   .. autodoc2-docstring:: leads.data_persistence.core.CSV.__init__

   .. py:method:: header() -> tuple[str, ...]
      :canonical: leads.data_persistence.core.CSV.header

      .. autodoc2-docstring:: leads.data_persistence.core.CSV.header

   .. py:method:: write_header() -> None
      :canonical: leads.data_persistence.core.CSV.write_header

      .. autodoc2-docstring:: leads.data_persistence.core.CSV.write_header

   .. py:method:: write_frame(*data: typing.Any) -> None
      :canonical: leads.data_persistence.core.CSV.write_frame

      .. autodoc2-docstring:: leads.data_persistence.core.CSV.write_frame

   .. py:method:: close() -> None
      :canonical: leads.data_persistence.core.CSV.close

      .. autodoc2-docstring:: leads.data_persistence.core.CSV.close

.. py:class:: CSVDataset(file: str, chunk_size: int = 100)
   :canonical: leads.data_persistence.core.CSVDataset

   Bases: :py:obj:`typing.Iterable`\ [\ :py:obj:`dict`\ [\ :py:obj:`str`\ , :py:obj:`typing.Any`\ ]\ ]

   .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset

   .. rubric:: Initialization

   .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.__init__

   .. py:method:: require_loaded() -> None
      :canonical: leads.data_persistence.core.CSVDataset.require_loaded

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.require_loaded

   .. py:method:: read_header() -> tuple[str, ...]
      :canonical: leads.data_persistence.core.CSVDataset.read_header

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.read_header

   .. py:method:: __iter__() -> typing.Generator[dict[str, typing.Any], None, None]
      :canonical: leads.data_persistence.core.CSVDataset.__iter__

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.__iter__

   .. py:method:: __len__() -> int
      :canonical: leads.data_persistence.core.CSVDataset.__len__

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.__len__

   .. py:method:: load() -> None
      :canonical: leads.data_persistence.core.CSVDataset.load

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.load

   .. py:method:: save(file: str | typing.TextIO) -> None
      :canonical: leads.data_persistence.core.CSVDataset.save

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.save

   .. py:method:: close() -> None
      :canonical: leads.data_persistence.core.CSVDataset.close

      .. autodoc2-docstring:: leads.data_persistence.core.CSVDataset.close

.. py:data:: DEFAULT_HEADER
   :canonical: leads.data_persistence.core.DEFAULT_HEADER
   :type: leads.types.DefaultHeader
   :value: ('t', 'voltage', 'speed', 'front_wheel_speed', 'rear_wheel_speed', 'yaw', 'pitch', 'roll', 'forward_...

   .. autodoc2-docstring:: leads.data_persistence.core.DEFAULT_HEADER

.. py:data:: DEFAULT_HEADER_FULL
   :canonical: leads.data_persistence.core.DEFAULT_HEADER_FULL
   :type: leads.types.DefaultHeaderFull
   :value: None

   .. autodoc2-docstring:: leads.data_persistence.core.DEFAULT_HEADER_FULL

.. py:data:: VISUAL_HEADER_ONLY
   :canonical: leads.data_persistence.core.VISUAL_HEADER_ONLY
   :type: tuple[str, str, str, str, str, str, str, str]
   :value: ('front_view_base64', 'front_view_latency', 'left_view_base64', 'left_view_latency', 'right_view_bas...

   .. autodoc2-docstring:: leads.data_persistence.core.VISUAL_HEADER_ONLY

.. py:data:: VISUAL_HEADER
   :canonical: leads.data_persistence.core.VISUAL_HEADER
   :type: leads.types.VisualHeader
   :value: None

   .. autodoc2-docstring:: leads.data_persistence.core.VISUAL_HEADER

.. py:data:: VISUAL_HEADER_FULL
   :canonical: leads.data_persistence.core.VISUAL_HEADER_FULL
   :type: leads.types.VisualHeaderFull
   :value: None

   .. autodoc2-docstring:: leads.data_persistence.core.VISUAL_HEADER_FULL
