class_docstr: Composable cycles.
  
  This class has compositions methods:
  
  ``+``
    for 'inner' products (zip)
  
  ``+=``
    in-place ``+``
  
  ``*``
    for outer products (`itertools.product`) and integer multiplication
  
  ``*=``
    in-place ``*``
  
  and supports basic slicing via ``[]``.
  
  Parameters
  ----------
  left, right : Cycler or None
      The 'left' and 'right' cyclers.
  op : func or None
      Function which composes the 'left' and 'right' cyclers.
docstr: Class method to create 'base' Cycler objects
  that do not have a 'right' or 'op' and for which
  the 'left' object is not another Cycler.
  
  Parameters
  ----------
  label : hashable
      The property key.
  
  itr : iterable
      Finite length iterable of the property values.
  
  Returns
  -------
  `Cycler`
      New 'base' cycler.
code: def _from_iter(cls, label: K, itr: Iterable[V]) -> Cycler[K, V]:
      """
      Class method to create 'base' Cycler objects
      that do not have a 'right' or 'op' and for which
      the 'left' object is not another Cycler.
  
      Parameters
      ----------
      label : hashable
          The property key.
  
      itr : iterable
          Finite length iterable of the property values.
  
      Returns
      -------
      `Cycler`
          New 'base' cycler.
      """
      ret: Cycler[K, V] = cls(None)
      ret._left = list({label: v} for v in itr)
      ret._keys = {label}
      return ret
  
imports: from __future__ import annotations
  from collections.abc import Hashable, Iterable, Generator
  import copy
  from functools import reduce
  from itertools import product, cycle
  from operator import mul, add
  from typing import TypeVar, Generic, Callable, Union, Dict, List, Any, overload, cast
label_desc: Use image node_id 6 for calling the Cycler obj's underlying member method code with example usage: obj._from_iter(cls, label, itr) and returns: ret