code: def test_ema_naming_scheme(self):
      ema_name = "this_is_a_wacky_but_valid_name"
      linear_name = "so_is_this"
  
      def f():
          return basic.Linear(output_size=2, name=linear_name)(
              jnp.zeros([6])
          )
  
      init_fn, _ = transform.transform(f)
      params = init_fn(random.PRNGKey(428))
  
      def g(x):
          return moving_averages.EMAParamsTree(0.2, name=ema_name)(x)
  
      init_fn, _ = transform.transform_with_state(g)
      _, params_state = init_fn(None, params)
  
      expected_ema_states = [
          f"{ema_name}/{linear_name}__{s}" for s in ["w", "b"]
      ]
      self.assertEqual(
          set(expected_ema_states), set(params_state.keys())
      )
  
imports: from absl.testing import absltest
  from absl.testing import parameterized
  from haiku._src import basic
  from haiku._src import moving_averages
  from haiku._src import multi_transform
  from haiku._src import test_utils
  from haiku._src import transform
  import jax
  import jax.numpy
  import jax.random
  import numpy
  import tree
label_desc: Use image node_id 1 for calling the EMAParamsTreeTest obj's underlying member method code with example usage: obj.test_ema_naming_scheme() and returns: basic, moving_averages