code: def test_norm(backend, ray_cluster_2cpu):
      data_df, proc_df = get_test_data(backend)
      backend = initialize_backend(backend)
  
      feature_1_meta = NumberFeatureMixin.get_feature_meta(
          {}, data_df["x"], {"normalization": "zscore"}, backend, True
      )
      feature_2_meta = NumberFeatureMixin.get_feature_meta(
          {}, data_df["x"], {"normalization": "minmax"}, backend, True
      )
      feature_3_meta = NumberFeatureMixin.get_feature_meta(
          {}, data_df["x"], {"normalization": "iq"}, backend, True
      )
  
      assert feature_1_meta["mean"] == 6
      assert feature_2_meta["min"] == 2
      assert feature_2_meta["max"] == 10
      assert feature_3_meta["q1"] == 4
      assert feature_3_meta["q2"] == 6
      assert feature_3_meta["q3"] == 8
  
      # value checks after normalization
      num_feature = number_feature()
  
      NumberFeatureMixin.add_feature_data(
          feature_config=num_feature,
          input_df=data_df,
          proc_df=proc_df,
          metadata={num_feature[NAME]: feature_1_meta},
          preprocessing_parameters={"normalization": "zscore"},
          backend=backend,
          skip_save_processed_input=False,
      )
      assert np.allclose(
          np.array(proc_df[num_feature[PROC_COLUMN]]),
          np.array(
              [-1.26491106, -0.63245553, 0, 0.63245553, 1.26491106]
          ),
      )
  
      NumberFeatureMixin.add_feature_data(
          feature_config=num_feature,
          input_df=data_df,
          proc_df=proc_df,
          metadata={num_feature[NAME]: feature_2_meta},
          preprocessing_parameters={"normalization": "minmax"},
          backend=backend,
          skip_save_processed_input=False,
      )
      assert np.allclose(
          np.array(proc_df[num_feature[PROC_COLUMN]]),
          np.array([0, 0.25, 0.5, 0.75, 1]),
      )
  
      NumberFeatureMixin.add_feature_data(
          feature_config=num_feature,
          input_df=data_df,
          proc_df=proc_df,
          metadata={num_feature[NAME]: feature_3_meta},
          preprocessing_parameters={"normalization": "iq"},
          backend=backend,
          skip_save_processed_input=False,
      )
      assert np.allclose(
          np.array(proc_df[num_feature[PROC_COLUMN]]),
          np.array([-1, -0.5, 0, 0.5, 1]),
      )
  
file_path: ludwig/tests/ludwig/utils/test_normalization.py
imports: from typing import Tuple
  import numpy
  import pandas
  import pytest
  from ludwig.backend import initialize_backend
  from ludwig.constants import COLUMN, NAME, PROC_COLUMN
  from ludwig.features.feature_utils import compute_feature_hash
  from ludwig.features.number_feature import NumberFeatureMixin, numeric_transformation_registry
  from ludwig.utils.types import DataFrame
label_desc: Use image node_id 3 for calling a global function with example usage: test_norm(backend, ray_cluster_2cpu) without return types