code: def _read_calendar(self) -> List[CalVT]:
      # NOTE:
      # if we want to accelerate partial reading calendar
      # we can add parameters like `skip_rows: int = 0, n_rows: int = None` to the interface.
      # Currently, it is not supported for the txt-based calendar
  
      if not self.uri.exists():
          self._write_calendar(values=[])
  
      with self.uri.open("r") as fp:
          res = []
          for line in fp.readlines():
              line = line.strip()
              if len(line) > 0:
                  res.append(line)
          return res
  
imports: import struct
  from pathlib import Path
  from typing import Iterable, Union, Dict, Mapping, Tuple, List
  import numpy
  import pandas
  from qlib.utils.time import Freq
  from qlib.utils.resam import resam_calendar
  from qlib.config import C
  from qlib.data.cache import H
  from qlib.log import get_module_logger
  from qlib.data.storage import CalendarStorage, InstrumentStorage, FeatureStorage, CalVT, InstKT, InstVT
label_desc: Use image node_id 4 for calling the FileCalendarStorage obj's underlying member method code with example usage: obj._read_calendar() and returns: res