code: def test_equal(self):
      for fw in FRAMEWORKS_TO_TEST:
          spec_eq_1 = TensorSpec("b,h", b=2, h=3, framework=fw)
          spec_eq_2 = TensorSpec("b, h", b=2, h=3, framework=fw)
          spec_eq_3 = TensorSpec(" b,  h", b=2, h=3, framework=fw)
          spec_neq_1 = TensorSpec("b, h", h=3, b=3, framework=fw)
          spec_neq_2 = TensorSpec(
              "b, h", h=3, b=3, framework=fw, dtype=DOUBLE_TYPE[fw]
          )
  
          self.assertTrue(spec_eq_1 == spec_eq_2)
          self.assertTrue(spec_eq_2 == spec_eq_3)
          self.assertTrue(spec_eq_1 != spec_neq_1)
          self.assertTrue(spec_eq_1 != spec_neq_2)
  
file_path: ray/python/ray/rllib/core/models/specs/tests/test_tensor_spec.py
imports: import itertools
  import unittest
  import numpy
  from ray.rllib.utils import try_import_jax, try_import_tf, try_import_torch
  from ray.rllib.utils.test_utils import check
  from ray.rllib.core.models.specs.specs_base import TensorSpec
label_desc: Use image node_id 4 for calling the TestSpecs obj's underlying member method code with example usage: obj.test_equal() without return types