code: def test_numeric_transformer(transformer_key, tmpdir):
      Transformer = get_from_registry(
          transformer_key, numeric_transformation_registry
      )
      transformer_name = Transformer().__class__.__name__
      if transformer_name == "Log1pTransformer":
          raw_values = np.random.lognormal(5, 2, size=100)
      else:
          raw_values = np.random.normal(5, 2, size=100)
  
      backend = LOCAL_BACKEND
      parameters = Transformer.fit_transform_params(raw_values, backend)
      if transformer_name in {
          "Log1pTransformer",
          "IdentityTransformer",
      }:
          # should be empty
          assert not bool(parameters)
      else:
          # should not be empty
          assert bool(parameters)
  
      # instantiate numeric transformer
      numeric_transfomer = Transformer(**parameters)
  
      # transform values
      transformed_values = numeric_transfomer.transform(raw_values)
  
      # inverse transform the prior transformed values
      reconstructed_values = numeric_transfomer.inverse_transform(
          transformed_values
      )
  
      # should now match
      assert np.allclose(raw_values, reconstructed_values)
  
      # now test numeric transformer with output feature
      df = pd.DataFrame(
          np.array([raw_values, raw_values]).T, columns=["x", "y"]
      )
      config = {
          "input_features": [{"name": "x", "type": "number"}],
          "output_features": [
              {
                  "name": "y",
                  "type": "number",
                  "preprocessing": {"normalization": transformer_key},
              }
          ],
          "combiner": {
              "type": "concat",
          },
          TRAINER: {
              "epochs": 2,
              "batch_size": 16,
          },
      }
  
      args = {
          "config": config,
          "skip_save_processed_input": True,
          "output_directory": os.path.join(tmpdir, "results"),
          "logging_level": logging.WARN,
      }
  
      # ensure no exceptions are raised
      experiment_cli(dataset=df, **args)
  
imports: import json
  import logging
  import os.path
  import re
  import numpy
  import pandas
  import pytest
  import torch
  from ludwig import globals
  from ludwig.api import LudwigModel
  from ludwig.backend import LOCAL_BACKEND
  from ludwig.constants import BATCH_SIZE, CATEGORY, DEFAULTS, EPOCHS, INPUT_FEATURES, OUTPUT_FEATURES, PREPROCESSING, TRAINER, TRAINING
  from ludwig.contribs.mlflow import MlflowCallback
  from ludwig.experiment import experiment_cli
  from ludwig.features.number_feature import numeric_transformation_registry
  from ludwig.globals import DESCRIPTION_FILE_NAME, TRAINING_PREPROC_FILE_NAME
  from ludwig.schema.optimizers import optimizer_registry
  from ludwig.utils.data_utils import load_json, replace_file_extension
  from ludwig.utils.misc_utils import get_from_registry
  from ludwig.utils.package_utils import LazyLoader
  from tests.integration_tests import synthetic_test_data
  from tests.integration_tests.utils import category_feature, generate_data, LocalTestBackend
label_desc: Use image node_id 8 for calling a global function with example usage: test_numeric_transformer(transformer_key, tmpdir) without return types