:py:mod:`mipcandy.data.dataset`
===============================

.. py:module:: mipcandy.data.dataset

.. autodoc2-docstring:: mipcandy.data.dataset
   :allowtitles:

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

Classes
~~~~~~~

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

   * - :py:obj:`KFPicker <mipcandy.data.dataset.KFPicker>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.KFPicker
          :summary:
   * - :py:obj:`OrderedKFPicker <mipcandy.data.dataset.OrderedKFPicker>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.OrderedKFPicker
          :summary:
   * - :py:obj:`RandomKFPicker <mipcandy.data.dataset.RandomKFPicker>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.RandomKFPicker
          :summary:
   * - :py:obj:`Loader <mipcandy.data.dataset.Loader>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.Loader
          :summary:
   * - :py:obj:`TensorLoader <mipcandy.data.dataset.TensorLoader>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.TensorLoader
          :summary:
   * - :py:obj:`_AbstractDataset <mipcandy.data.dataset._AbstractDataset>`
     -
   * - :py:obj:`UnsupervisedDataset <mipcandy.data.dataset.UnsupervisedDataset>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset
          :summary:
   * - :py:obj:`SupervisedDataset <mipcandy.data.dataset.SupervisedDataset>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset
          :summary:
   * - :py:obj:`DatasetFromMemory <mipcandy.data.dataset.DatasetFromMemory>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.DatasetFromMemory
          :summary:
   * - :py:obj:`MergedDataset <mipcandy.data.dataset.MergedDataset>`
     -
   * - :py:obj:`ComposeDataset <mipcandy.data.dataset.ComposeDataset>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.ComposeDataset
          :summary:
   * - :py:obj:`PathBasedUnsupervisedDataset <mipcandy.data.dataset.PathBasedUnsupervisedDataset>`
     -
   * - :py:obj:`SimpleDataset <mipcandy.data.dataset.SimpleDataset>`
     -
   * - :py:obj:`PathBasedSupervisedDataset <mipcandy.data.dataset.PathBasedSupervisedDataset>`
     -
   * - :py:obj:`NNUNetDataset <mipcandy.data.dataset.NNUNetDataset>`
     -
   * - :py:obj:`BinarizedDataset <mipcandy.data.dataset.BinarizedDataset>`
     -

Data
~~~~

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

   * - :py:obj:`T <mipcandy.data.dataset.T>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.T
          :summary:
   * - :py:obj:`D <mipcandy.data.dataset.D>`
     - .. autodoc2-docstring:: mipcandy.data.dataset.D
          :summary:

API
~~~

.. py:class:: KFPicker
   :canonical: mipcandy.data.dataset.KFPicker

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.data.dataset.KFPicker

   .. py:method:: pick(n: int, fold: typing.Literal[0, 1, 2, 3, 4, all]) -> tuple[int, ...]
      :canonical: mipcandy.data.dataset.KFPicker.pick
      :abstractmethod:
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.KFPicker.pick

.. py:class:: OrderedKFPicker
   :canonical: mipcandy.data.dataset.OrderedKFPicker

   Bases: :py:obj:`mipcandy.data.dataset.KFPicker`

   .. autodoc2-docstring:: mipcandy.data.dataset.OrderedKFPicker

   .. py:method:: pick(n: int, fold: typing.Literal[0, 1, 2, 3, 4, all]) -> tuple[int, ...]
      :canonical: mipcandy.data.dataset.OrderedKFPicker.pick
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.OrderedKFPicker.pick

.. py:class:: RandomKFPicker
   :canonical: mipcandy.data.dataset.RandomKFPicker

   Bases: :py:obj:`mipcandy.data.dataset.OrderedKFPicker`

   .. autodoc2-docstring:: mipcandy.data.dataset.RandomKFPicker

   .. py:method:: pick(n: int, fold: typing.Literal[0, 1, 2, 3, 4, all]) -> tuple[int, ...]
      :canonical: mipcandy.data.dataset.RandomKFPicker.pick
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.RandomKFPicker.pick

.. py:class:: Loader
   :canonical: mipcandy.data.dataset.Loader

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.data.dataset.Loader

   .. py:method:: do_load(path: str | os.PathLike[str], *, is_label: bool = False, device: mipcandy.types.Device = 'cpu', **kwargs) -> torch.Tensor
      :canonical: mipcandy.data.dataset.Loader.do_load
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.Loader.do_load

.. py:class:: TensorLoader
   :canonical: mipcandy.data.dataset.TensorLoader

   Bases: :py:obj:`mipcandy.data.dataset.Loader`

   .. autodoc2-docstring:: mipcandy.data.dataset.TensorLoader

   .. py:method:: do_load(path: str | os.PathLike[str], *, is_label: bool = False, device: mipcandy.types.Device = 'cpu', **kwargs) -> torch.Tensor
      :canonical: mipcandy.data.dataset.TensorLoader.do_load
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.TensorLoader.do_load

.. py:data:: T
   :canonical: mipcandy.data.dataset.T
   :value: 'TypeVar(...)'

   .. autodoc2-docstring:: mipcandy.data.dataset.T

.. py:class:: _AbstractDataset(device: mipcandy.types.Device)
   :canonical: mipcandy.data.dataset._AbstractDataset

   Bases: :py:obj:`torch.utils.data.Dataset`, :py:obj:`mipcandy.data.dataset.Loader`, :py:obj:`mipcandy.layer.HasDevice`, :py:obj:`typing.Generic`\ [\ :py:obj:`mipcandy.data.dataset.T`\ ], :py:obj:`typing.Sequence`\ [\ :py:obj:`mipcandy.data.dataset.T`\ ]

   .. py:method:: load(idx: int) -> mipcandy.data.dataset.T
      :canonical: mipcandy.data.dataset._AbstractDataset.load
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset._AbstractDataset.load

   .. py:method:: __getitem__(idx: int) -> mipcandy.data.dataset.T
      :canonical: mipcandy.data.dataset._AbstractDataset.__getitem__

      .. autodoc2-docstring:: mipcandy.data.dataset._AbstractDataset.__getitem__

.. py:data:: D
   :canonical: mipcandy.data.dataset.D
   :value: 'TypeVar(...)'

   .. autodoc2-docstring:: mipcandy.data.dataset.D

.. py:class:: UnsupervisedDataset(images: mipcandy.data.dataset.D, *, transform: mipcandy.types.Transform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.UnsupervisedDataset

   Bases: :py:obj:`mipcandy.data.dataset._AbstractDataset`\ [\ :py:obj:`torch.Tensor`\ ], :py:obj:`typing.Generic`\ [\ :py:obj:`mipcandy.data.dataset.D`\ ]

   .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset.__init__

   .. py:method:: __len__() -> int
      :canonical: mipcandy.data.dataset.UnsupervisedDataset.__len__

      .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset.__len__

   .. py:method:: __getitem__(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.UnsupervisedDataset.__getitem__

      .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset.__getitem__

   .. py:method:: transform() -> mipcandy.types.Transform | None
      :canonical: mipcandy.data.dataset.UnsupervisedDataset.transform

      .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset.transform

   .. py:method:: set_transform(transform: mipcandy.types.Transform | None) -> None
      :canonical: mipcandy.data.dataset.UnsupervisedDataset.set_transform

      .. autodoc2-docstring:: mipcandy.data.dataset.UnsupervisedDataset.set_transform

.. py:class:: SupervisedDataset(images: mipcandy.data.dataset.D, labels: mipcandy.data.dataset.D, *, transform: mipcandy.data.transform.JointTransform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.SupervisedDataset

   Bases: :py:obj:`mipcandy.data.dataset._AbstractDataset`\ [\ :py:obj:`tuple`\ [\ :py:obj:`torch.Tensor`\ , :py:obj:`torch.Tensor`\ ]\ ], :py:obj:`typing.Generic`\ [\ :py:obj:`mipcandy.data.dataset.D`\ ]

   .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.__init__

   .. py:method:: _nd() -> int
      :canonical: mipcandy.data.dataset.SupervisedDataset._nd

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset._nd

   .. py:method:: __len__() -> int
      :canonical: mipcandy.data.dataset.SupervisedDataset.__len__

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.__len__

   .. py:method:: load_image(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.SupervisedDataset.load_image
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.load_image

   .. py:method:: load_label(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.SupervisedDataset.load_label
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.load_label

   .. py:method:: load(idx: int) -> tuple[torch.Tensor, torch.Tensor]
      :canonical: mipcandy.data.dataset.SupervisedDataset.load

   .. py:method:: __getitem__(idx: int) -> tuple[torch.Tensor, torch.Tensor]
      :canonical: mipcandy.data.dataset.SupervisedDataset.__getitem__

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.__getitem__

   .. py:method:: image(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.SupervisedDataset.image

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.image

   .. py:method:: label(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.SupervisedDataset.label

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.label

   .. py:method:: transform() -> mipcandy.data.transform.JointTransform | None
      :canonical: mipcandy.data.dataset.SupervisedDataset.transform

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.transform

   .. py:method:: set_transform(transform: mipcandy.data.transform.JointTransform | None) -> None
      :canonical: mipcandy.data.dataset.SupervisedDataset.set_transform

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.set_transform

   .. py:method:: construct_new(images: list[typing.Any], labels: list[typing.Any]) -> typing.Self
      :canonical: mipcandy.data.dataset.SupervisedDataset.construct_new
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.construct_new

   .. py:method:: preload(output_folder: str | os.PathLike[str], *, do_transform: bool = False) -> None
      :canonical: mipcandy.data.dataset.SupervisedDataset.preload

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.preload

   .. py:method:: fold(*, fold: typing.Literal[0, 1, 2, 3, 4, all] = 'all', picker: type[mipcandy.data.dataset.KFPicker] = OrderedKFPicker) -> tuple[typing.Self, typing.Self]
      :canonical: mipcandy.data.dataset.SupervisedDataset.fold

      .. autodoc2-docstring:: mipcandy.data.dataset.SupervisedDataset.fold

.. py:class:: DatasetFromMemory(images: typing.Sequence[torch.Tensor], *, transform: mipcandy.types.Transform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.DatasetFromMemory

   Bases: :py:obj:`mipcandy.data.dataset.UnsupervisedDataset`\ [\ :py:obj:`typing.Sequence`\ [\ :py:obj:`torch.Tensor`\ ]\ ]

   .. autodoc2-docstring:: mipcandy.data.dataset.DatasetFromMemory

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.data.dataset.DatasetFromMemory.__init__

   .. py:method:: load(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.DatasetFromMemory.load

      .. autodoc2-docstring:: mipcandy.data.dataset.DatasetFromMemory.load

.. py:class:: MergedDataset(images: mipcandy.data.dataset.UnsupervisedDataset, labels: mipcandy.data.dataset.UnsupervisedDataset, *, transform: mipcandy.data.transform.JointTransform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.MergedDataset

   Bases: :py:obj:`mipcandy.data.dataset.SupervisedDataset`\ [\ :py:obj:`mipcandy.data.dataset.UnsupervisedDataset`\ ]

   .. py:method:: load_image(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.MergedDataset.load_image

      .. autodoc2-docstring:: mipcandy.data.dataset.MergedDataset.load_image

   .. py:method:: load_label(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.MergedDataset.load_label

      .. autodoc2-docstring:: mipcandy.data.dataset.MergedDataset.load_label

   .. py:method:: construct_new(images: list[typing.Any], labels: list[typing.Any]) -> typing.Self
      :canonical: mipcandy.data.dataset.MergedDataset.construct_new

      .. autodoc2-docstring:: mipcandy.data.dataset.MergedDataset.construct_new

.. py:class:: ComposeDataset(bases: typing.Sequence[mipcandy.data.dataset.SupervisedDataset] | typing.Sequence[mipcandy.data.dataset.UnsupervisedDataset], *, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.ComposeDataset

   Bases: :py:obj:`mipcandy.data.dataset._AbstractDataset`\ [\ :py:obj:`tuple`\ [\ :py:obj:`torch.Tensor`\ , :py:obj:`torch.Tensor`\ ]\ :py:obj:`| torch.Tensor`\ ]

   .. autodoc2-docstring:: mipcandy.data.dataset.ComposeDataset

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.data.dataset.ComposeDataset.__init__

   .. py:method:: load(idx: int) -> tuple[torch.Tensor, torch.Tensor] | torch.Tensor
      :canonical: mipcandy.data.dataset.ComposeDataset.load

      .. autodoc2-docstring:: mipcandy.data.dataset.ComposeDataset.load

   .. py:method:: __len__() -> int
      :canonical: mipcandy.data.dataset.ComposeDataset.__len__

      .. autodoc2-docstring:: mipcandy.data.dataset.ComposeDataset.__len__

.. py:class:: PathBasedUnsupervisedDataset(images: mipcandy.data.dataset.D, *, transform: mipcandy.types.Transform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.PathBasedUnsupervisedDataset

   Bases: :py:obj:`mipcandy.data.dataset.UnsupervisedDataset`\ [\ :py:obj:`list`\ [\ :py:obj:`str`\ ]\ ]

   .. py:method:: paths() -> list[str]
      :canonical: mipcandy.data.dataset.PathBasedUnsupervisedDataset.paths

      .. autodoc2-docstring:: mipcandy.data.dataset.PathBasedUnsupervisedDataset.paths

   .. py:method:: save_paths(to: str | os.PathLike[str]) -> None
      :canonical: mipcandy.data.dataset.PathBasedUnsupervisedDataset.save_paths

      .. autodoc2-docstring:: mipcandy.data.dataset.PathBasedUnsupervisedDataset.save_paths

.. py:class:: SimpleDataset(folder: str | os.PathLike[str], is_label: bool, *, transform: mipcandy.types.Transform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.SimpleDataset

   Bases: :py:obj:`mipcandy.data.dataset.PathBasedUnsupervisedDataset`

   .. py:method:: load(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.SimpleDataset.load

      .. autodoc2-docstring:: mipcandy.data.dataset.SimpleDataset.load

.. py:class:: PathBasedSupervisedDataset(images: mipcandy.data.dataset.D, labels: mipcandy.data.dataset.D, *, transform: mipcandy.data.transform.JointTransform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.PathBasedSupervisedDataset

   Bases: :py:obj:`mipcandy.data.dataset.SupervisedDataset`\ [\ :py:obj:`list`\ [\ :py:obj:`str`\ ]\ ]

   .. py:method:: paths() -> list[tuple[str, str]]
      :canonical: mipcandy.data.dataset.PathBasedSupervisedDataset.paths

      .. autodoc2-docstring:: mipcandy.data.dataset.PathBasedSupervisedDataset.paths

   .. py:method:: save_paths(to: str | os.PathLike[str]) -> None
      :canonical: mipcandy.data.dataset.PathBasedSupervisedDataset.save_paths

      .. autodoc2-docstring:: mipcandy.data.dataset.PathBasedSupervisedDataset.save_paths

.. py:class:: NNUNetDataset(folder: str | os.PathLike[str], *, split: str | typing.Literal[Tr, Ts] = 'Tr', prefix: str = '', align_spacing: bool = False, transform: mipcandy.data.transform.JointTransform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.NNUNetDataset

   Bases: :py:obj:`mipcandy.data.dataset.PathBasedSupervisedDataset`

   .. py:method:: folder() -> str
      :canonical: mipcandy.data.dataset.NNUNetDataset.folder

      .. autodoc2-docstring:: mipcandy.data.dataset.NNUNetDataset.folder

   .. py:method:: _create_subset(folder: str) -> None
      :canonical: mipcandy.data.dataset.NNUNetDataset._create_subset
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.NNUNetDataset._create_subset

   .. py:method:: load_image(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.NNUNetDataset.load_image

      .. autodoc2-docstring:: mipcandy.data.dataset.NNUNetDataset.load_image

   .. py:method:: load_label(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.NNUNetDataset.load_label

      .. autodoc2-docstring:: mipcandy.data.dataset.NNUNetDataset.load_label

   .. py:method:: save(split: str | typing.Literal[Tr, Ts], *, target_folder: str | os.PathLike[str] | None = None) -> None
      :canonical: mipcandy.data.dataset.NNUNetDataset.save

      .. autodoc2-docstring:: mipcandy.data.dataset.NNUNetDataset.save

   .. py:method:: construct_new(images: list[typing.Any], labels: list[typing.Any]) -> typing.Self
      :canonical: mipcandy.data.dataset.NNUNetDataset.construct_new

      .. autodoc2-docstring:: mipcandy.data.dataset.NNUNetDataset.construct_new

.. py:class:: BinarizedDataset(base: mipcandy.data.dataset.SupervisedDataset, positive_ids: tuple[int, ...], *, transform: mipcandy.data.transform.JointTransform | None = None, device: mipcandy.types.Device = 'cpu')
   :canonical: mipcandy.data.dataset.BinarizedDataset

   Bases: :py:obj:`mipcandy.data.dataset.SupervisedDataset`\ [\ :py:obj:`tuple`\ [\ :py:obj:`None`\ ]\ ]

   .. py:method:: __len__() -> int
      :canonical: mipcandy.data.dataset.BinarizedDataset.__len__

      .. autodoc2-docstring:: mipcandy.data.dataset.BinarizedDataset.__len__

   .. py:method:: construct_new(images: list[typing.Any], labels: list[typing.Any]) -> typing.Self
      :canonical: mipcandy.data.dataset.BinarizedDataset.construct_new
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.data.dataset.BinarizedDataset.construct_new

   .. py:method:: load_image(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.BinarizedDataset.load_image

      .. autodoc2-docstring:: mipcandy.data.dataset.BinarizedDataset.load_image

   .. py:method:: load_label(idx: int) -> torch.Tensor
      :canonical: mipcandy.data.dataset.BinarizedDataset.load_label

      .. autodoc2-docstring:: mipcandy.data.dataset.BinarizedDataset.load_label

   .. py:method:: fold(*, fold: typing.Literal[0, 1, 2, 3, 4, all] = 'all', picker: type[mipcandy.data.dataset.KFPicker] = OrderedKFPicker) -> tuple[typing.Self, typing.Self]
      :canonical: mipcandy.data.dataset.BinarizedDataset.fold

      .. autodoc2-docstring:: mipcandy.data.dataset.BinarizedDataset.fold
