# Monitor

Here is a tutorial on Google Colab that shows how to use the monitor module

## Basic

labml.monit.section(name=None, *, is_silent: bool = False, is_timed: bool = True, is_partial: bool = False, is_new_line: bool = True, is_children_silent: bool = False, is_track: bool = False, is_not_in_loop: bool = False, total_steps: float = 1.0)

  This creates a monitored `with` block.

  Parameters:

    name (str, Optional) – Name of the section

  Keyword Arguments:

    - is_silent (bool, optional) – Whether not to print time taken. Defaults to `False`.

    - is_timed (bool, optional) – Whether to measure time. Default to `True`.

    - is_partial (bool, optional) – Whether it’s a partial excution where it gets called repeatedly. Defaults to `False`.

    - is_new_line (bool, optional) – Whether to print a new line. Defaults to `True`.

    - is_children_silent (bool, optional) – Whether to make child sections silent. Defaults to `True`.

    - is_track (bool, optional) – Whether to track the time. Defaults to `False`.

    - is_not_in_loop (bool, optional) – Whether to forcefully track this outside `loop()`. Defaults to `False`.

    - total_steps (float, optional) – Total number of steps. This is used to measure progress when `progress()` gets called. Defaults to `1`.

labml.monit.func(name=None, *, is_silent: bool = False, is_timed: bool = True, is_partial: bool = False, is_new_line: bool = True, is_children_silent: bool = False, is_track: bool = False, is_not_in_loop: bool = False, total_steps: float = 1.0)

  This is similar to `section()` but can be used as a decorator.

  Parameters:

    name (str) – Name of the function

  Keyword Arguments:

    - is_silent (bool, optional) – Whether not to print time taken. Defaults to `False`.

    - is_timed (bool, optional) – Whether to measure time. Default to `True`.

    - is_partial (bool, optional) – Whether it’s a partial execution where it gets called repeatedly. Defaults to `False`.

    - is_new_line (bool, optional) – Whether to print a new line. Defaults to `True`.

    - is_children_silent (bool, optional) – Whether to make child sections silent. Defaults to `True`.

    - is_track (bool, optional) – Whether to track the time. Defaults to `False`.

    - is_not_in_loop (bool, optional) – Whether to forcefully track this outside `loop()`. Defaults to `False`.

    - total_steps (float, optional) – Total number of steps. This is used to measure progress when `progress()` gets called. Defaults to `1`.

labml.monit.progress(steps: float)

  Set the progress of the section.

  Parameters:

    steps (float) – Current progress

labml.monit.fail()

  Mark the current section as failed.

## Iterators

labml.monit.iterate(name, iterable: Iterable | Sized | int | None = None, total_steps: int | None = None, *, is_silent: bool = False, is_children_silent: bool = False, is_timed: bool = True, is_track: bool = False, is_not_in_loop: bool = False, context=None)

  This creates a monitored iterator.

  Parameters:

    - name (str, optional) – Name of the iterator

    - iterable (Union[Iterable, Sized, int]) – The iterable

    - total_steps (int, optional) – Total number of steps. If not provided this is calculated from `iterable`.

  Keyword Arguments:

    - is_silent (bool, optional) – Whether not to print time taken. Defaults to `False`.

    - is_timed (bool, optional) – Whether to measure time. Default to `True`.

    - is_children_silent (bool, optional) – Whether to make child sections silent. Defaults to `True`.

    - is_track (bool, optional) – Whether to track the time. Defaults to `False`.

    - is_not_in_loop (bool, optional) – Whether to forcefully track this outside `loop()`. Defaults to `False`.

    - context (optional) – Reference to another section that will be used for monitoring the iteration.

labml.monit.enum(name, iterable: Sized | None = None, *, is_silent: bool = False, is_children_silent: bool = False, is_timed: bool = True, is_track: bool = False, is_not_in_loop: bool = False, context=None)

  This creates a monitored enumerator.

  Parameters:

    - name (str, optional) – Name of the iterator

    - iterable (Sized) – The iterable

  Keyword Arguments:

    - is_silent (bool, optional) – Whether not to print time taken. Defaults to `False`.

    - is_timed (bool, optional) – Whether to measure time. Default to `True`.

    - is_children_silent (bool, optional) – Whether to make child sections silent. Defaults to `True`.

    - is_track (bool, optional) – Whether to track the time. Defaults to `False`.

    - is_not_in_loop (bool, optional) – Whether to forcefully track this outside `loop()`. Defaults to `False`.

    - context (optional) – Reference to another section that will be used for monitoring the iteration.

labml.monit.mix(*iterators: Tuple[str | Callable[[Any], None], Sized | int], is_monit: bool = True)
labml.monit.mix(total_iterations: int, *iterators: Tuple[str | Callable[[Any], None], Sized | int], is_monit: bool = True)

  This has two overloads

  labml.monit.mix(*iterators: Tuple[str | Callable[[Any], None], Sized | int], is_monit: bool = True)
  labml.monit.mix(total_iterations: int, *iterators: Tuple[str | Callable[[Any], None], Sized | int], is_monit: bool = True)

  This will iterate through a list of iterators while mixing among them. This is useful, for instance, when you want to mix training, validation, sampling steps within an epoch.

  You can give it tuples of iterator names and iterators. It will yield the names along with the iterator values.

  If you pass a function instead of a name it will call that function with the iterator value, instead of yielding it.

  Parameters:

    - total_iterations (Union[Collection, range, int]) – The number of times to mix

    - iterators (Tuple[Union[str, Callable[[Any], None]], Union[Sized, int]]) – Are iterators and their names or callback function

    - is_monit (bool, optional) – Whether to monitor the iterations, when inside `loop()`. Default to `True`.

## Loop

labml.monit.loop(iterator_: int, *, is_track: bool = True, is_print_iteration_time: bool = True)
labml.monit.loop(iterator_: range, *, is_track: bool = True, is_print_iteration_time: bool = True)
labml.monit.loop(iterator_: Collection, *, is_track: bool = True, is_print_iteration_time: bool = True)

  This has multiple overloads

  labml.monit.loop(iterator_: range, *, is_track=True, is_print_iteration_time=True)
  labml.monit.loop(iterator_: int, *, is_track=True, is_print_iteration_time=True)
  labml.monit.loop(iterator_: Collection, *, is_track=True, is_print_iteration_time=True)

  This creates a monitored loop. This is designed for training loops. It has better monitoring than using `iterate()` or `enum()`.

  Parameters:

    iterator (Union[Collection, range, int]) – The iterator

  Keyword Arguments:

    - is_track (bool, optional) – Whether track the loop time using `labml.tracker`. Default to `True`.

    - is_print_iteration_time (bool, optional) – Whether to print iteration time. Default to `True`.

labml.monit.finish_loop() → None

  Finish the loop and flush all the loop related monitoring stats.