code: def test_observe_multiple_step(self):
      observer = measurement_metrics.MeasurementObserver()
      observer.observe_first(env=_FAKE_ENV, timestep=_TIMESTEP)
      observer.observe(
          env=_FAKE_ENV, timestep=_TIMESTEP, action=np.array([1])
      )
      first_obs_timestep = copy.deepcopy(_TIMESTEP)
      first_obs_timestep.observation = [1000.0, -50.0]
      observer.observe(
          env=_FAKE_ENV,
          timestep=first_obs_timestep,
          action=np.array([4]),
      )
      second_obs_timestep = copy.deepcopy(_TIMESTEP)
      second_obs_timestep.observation = [-1000.0, 500.0]
      observer.observe(
          env=_FAKE_ENV,
          timestep=second_obs_timestep,
          action=np.array([4]),
      )
      self.assertEqual(
          {
              "measurement[0]_max": 1000.0,
              "measurement[0]_mean": 1.0 / 3,
              "measurement[0]_p25": -499.5,
              "measurement[0]_p50": 1.0,
              "measurement[0]_p75": 500.5,
              "measurement[1]_max": 500.0,
              "measurement[1]_mean": 448.0 / 3.0,
              "measurement[1]_p25": -26.0,
              "measurement[1]_p50": -2.0,
              "measurement[1]_p75": 249.0,
              "measurement[0]_min": -1000.0,
              "measurement[1]_min": -50.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 5 for calling the MeasurementMetricsTest obj's underlying member method code with example usage: obj.test_observe_multiple_step() without return types