code: def quniform(
      label: str, low: float, high: float, quantize: float
  ) -> Numerical:
      """Sampling from ``uniform(low, high)`` but the final value is
      determined using ``clip(round(uniform(low, high) / q) * q, low, high)``,
      where the clip operation is used to constrain the generated value within the bounds.
  
      For example, for low, high, quantize being specified as 0, 10, 2.5 respectively,
      possible values are [0, 2.5, 5.0, 7.5, 10.0].
      For 2, 10, 5, possible values are [2., 5., 10.].
  
      Suitable for a discrete value with respect to which the objective is still somewhat “smooth”,
      but which should be bounded both above and below.
      Note that the return values will always be float.
      If you want to uniformly choose an **integer** from a range [low, high],
      you can use::
  
          nni.quniform(low - 0.5, high + 0.5, 1).int()
  
      Examples
      --------
      >>> nni.quniform('x', 2.5, 5.5, 2.)
      Numerical(2.5, 5.5, q=2.0, label='x')
      """
  
      if isinstance(quantize, int):
          _logger.warning(
              "Though quantize is an integer (%d) in quniform, the returned value will always be float. "
              "Use `.int()` to convert to integer.",
              quantize,
          )
      if low >= high:
          raise ValueError("low must be strictly smaller than high.")
  
      return Numerical(low, high, quantize=quantize, label=label)
  
file_path: nni/nni/mutable/shortcut.py
imports: from __future__ import annotations
  import logging
  from typing import TYPE_CHECKING, TypeVar, overload, List, cast
  from .mutable import Categorical, Numerical
label_desc: Use image node_id 5 for calling a global function with example usage: quniform(label, low, high, quantize) and returns: Numerical