code: def test_inherits_default_from_main_thread(self, default):
      e1 = threading.Event()
      e2 = threading.Event()
  
      config.get_config().check_jax_usage = default
  
      def f():
          self.assertEqual(config.get_config().check_jax_usage, default)
          config.get_config().check_jax_usage = True
          e1.set()
          e2.wait()
          self.assertTrue(config.get_config().check_jax_usage)
  
      def g():
          e1.wait()
          self.assertEqual(config.get_config().check_jax_usage, default)
          config.get_config().check_jax_usage = False
          e2.set()
          self.assertFalse(config.get_config().check_jax_usage)
  
      with futures.ThreadPoolExecutor() as tpe:
          f1 = tpe.submit(g)
          f2 = tpe.submit(f)
          f2.result()
          f1.result()
  
      self.assertEqual(config.get_config().check_jax_usage, default)
  
imports: from concurrent import futures
  import inspect
  import threading
  from absl.testing import absltest
  from absl.testing import parameterized
  from haiku._src import config
label_desc: Use image node_id 4 for calling the ConfigTest obj's underlying member method code with example usage: obj.test_inherits_default_from_main_thread(default) without return types