code: def test_ema_is_identity_on_unchanged_data(self):
      def f(x):
          return moving_averages.ExponentialMovingAverage(0.5)(x)
  
      inp_value = 1.0
      init_fn, apply_fn = multi_transform.without_apply_rng(
          transform.transform_with_state(f)
      )
      _, params_state = init_fn(None, inp_value)
  
      # The output should never change as long as the input doesn't.
      value = inp_value
      for _ in range(10):
          value, params_state = apply_fn(None, params_state, value)
          # Floating point error creeps up to 1e-7 (the default).
          np.testing.assert_allclose(inp_value, value, rtol=1e-6)
  
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 8 for calling the MovingAveragesTest obj's underlying member method code with example usage: obj.test_ema_is_identity_on_unchanged_data() and returns: moving_averages