code: def test_series_tree_values(self):
      # sequential steps
      run = Run()
      run.track(1.0, name="metric 1", context={})
      run.track(2.0, name="metric 1", context={})
      run.track(3.0, name="metric 1", context={})
  
      series_container_path = os.path.join(
          self.repo.path, "seqs", "chunks", run.hash
      )
      rc = RocksContainer(series_container_path, read_only=True)
      tree = ContainerTreeView(rc)
      trace = tree.view(
          (
              "seqs",
              "v2",
              "chunks",
              run.hash,
              Context({}).idx,
              "metric 1",
          )
      )
      self.assertSetEqual(
          {"step", "val", "epoch", "time"}, set(trace.keys())
      )
      steps = sorted(trace.array("step").values_list())
      vals = trace.array("val").values_list()
      epochs = trace.array("epoch").values_list()
      times = trace.array("time").values_list()
  
      self.assertEqual(3, len(steps))
      self.assertEqual(3, len(vals))
      self.assertEqual(3, len(epochs))
      self.assertEqual(3, len(times))
  
      self.assertListEqual([0, 1, 2], steps)
      self.assertEqual(1.0, trace.array("val")[hash_auto(steps[0])])
      self.assertEqual(2.0, trace.array("val")[hash_auto(steps[1])])
      self.assertEqual(3.0, trace.array("val")[hash_auto(steps[2])])
  
      # user-specified steps
      run = Run()
      run.track(1.0, name="metric 1", step=10, context={})
      run.track(2.0, name="metric 1", step=20, context={})
      run.track(3.0, name="metric 1", step=30, context={})
  
      series_container_path = os.path.join(
          self.repo.path, "seqs", "chunks", run.hash
      )
      rc = RocksContainer(series_container_path, read_only=True)
      tree = ContainerTreeView(rc)
      trace = tree.view(
          (
              "seqs",
              "v2",
              "chunks",
              run.hash,
              Context({}).idx,
              "metric 1",
          )
      )
      steps = sorted(trace.array("step").values_list())
      vals = trace.array("val").values_list()
      epochs = trace.array("epoch").values_list()
      times = trace.array("time").values_list()
  
      self.assertEqual(3, len(steps))
      self.assertEqual(3, len(vals))
      self.assertEqual(3, len(epochs))
      self.assertEqual(3, len(times))
  
      self.assertListEqual([10, 20, 30], steps)
      self.assertEqual(1.0, trace.array("val")[hash_auto(steps[0])])
      self.assertEqual(2.0, trace.array("val")[hash_auto(steps[1])])
      self.assertEqual(3.0, trace.array("val")[hash_auto(steps[2])])
  
      # user-specified steps, unordered
      run = Run()
      run.track(3.0, name="metric 1", step=30, context={})
      run.track(1.0, name="metric 1", step=10, context={})
      run.track(2.0, name="metric 1", step=20, context={})
  
      series_container_path = os.path.join(
          self.repo.path, "seqs", "chunks", run.hash
      )
      rc = RocksContainer(series_container_path, read_only=True)
      tree = ContainerTreeView(rc)
      trace = tree.view(
          (
              "seqs",
              "v2",
              "chunks",
              run.hash,
              Context({}).idx,
              "metric 1",
          )
      )
      steps = sorted(trace.array("step").values_list())
      vals = trace.array("val").values_list()
      epochs = trace.array("epoch").values_list()
      times = trace.array("time").values_list()
  
      self.assertEqual(3, len(steps))
      self.assertEqual(3, len(vals))
      self.assertEqual(3, len(epochs))
      self.assertEqual(3, len(times))
  
      self.assertListEqual([10, 20, 30], steps)
      self.assertEqual(1.0, trace.array("val")[hash_auto(steps[0])])
      self.assertEqual(2.0, trace.array("val")[hash_auto(steps[1])])
      self.assertEqual(3.0, trace.array("val")[hash_auto(steps[2])])
  
file_path: aim/tests/sdk/test_run_write_container_data.py
imports: import os
  from tests.base import TestBase
  from aim.sdk import Run
  from aim.storage.context import Context
  from aim.storage.containertreeview import ContainerTreeView
  from aim.storage.rockscontainer import RocksContainer
  from aim.storage.hashing import hash_auto
label_desc: Use image node_id 4 for calling the TestRunContainerData obj's underlying member method code with example usage: obj.test_series_tree_values() without return types