docstr: Calendar:
      pd.date_range(start="2005-01-01", stop="2005-03-01", freq="1D")
  
  Instrument:
      {
          "SH600000": [(2005-01-01, 2005-01-31), (2005-02-15, 2005-03-01)],
          "SH600001": [(2005-01-01, 2005-03-01)],
          "SH600002": [(2005-01-01, 2005-02-14)],
          "SH600003": [(2005-02-01, 2005-03-01)],
      }
  
  Feature:
      Stock data(close):
                      2005-01-01  ...   2005-02-01   ...   2005-02-14  2005-02-15  ...  2005-03-01
          SH600000     1          ...      3         ...      4           5               6
          SH600001     1          ...      4         ...      5           6               7
          SH600002     1          ...      5         ...      6           nan             nan
          SH600003     nan        ...      1         ...      2           3               4
  
      FeatureStorage(SH600000, close):
  
          [
              (calendar.index("2005-01-01"), 1),
              ...,
              (calendar.index("2005-03-01"), 6)
          ]
  
          ====> [(0, 1), ..., (59, 6)]
  
  
      FeatureStorage(SH600002, close):
  
          [
              (calendar.index("2005-01-01"), 1),
              ...,
              (calendar.index("2005-02-14"), 6)
          ]
  
          ===> [(0, 1), ..., (44, 6)]
  
      FeatureStorage(SH600003, close):
  
          [
              (calendar.index("2005-02-01"), 1),
              ...,
              (calendar.index("2005-03-01"), 4)
          ]
  
          ===> [(31, 1), ..., (59, 4)]
docstr_tok: ["Calendar",":","pd.date_range","(","start=","''","2005-01-01","''",",","stop=","''","2005-03-01","''",",","freq=","''","1D","''",")","Instrument",":","{","``","SH600000","''",":","[","(","2005-01-01",",","2005-01-31",")",",","(","2005-02-15",",","2005-03-01",")","]",",","``","SH600001","''",":","[","(","2005-01-01",",","2005-03-01",")","]",",","``","SH600002","''",":","[","(","2005-01-01",",","2005-02-14",")","]",",","``","SH600003","''",":","[","(","2005-02-01",",","2005-03-01",")","]",",","}","Feature",":","Stock","data","(","close",")",":","2005-01-01","...","2005-02-01","...","2005-02-14","2005-02-15","...","2005-03-01","SH600000","1","...","3","...","4","5","6","SH600001","1","...","4","...","5","6","7","SH600002","1","...","5","...","6","nan","nan","SH600003","nan","...","1","...","2","3","4","FeatureStorage","(","SH600000",",","close",")",":","[","(","calendar.index","(","``","2005-01-01","''",")",",","1",")",",","...",",","(","calendar.index","(","``","2005-03-01","''",")",",","6",")","]","====",">","[","(","0",",","1",")",",","...",",","(","59",",","6",")","]","FeatureStorage","(","SH600002",",","close",")",":","[","(","calendar.index","(","``","2005-01-01","''",")",",","1",")",",","...",",","(","calendar.index","(","``","2005-02-14","''",")",",","6",")","]","===",">","[","(","0",",","1",")",",","...",",","(","44",",","6",")","]","FeatureStorage","(","SH600003",",","close",")",":","[","(","calendar.index","(","``","2005-02-01","''",")",",","1",")",",","...",",","(","calendar.index","(","``","2005-03-01","''",")",",","4",")","]","===",">","[","(","31",",","1",")",",","...",",","(","59",",","4",")","]"]
code: def test_feature_storage(self):
      """
      Calendar:
          pd.date_range(start="2005-01-01", stop="2005-03-01", freq="1D")
  
      Instrument:
          {
              "SH600000": [(2005-01-01, 2005-01-31), (2005-02-15, 2005-03-01)],
              "SH600001": [(2005-01-01, 2005-03-01)],
              "SH600002": [(2005-01-01, 2005-02-14)],
              "SH600003": [(2005-02-01, 2005-03-01)],
          }
  
      Feature:
          Stock data(close):
                          2005-01-01  ...   2005-02-01   ...   2005-02-14  2005-02-15  ...  2005-03-01
              SH600000     1          ...      3         ...      4           5               6
              SH600001     1          ...      4         ...      5           6               7
              SH600002     1          ...      5         ...      6           nan             nan
              SH600003     nan        ...      1         ...      2           3               4
  
          FeatureStorage(SH600000, close):
  
              [
                  (calendar.index("2005-01-01"), 1),
                  ...,
                  (calendar.index("2005-03-01"), 6)
              ]
  
              ====> [(0, 1), ..., (59, 6)]
  
  
          FeatureStorage(SH600002, close):
  
              [
                  (calendar.index("2005-01-01"), 1),
                  ...,
                  (calendar.index("2005-02-14"), 6)
              ]
  
              ===> [(0, 1), ..., (44, 6)]
  
          FeatureStorage(SH600003, close):
  
              [
                  (calendar.index("2005-02-01"), 1),
                  ...,
                  (calendar.index("2005-03-01"), 4)
              ]
  
              ===> [(31, 1), ..., (59, 4)]
  
      """
  
      feature = FeatureStorage(
          instrument="SZ300677",
          field="close",
          freq="day",
          provider_uri=self.provider_uri,
      )
  
      with self.assertRaises(IndexError):
          print(feature[0])
      assert isinstance(
          feature[3049][1], (float, np.float32)
      ), f"{feature.__class__.__name__}.__getitem__(i: int) error"
      assert (
          len(feature[3049:3052]) == 3
      ), f"{feature.__class__.__name__}.__getitem__(s: slice) error"
      print(f"feature[3049: 3052]: \n{feature[3049: 3052]}")
  
      print(f"feature[:].tail(): \n{feature[:].tail()}")
  
      feature = FeatureStorage(
          instrument="SH600004",
          field="close",
          freq="day",
          provider_uri="not_fount",
      )
  
      with self.assertRaises(ValueError):
          print(feature[0])
      with self.assertRaises(ValueError):
          print(feature[:].empty)
      with self.assertRaises(ValueError):
          print(feature.data.empty)
  
file_path: qlib/tests/storage_tests/test_storage.py
imports: from pathlib import Path
  from collections.abc import Iterable
  import numpy
  from qlib.tests import TestAutoData
  from qlib.data.storage.file_storage import FileCalendarStorage, FileInstrumentStorage, FileFeatureStorage
label_desc: Use image node_id 3 for calling the TestStorage obj's underlying member method code with example usage: obj.test_feature_storage() without return types