code: def check_uniform_discrete(
      device="cpu", batch_size=32, shape=[1e5], values=None, niter=10
  ):
      pipe = Pipeline(
          batch_size=batch_size, device_id=0, num_threads=3, seed=123456
      )
      with pipe:
          pipe.set_outputs(
              dali.fn.random.uniform(
                  device=device, values=values, shape=shape
              )
          )
      pipe.build()
      for it in range(niter):
          outputs = pipe.run()
          data_out = (
              outputs[0].as_cpu()
              if isinstance(outputs[0], TensorListGPU)
              else outputs[0]
          )
          values_set = set(values)
          maxval = np.max(values)
          bins = np.concatenate(
              [values, np.array([np.nextafter(maxval, maxval + 1)])]
          )
          bins.sort()
          pvs = []
          for i in range(batch_size):
              data = np.array(data_out[i])
              for x in data:
                  assert x in values_set
              h, _ = np.histogram(data, bins=bins)
              _, pv = st.chisquare(h)
              pvs = pvs + [pv]
          assert (
              np.mean(pvs) > 0.05
          ), f"data is not a uniform distribution. pv = {np.mean(pvs)}"
  
file_path: DALI/dali/test/python/operator_2/test_uniform.py
imports: import nvidia.dali
  from nvidia.dali.pipeline import Pipeline
  from nvidia.dali.backend_impl import TensorListGPU
  import numpy
  import scipy.stats
label_desc: Use image node_id 5 for calling a global function with example usage: check_uniform_discrete(device, batch_size, shape, values, niter) without return types