code: def testCSI300(self):
      close_p = D.features(D.instruments("csi300"), ["$close"])
      size = close_p.groupby("datetime").size()
      cnt = close_p.groupby("datetime").count()["$close"]
      size_desc = size.describe(percentiles=np.arange(0.1, 1.0, 0.1))
      cnt_desc = cnt.describe(percentiles=np.arange(0.1, 1.0, 0.1))
  
      print(size_desc)
      print(cnt_desc)
  
      self.assertLessEqual(
          size_desc.loc["max"],
          305,
          "Excessive number of CSI300 constituent stocks",
      )
      self.assertGreaterEqual(
          size_desc.loc["80%"],
          290,
          "Insufficient number of CSI300 constituent stocks",
      )
  
      self.assertLessEqual(
          cnt_desc.loc["max"],
          305,
          "Excessive number of CSI300 constituent stocks",
      )
  
file_path: qlib/tests/dataset_tests/test_datalayer.py
imports: import unittest
  import numpy
  from qlib.data import D
  from qlib.tests import TestAutoData
label_desc: Use image node_id 1 for calling the TestDataset obj's underlying member method code with example usage: obj.testCSI300() without return types