code: def test_leaf_components_registers_param_properties(
      module_class: Type[Any], expected_var_dicts: Mapping[str, Any]
  ) -> None:
      module = module_class()
      for path, variable in leaf_components(module).items():
          var_name = path.split(".")[-2] + "." + path.split(".")[-1]
          assert isinstance(variable, tf.Variable)
          np.testing.assert_equal(
              variable.numpy(), expected_var_dicts[var_name]["value"]
          )
          assert (
              variable.trainable
              == expected_var_dicts[var_name]["trainable"]
          )
          assert variable.shape == expected_var_dicts[var_name]["shape"]
  
imports: from typing import Any, Callable, Mapping, Optional, Type
  import numpy
  import pytest
  import tensorflow
  from _pytest.fixtures import SubRequest
  from packaging.version import Version
  import gpflow
  from gpflow.base import AnyNDArray
  from gpflow.config import Config, as_context
  from gpflow.utilities import set_trainable
  from gpflow.utilities.traversal import _merge_leaf_components, leaf_components, tabulate_module_summary
label_desc: Use image node_id 9 for calling a global function with example usage: test_leaf_components_registers_param_properties(module_class, expected_var_dicts) without return types