class_docstr: A fixed length vector of deterministically generated pseudo-random floats.
  
  This enables a communication strategy for the distributed training, that allows to transfer noise table indices
  instead of full gradient vectors.
  
  :param count: Number of float values in the fixed length table (250.000.000 x 32bit floats = 1GB)
code: def __init__(self, count: int = 250_000_000):
      seed = 123
      # default is 1 gigabyte of 32-bit numbers
      print(
          "Sampling {} random numbers with seed {}".format(count, seed)
      )
      self._shared_mem = multiprocessing.Array(ctypes.c_float, count)
      self.noise = np.ctypeslib.as_array(self._shared_mem.get_obj())
      assert self.noise.dtype == np.float32
  
      # split into smaller chunks, allocation of all at once would need 3 times the memory of the table
      # (noise table + numpy array as 64 bit floats)
      batch_size = 10_000_000
      for i in itertools.count():
          start = i * batch_size
          end = min(count, start + batch_size)
  
          # 64-bit to 32-bit conversion here
          self.noise[start:end] = np.random.RandomState(
              seed
          ).standard_normal(end - start)
  
          if end == count:
              break
  
      print("Sampled {} bytes".format(self.noise.size * 4))
  
file_path: maze/maze/train/trainers/es/es_shared_noise_table.py
imports: import ctypes
  import itertools
  import multiprocessing
  import numpy
label_desc: Use image node_id 1 to create a new SharedNoiseTable object from inherited base classes: object with example: obj = SharedNoiseTable(count)