code: def testTuple(self):
      class Dummy:
          def __init__(self, value):
              self.value = value
  
      config = {
          "param1": ("ok", "not ok"),
          "param2": ["not ok", (1, Dummy("ok"))],
          "param3": {
              "param4": (1, [2, Dummy("not ok")], 3),
          },
      }
  
      replaced = create_resolvers_map()
      config = inject_placeholders(config, replaced)
  
      self.assertTrue(isinstance(config["param1"], tuple))
      self.assertEqual(config["param1"], ("ok", "not ok"))
      self.assertTrue(isinstance(config["param2"][1], tuple))
      self.assertTrue(isinstance(config["param3"]["param4"], tuple))
  
      resolve_placeholders(config, replaced)
  
      self.assertTrue(isinstance(config["param2"][1], tuple))
      self.assertEqual(config["param2"][1][1].value, "ok")
      self.assertTrue(isinstance(config["param3"]["param4"], tuple))
      self.assertEqual(config["param3"]["param4"][1][1].value, "not ok")
  
imports: import numpy
  import unittest
  from ray import tune
  from ray.tune.impl.placeholder import inject_placeholders, resolve_placeholders, create_resolvers_map, _FunctionResolver, _RefResolver
  from ray.tune.search.sample import Float, Integer
label_desc: Use image node_id 9 for calling the PlaceholderTest obj's underlying member method code with example usage: obj.testTuple() without return types