code: def push_val(self, samples: np.ndarray):
      assert (
          len(samples.shape) >= 2
      )  # we should always have a batch dimension
      assert (
          samples.shape[1:] == self._mean.shape
      ), "RunningStats input shape mismatch"
      samples = samples.astype(np.float64)
      self._sum += samples.sum(axis=0)
      self._sum_squares += np.square(samples).sum(axis=0)
      self._count += np.shape(samples)[0]
      self._mean = self._sum / self._count
      self._std = np.sqrt(
          np.maximum(
              (self._sum_squares - self._count * np.square(self._mean))
              / np.maximum(self._count - 1, 1),
              self.epsilon,
          )
      )
  
imports: import os
  from abc import ABC, abstractmethod
  import threading
  import pickle
  import redis
  import numpy
  from rl_coach.utils import get_latest_checkpoint
label_desc: Use image node_id 3 for calling the NumpySharedRunningStats obj's underlying member method code with example usage: obj.push_val(samples) without return types