code: def test_observe_multiple_step_same_observation(self):
      observer = measurement_metrics.MeasurementObserver()
      observer.observe_first(env=_FAKE_ENV, timestep=_TIMESTEP)
      observer.observe(
          env=_FAKE_ENV, timestep=_TIMESTEP, action=np.array([1])
      )
      observer.observe(
          env=_FAKE_ENV, timestep=_TIMESTEP, action=np.array([4])
      )
      observer.observe(
          env=_FAKE_ENV, timestep=_TIMESTEP, action=np.array([5])
      )
      self.assertEqual(
          {
              "measurement[0]_max": 1.0,
              "measurement[0]_mean": 1.0,
              "measurement[0]_p25": 1.0,
              "measurement[0]_p50": 1.0,
              "measurement[0]_p75": 1.0,
              "measurement[1]_max": -2.0,
              "measurement[1]_mean": -2.0,
              "measurement[1]_p25": -2.0,
              "measurement[1]_p50": -2.0,
              "measurement[1]_p75": -2.0,
              "measurement[0]_min": 1.0,
              "measurement[1]_min": -2.0,
          },
          observer.get_metrics(),
      )
  
file_path: acme/acme/utils/observers/measurement_metrics_test.py
imports: import copy
  from unittest import mock
  from acme import specs
  from acme.testing import fakes
  from acme.utils.observers import measurement_metrics
  import dm_env
  import numpy
  from absl.testing import absltest
label_desc: Use image node_id 4 for calling the MeasurementMetricsTest obj's underlying member method code with example usage: obj.test_observe_multiple_step_same_observation() without return types