:py:mod:`mipcandy.layer`
========================

.. py:module:: mipcandy.layer

.. autodoc2-docstring:: mipcandy.layer
   :allowtitles:

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

Classes
~~~~~~~

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

   * - :py:obj:`LayerT <mipcandy.layer.LayerT>`
     - .. autodoc2-docstring:: mipcandy.layer.LayerT
          :summary:
   * - :py:obj:`HasDevice <mipcandy.layer.HasDevice>`
     - .. autodoc2-docstring:: mipcandy.layer.HasDevice
          :summary:
   * - :py:obj:`WithPaddingModule <mipcandy.layer.WithPaddingModule>`
     - .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule
          :summary:
   * - :py:obj:`WithCheckpoint <mipcandy.layer.WithCheckpoint>`
     - .. autodoc2-docstring:: mipcandy.layer.WithCheckpoint
          :summary:
   * - :py:obj:`WithNetwork <mipcandy.layer.WithNetwork>`
     - .. autodoc2-docstring:: mipcandy.layer.WithNetwork
          :summary:

Functions
~~~~~~~~~

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

   * - :py:obj:`batch_int_multiply <mipcandy.layer.batch_int_multiply>`
     - .. autodoc2-docstring:: mipcandy.layer.batch_int_multiply
          :summary:
   * - :py:obj:`batch_int_divide <mipcandy.layer.batch_int_divide>`
     - .. autodoc2-docstring:: mipcandy.layer.batch_int_divide
          :summary:
   * - :py:obj:`auto_device <mipcandy.layer.auto_device>`
     - .. autodoc2-docstring:: mipcandy.layer.auto_device
          :summary:

API
~~~

.. py:function:: batch_int_multiply(f: float, *n: int) -> typing.Generator[int, None, None]
   :canonical: mipcandy.layer.batch_int_multiply

   .. autodoc2-docstring:: mipcandy.layer.batch_int_multiply

.. py:function:: batch_int_divide(f: float, *n: int) -> typing.Generator[int, None, None]
   :canonical: mipcandy.layer.batch_int_divide

   .. autodoc2-docstring:: mipcandy.layer.batch_int_divide

.. py:class:: LayerT(m: type[torch.nn.Module], **kwargs)
   :canonical: mipcandy.layer.LayerT

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.layer.LayerT

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.layer.LayerT.__init__

   .. py:method:: update(*, must_exist: bool = True, inplace: bool = False, **kwargs) -> typing.Self
      :canonical: mipcandy.layer.LayerT.update

      .. autodoc2-docstring:: mipcandy.layer.LayerT.update

   .. py:method:: assemble(*args, **kwargs) -> torch.nn.Module
      :canonical: mipcandy.layer.LayerT.assemble

      .. autodoc2-docstring:: mipcandy.layer.LayerT.assemble

   .. py:method:: copy() -> typing.Self
      :canonical: mipcandy.layer.LayerT.copy

      .. autodoc2-docstring:: mipcandy.layer.LayerT.copy

.. py:class:: HasDevice(device: mipcandy.types.Device)
   :canonical: mipcandy.layer.HasDevice

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.layer.HasDevice

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.layer.HasDevice.__init__

   .. py:method:: device(*, device: mipcandy.types.Device | None = None) -> None | mipcandy.types.Device
      :canonical: mipcandy.layer.HasDevice.device

      .. autodoc2-docstring:: mipcandy.layer.HasDevice.device

.. py:function:: auto_device() -> mipcandy.types.Device
   :canonical: mipcandy.layer.auto_device

   .. autodoc2-docstring:: mipcandy.layer.auto_device

.. py:class:: WithPaddingModule(device: mipcandy.types.Device)
   :canonical: mipcandy.layer.WithPaddingModule

   Bases: :py:obj:`mipcandy.layer.HasDevice`

   .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule.__init__

   .. py:method:: build_padding_module() -> torch.nn.Module | None
      :canonical: mipcandy.layer.WithPaddingModule.build_padding_module

      .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule.build_padding_module

   .. py:method:: build_restoring_module(padding_module: torch.nn.Module | None) -> torch.nn.Module | None
      :canonical: mipcandy.layer.WithPaddingModule.build_restoring_module

      .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule.build_restoring_module

   .. py:method:: _lazy_load_padding_module() -> None
      :canonical: mipcandy.layer.WithPaddingModule._lazy_load_padding_module

      .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule._lazy_load_padding_module

   .. py:method:: get_padding_module() -> torch.nn.Module | None
      :canonical: mipcandy.layer.WithPaddingModule.get_padding_module

      .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule.get_padding_module

   .. py:method:: get_restoring_module() -> torch.nn.Module | None
      :canonical: mipcandy.layer.WithPaddingModule.get_restoring_module

      .. autodoc2-docstring:: mipcandy.layer.WithPaddingModule.get_restoring_module

.. py:class:: WithCheckpoint
   :canonical: mipcandy.layer.WithCheckpoint

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.layer.WithCheckpoint

   .. py:method:: load_checkpoint(model: torch.nn.Module, path: str | os.PathLike[str]) -> torch.nn.Module
      :canonical: mipcandy.layer.WithCheckpoint.load_checkpoint
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.layer.WithCheckpoint.load_checkpoint

   .. py:method:: save_checkpoint(model: torch.nn.Module, path: str | os.PathLike[str]) -> None
      :canonical: mipcandy.layer.WithCheckpoint.save_checkpoint
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.layer.WithCheckpoint.save_checkpoint

.. py:class:: WithNetwork(device: mipcandy.types.Device)
   :canonical: mipcandy.layer.WithNetwork

   Bases: :py:obj:`mipcandy.layer.WithCheckpoint`, :py:obj:`mipcandy.layer.HasDevice`

   .. autodoc2-docstring:: mipcandy.layer.WithNetwork

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.layer.WithNetwork.__init__

   .. py:method:: load_checkpoint(model: torch.nn.Module, path: str | os.PathLike[str]) -> torch.nn.Module
      :canonical: mipcandy.layer.WithNetwork.load_checkpoint

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.load_checkpoint

   .. py:method:: save_checkpoint(model: torch.nn.Module, path: str | os.PathLike[str]) -> None
      :canonical: mipcandy.layer.WithNetwork.save_checkpoint

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.save_checkpoint

   .. py:method:: build_network(example_shape: mipcandy.types.AmbiguousShape) -> torch.nn.Module
      :canonical: mipcandy.layer.WithNetwork.build_network
      :abstractmethod:

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.build_network

   .. py:method:: compile_model(model: torch.nn.Module) -> torch.nn.Module
      :canonical: mipcandy.layer.WithNetwork.compile_model
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.compile_model

   .. py:method:: build_network_from_checkpoint(example_shape: mipcandy.types.AmbiguousShape, path: str | os.PathLike[str]) -> torch.nn.Module
      :canonical: mipcandy.layer.WithNetwork.build_network_from_checkpoint

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.build_network_from_checkpoint

   .. py:method:: load_model(example_shape: mipcandy.types.AmbiguousShape, compile_model: bool, *, path: str | os.PathLike[str] | None = None) -> torch.nn.Module
      :canonical: mipcandy.layer.WithNetwork.load_model

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.load_model

   .. py:method:: save_model(model: torch.nn.Module, path: str | os.PathLike[str]) -> None
      :canonical: mipcandy.layer.WithNetwork.save_model

      .. autodoc2-docstring:: mipcandy.layer.WithNetwork.save_model
