code: def test_MinMaxNorm(self):
      def normalize(df):
          min_val = np.nanmin(df.values, axis=0)
          max_val = np.nanmax(df.values, axis=0)
          ignore = min_val == max_val
          for _i, _con in enumerate(ignore):
              if _con:
                  max_val[_i] = 1
                  min_val[_i] = 0
          df.loc(axis=1)[df.columns] = (df.values - min_val) / (
              max_val - min_val
          )
          return df
  
      origin_df = D.features(
          [self.TEST_INST], ["$high", "$open", "$low", "$close"]
      ).tail(10)
      origin_df["test"] = 0
      df = origin_df.copy()
      mmn = MinMaxNorm(
          fields_group=None,
          fit_start_time="2021-05-31",
          fit_end_time="2021-06-11",
      )
      mmn.fit(df)
      mmn.__call__(df)
      origin_df = normalize(origin_df)
      assert (df == origin_df).all().all()
  
file_path: qlib/tests/data_mid_layer_tests/test_processor.py
imports: import unittest
  import numpy
  from qlib.data import D
  from qlib.tests import TestAutoData
  from qlib.data.dataset.processor import MinMaxNorm, ZScoreNorm, CSZScoreNorm, CSZFillna
label_desc: Use image node_id 1 for calling the TestProcessor obj's underlying member method code with example usage: obj.test_MinMaxNorm() and returns: df