code: def test_dict_properties_of_sample_batches(self):
      base_dict = {
          "a": np.array([1, 2, 3]),
          "b": np.array([[0.1, 0.2], [0.3, 0.4]]),
          "c": True,
      }
      batch = SampleBatch(base_dict)
      keys_ = list(base_dict.keys())
      values_ = list(base_dict.values())
      items_ = list(base_dict.items())
      assert list(batch.keys()) == keys_
      assert list(batch.values()) == values_
      assert list(batch.items()) == items_
  
      # Add an item and check, whether it's in the "added" list.
      batch["d"] = np.array(1)
      assert batch.added_keys == {"d"}, batch.added_keys
      # Access two keys and check, whether they are in the
      # "accessed" list.
      print(batch["a"], batch["b"])
      assert batch.accessed_keys == {"a", "b"}, batch.accessed_keys
      # Delete a key and check, whether it's in the "deleted" list.
      del batch["c"]
      assert batch.deleted_keys == {"c"}, batch.deleted_keys
  
imports: import copy
  import functools
  import os
  import unittest
  import numpy
  import torch
  import tree
  import ray
  from ray.rllib.models.repeated_values import RepeatedValues
  from ray.rllib.policy.sample_batch import SampleBatch, attempt_count_timesteps, concat_samples
  from ray.rllib.utils.compression import is_compressed
  from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.test_utils import check
  from ray.rllib.utils.torch_utils import convert_to_torch_tensor
label_desc: Use image node_id 4 for calling the TestSampleBatch obj's underlying member method code with example usage: obj.test_dict_properties_of_sample_batches() without return types