code: def test_CSZScoreNorm(self):
      origin_df = D.features(
          D.instruments(market="csi300"),
          fields=["$high", "$open", "$low", "$close"],
      )
      origin_df = origin_df.groupby("datetime", group_keys=False).apply(
          lambda x: x[10:12]
      )[50:60]
      df = origin_df.copy()
      CSZScoreNorm(fields_group=None).__call__(df)
      # If we use the formula directly on the original data, we cannot get the correct result,
      # because the original data is processed by `groupby`, so we use the method of slicing,
      # taking the 2nd group of data from the original data, to calculate and compare.
      assert (
          (
              df[2:4]
              == (
                  (origin_df[2:4] - origin_df[2:4].mean()).div(
                      origin_df[2:4].std()
                  )
              )
          )
          .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 4 for calling the TestProcessor obj's underlying member method code with example usage: obj.test_CSZScoreNorm() without return types