code: def _update_sequence_info(
      self, ctx_id: int, name: str, val, step: int
  ):
      # this method is used in the `run.track()`, so please use only write-only instructions
      seq_info = self.sequence_infos[ctx_id, name]
      assert seq_info.initialized
  
      dtype = get_object_typename(val)
  
      if seq_info.dtype is not None:
  
          def update_trace_dtype(old_dtype: str, new_dtype: str):
              logger.warning(
                  f"Updating sequence '{name}' data type from {old_dtype} to {new_dtype}."
              )
              self.meta_tree[
                  "traces_types", new_dtype, ctx_id, name
              ] = 1
              self.meta_run_tree[
                  "traces", ctx_id, name, "dtype"
              ] = new_dtype
              seq_info.dtype = new_dtype
  
          compatible = check_types_compatibility(
              dtype, seq_info.dtype, update_trace_dtype
          )
          if not compatible:
              raise ValueError(
                  f"Cannot log value '{val}' on sequence '{name}'. Incompatible data types."
              )
  
      if seq_info.count == 0:
          self.meta_tree["traces_types", dtype, ctx_id, name] = 1
          self.meta_run_tree["traces", ctx_id, name, "dtype"] = dtype
          self.meta_run_tree[
              "traces", ctx_id, name, "version"
          ] = seq_info.version
          self.meta_run_tree["traces", ctx_id, name, "first"] = val
          self.meta_run_tree[
              "traces", ctx_id, name, "first_step"
          ] = step
          seq_info.dtype = dtype
  
      if step >= seq_info.count:
          self.meta_run_tree["traces", ctx_id, name, "last"] = val
          self.meta_run_tree["traces", ctx_id, name, "last_step"] = step
          seq_info.count = step + 1
  
      if seq_info.version == 2:
          # min/max is supported only for metrics
          if val > seq_info.max:
              self.meta_run_tree["traces", ctx_id, name, "max"] = val
              seq_info.max = val
          if val < seq_info.min:
              self.meta_run_tree["traces", ctx_id, name, "min"] = val
              seq_info.min = val
      if isinstance(val, (tuple, list)):
          record_max_length = max(seq_info.record_max_length, len(val))
          self.meta_run_tree[
              "traces", ctx_id, name, "record_max_length"
          ] = record_max_length
          seq_info.record_max_length = record_max_length
  
imports: import datetime
  import os
  import logging
  from collections import defaultdict
  from copy import deepcopy
  from typing import Dict, Tuple, TYPE_CHECKING
  import pytz
  from aim.sdk.configs import AIM_ENABLE_TRACKING_THREAD
  from aim.sdk.num_utils import is_number, convert_to_py_number
  from aim.sdk.utils import get_object_typename, check_types_compatibility
  from aim.storage.hashing import hash_auto
  from aim.storage.context import Context
  from aim.storage.object import CustomObject
  from aim.storage.types import AimObject
label_desc: Use image node_id 9 for calling the RunTracker obj's underlying member method code with example usage: obj._update_sequence_info(ctx_id, name, val, step) without return types