:py:mod:`mipcandy.profiler`
===========================

.. py:module:: mipcandy.profiler

.. autodoc2-docstring:: mipcandy.profiler
   :allowtitles:

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

Classes
~~~~~~~

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

   * - :py:obj:`ProfilerFrame <mipcandy.profiler.ProfilerFrame>`
     - .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame
          :summary:
   * - :py:obj:`_LineBreak <mipcandy.profiler._LineBreak>`
     - .. autodoc2-docstring:: mipcandy.profiler._LineBreak
          :summary:
   * - :py:obj:`Profiler <mipcandy.profiler.Profiler>`
     - .. autodoc2-docstring:: mipcandy.profiler.Profiler
          :summary:

API
~~~

.. py:class:: ProfilerFrame
   :canonical: mipcandy.profiler.ProfilerFrame

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame

   .. py:attribute:: stack
      :canonical: mipcandy.profiler.ProfilerFrame.stack
      :type: str
      :value: None

      .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame.stack

   .. py:attribute:: cpu
      :canonical: mipcandy.profiler.ProfilerFrame.cpu
      :type: float
      :value: None

      .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame.cpu

   .. py:attribute:: mem
      :canonical: mipcandy.profiler.ProfilerFrame.mem
      :type: float
      :value: None

      .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame.mem

   .. py:attribute:: gpu
      :canonical: mipcandy.profiler.ProfilerFrame.gpu
      :type: list[float] | None
      :value: None

      .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame.gpu

   .. py:attribute:: gpu_mem
      :canonical: mipcandy.profiler.ProfilerFrame.gpu_mem
      :type: list[float] | None
      :value: None

      .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame.gpu_mem

   .. py:method:: __str__() -> str
      :canonical: mipcandy.profiler.ProfilerFrame.__str__

   .. py:method:: export(duration: float) -> str
      :canonical: mipcandy.profiler.ProfilerFrame.export

      .. autodoc2-docstring:: mipcandy.profiler.ProfilerFrame.export

.. py:class:: _LineBreak(message: str)
   :canonical: mipcandy.profiler._LineBreak

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.profiler._LineBreak

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.profiler._LineBreak.__init__

   .. py:method:: __str__() -> str
      :canonical: mipcandy.profiler._LineBreak.__str__

   .. py:method:: export(duration: float) -> str
      :canonical: mipcandy.profiler._LineBreak.export

      .. autodoc2-docstring:: mipcandy.profiler._LineBreak.export

.. py:class:: Profiler(title: str, save_as: str | os.PathLike[str], *, gpus: typing.Sequence[mipcandy.types.Device] = ())
   :canonical: mipcandy.profiler.Profiler

   Bases: :py:obj:`object`

   .. autodoc2-docstring:: mipcandy.profiler.Profiler

   .. rubric:: Initialization

   .. autodoc2-docstring:: mipcandy.profiler.Profiler.__init__

   .. py:method:: get_cpu_usage() -> float
      :canonical: mipcandy.profiler.Profiler.get_cpu_usage
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.get_cpu_usage

   .. py:method:: get_mem_usage() -> float
      :canonical: mipcandy.profiler.Profiler.get_mem_usage

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.get_mem_usage

   .. py:method:: get_total_mem() -> float
      :canonical: mipcandy.profiler.Profiler.get_total_mem
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.get_total_mem

   .. py:method:: get_gpu_usage(device: mipcandy.types.Device) -> float
      :canonical: mipcandy.profiler.Profiler.get_gpu_usage
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.get_gpu_usage

   .. py:method:: get_gpu_mem_usage(device: mipcandy.types.Device) -> float
      :canonical: mipcandy.profiler.Profiler.get_gpu_mem_usage

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.get_gpu_mem_usage

   .. py:method:: get_total_gpu_mem(device: mipcandy.types.Device) -> float
      :canonical: mipcandy.profiler.Profiler.get_total_gpu_mem
      :staticmethod:

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.get_total_gpu_mem

   .. py:method:: _save(obj: mipcandy.profiler.ProfilerFrame | mipcandy.profiler._LineBreak | str) -> None
      :canonical: mipcandy.profiler.Profiler._save

      .. autodoc2-docstring:: mipcandy.profiler.Profiler._save

   .. py:method:: record_allocated_tensors(*, limit: int = 10) -> str
      :canonical: mipcandy.profiler.Profiler.record_allocated_tensors

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.record_allocated_tensors

   .. py:method:: record(*, stack_trace_offset: int = 1) -> mipcandy.profiler.ProfilerFrame
      :canonical: mipcandy.profiler.Profiler.record

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.record

   .. py:method:: line_break(message: str) -> mipcandy.profiler._LineBreak
      :canonical: mipcandy.profiler.Profiler.line_break

      .. autodoc2-docstring:: mipcandy.profiler.Profiler.line_break
