class_docstr: Add a single layer of falling snowflakes to images.
  
  **Supported dtypes**:
  
      * ``uint8``: yes; indirectly tested (1)
      * ``uint16``: no
      * ``uint32``: no
      * ``uint64``: no
      * ``int8``: no
      * ``int16``: no
      * ``int32``: no
      * ``int64``: no
      * ``float16``: no
      * ``float32``: no
      * ``float64``: no
      * ``float128``: no
      * ``bool``: no
  
      - (1) indirectly tested via tests for :class:`Snowflakes`
  
  Parameters
  ----------
  density : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Density of the snowflake layer, as a probability of each pixel in
      low resolution space to be a snowflake.
      Valid values are in the interval ``[0.0, 1.0]``.
      Recommended to be in the interval ``[0.01, 0.075]``.
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  density_uniformity : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Size uniformity of the snowflakes. Higher values denote more
      similarly sized snowflakes.
      Valid values are in the interval ``[0.0, 1.0]``.
      Recommended to be around ``0.5``.
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  flake_size : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Size of the snowflakes. This parameter controls the resolution at
      which snowflakes are sampled. Higher values mean that the resolution
      is closer to the input image's resolution and hence each sampled
      snowflake will be smaller (because of the smaller pixel size).
  
      Valid values are in the interval ``(0.0, 1.0]``.
      Recommended values:
  
          * On 96x128 a value of ``(0.1, 0.4)`` worked well.
          * On 192x256 a value of ``(0.2, 0.7)`` worked well.
          * On 960x1280 a value of ``(0.7, 0.95)`` worked well.
  
      Datatype behaviour:
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  flake_size_uniformity : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Controls the size uniformity of the snowflakes. Higher values mean
      that the snowflakes are more similarly sized.
      Valid values are in the interval ``[0.0, 1.0]``.
      Recommended to be around ``0.5``.
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  angle : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Angle in degrees of motion blur applied to the snowflakes, where
      ``0.0`` is motion blur that points straight upwards.
      Recommended to be in the interval ``[-30, 30]``.
      See also :func:`~imgaug.augmenters.blur.MotionBlur.__init__`.
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  speed : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Perceived falling speed of the snowflakes. This parameter controls the
      motion blur's kernel size. It follows roughly the form
      ``kernel_size = image_size * speed``. Hence, values around ``1.0``
      denote that the motion blur should "stretch" each snowflake over the
      whole image.
  
      Valid values are in the interval ``[0.0, 1.0]``.
      Recommended values:
  
          * On 96x128 a value of ``(0.01, 0.05)`` worked well.
          * On 192x256 a value of ``(0.007, 0.03)`` worked well.
          * On 960x1280 a value of ``(0.001, 0.03)`` worked well.
  
      Datatype behaviour:
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  blur_sigma_fraction : number or tuple of number or list of number or imgaug.parameters.StochasticParameter
      Standard deviation (as a fraction of the image size) of gaussian blur
      applied to the snowflakes.
      Valid values are in the interval ``[0.0, 1.0]``.
      Recommended to be in the interval ``[0.0001, 0.001]``. May still
      require tinkering based on image size.
  
          * If a ``number``, then that value will always be used.
          * If a ``tuple`` ``(a, b)``, then a value will be uniformly sampled
            per image from the interval ``[a, b]``.
          * If a ``list``, then a random value will be sampled from that
            ``list`` per image.
          * If a ``StochasticParameter``, then a value will be sampled
            per image from that parameter.
  
  blur_sigma_limits : tuple of float, optional
      Controls allowed min and max values of `blur_sigma_fraction`
      after(!) multiplication with the image size. First value is the
      minimum, second value is the maximum. Values outside of that range
      will be clipped to be within that range. This prevents extreme
      values for very small or large images.
  
  seed : None or int or imgaug.random.RNG or numpy.random.Generator or numpy.random.BitGenerator or numpy.random.SeedSequence or numpy.random.RandomState, optional
      See :func:`~imgaug.augmenters.meta.Augmenter.__init__`.
  
  name : None or str, optional
      See :func:`~imgaug.augmenters.meta.Augmenter.__init__`.
  
  random_state : None or int or imgaug.random.RNG or numpy.random.Generator or numpy.random.BitGenerator or numpy.random.SeedSequence or numpy.random.RandomState, optional
      Old name for parameter `seed`.
      Its usage will not yet cause a deprecation warning,
      but it is still recommended to use `seed` now.
      Outdated since 0.4.0.
  
  deterministic : bool, optional
      Deprecated since 0.4.0.
      See method ``to_deterministic()`` for an alternative and for
      details about what the "deterministic mode" actually does.
code: def _blend(cls, image, speed_sample, noise_small_blur_rgb):
      # blend:
      # sum for a bit of glowy, hardly visible flakes
      # max for the main flakes
      image_f32 = image.astype(np.float32)
      image_f32 = cls._blend_by_sum(
          image_f32, (0.1 + 20 * speed_sample) * noise_small_blur_rgb
      )
      image_f32 = cls._blend_by_max(
          image_f32, (1.0 + 20 * speed_sample) * noise_small_blur_rgb
      )
      return image_f32
  
imports: from __future__ import print_function, division, absolute_import
  import numpy
  import imgaug
  from .None import meta, arithmetic, blur, contrast, color
  from ..None import parameters
  from ..None import dtypes
label_desc: Use image node_id 10 for calling the SnowflakesLayer obj's underlying member method code with example usage: obj._blend(cls, image, speed_sample, noise_small_blur_rgb) and returns: image_f32