docstr: Parameters
  ----------
  save_dir: str
      instrument save dir
  max_workers: int
      workers, default 1; Concurrent number, default is 1; when collecting data, it is recommended that max_workers be set to 1
  max_collector_count: int
      default 2
  delay: float
      time.sleep(delay), default 0
  interval: str
      freq, value from [1min, 1d], default 1d
  start: str
      start datetime, default None
  end: str
      end datetime, default None
  check_data_length: int
      check data length, if not None and greater than 0, each symbol will be considered complete if its data length is greater than or equal to this value, otherwise it will be fetched again, the maximum number of fetches being (max_collector_count). By default None.
  limit_nums: int
      using for debug, by default None
  symbol_regex: str
      symbol regular expression, by default None.
docstr_tok: ["Parameters","--","--","--","--","--","save_dir",":","str","instrument","save","dir","max_workers",":","int","workers",",","default","1",";","Concurrent","number",",","default","is","1",";","when","collecting","data",",","it","is","recommended","that","max_workers","be","set","to","1","max_collector_count",":","int","default","2","delay",":","float","time.sleep","(","delay",")",",","default","0","interval",":","str","freq",",","value","from","[","1min",",","1d","]",",","default","1d","start",":","str","start","datetime",",","default","None","end",":","str","end","datetime",",","default","None","check_data_length",":","int","check","data","length",",","if","not","None","and","greater","than","0",",","each","symbol","will","be","considered","complete","if","its","data","length","is","greater","than","or","equal","to","this","value",",","otherwise","it","will","be","fetched","again",",","the","maximum","number","of","fetches","being","(","max_collector_count",")",".","By","default","None",".","limit_nums",":","int","using","for","debug",",","by","default","None","symbol_regex",":","str","symbol","regular","expression",",","by","default","None","."]
code: def __init__(
      self,
      save_dir: Union[str, Path],
      start: Optional[str] = None,
      end: Optional[str] = None,
      interval: str = "quarterly",
      max_workers: int = 1,
      max_collector_count: int = 1,
      delay: int = 0,
      check_data_length: bool = False,
      limit_nums: Optional[int] = None,
      symbol_regex: Optional[str] = None,
  ):
      """
      Parameters
      ----------
      save_dir: str
          instrument save dir
      max_workers: int
          workers, default 1; Concurrent number, default is 1; when collecting data, it is recommended that max_workers be set to 1
      max_collector_count: int
          default 2
      delay: float
          time.sleep(delay), default 0
      interval: str
          freq, value from [1min, 1d], default 1d
      start: str
          start datetime, default None
      end: str
          end datetime, default None
      check_data_length: int
          check data length, if not None and greater than 0, each symbol will be considered complete if its data length is greater than or equal to this value, otherwise it will be fetched again, the maximum number of fetches being (max_collector_count). By default None.
      limit_nums: int
          using for debug, by default None
      symbol_regex: str
          symbol regular expression, by default None.
      """
      self.symbol_regex = symbol_regex
      super().__init__(
          save_dir=save_dir,
          start=start,
          end=end,
          interval=interval,
          max_workers=max_workers,
          max_collector_count=max_collector_count,
          delay=delay,
          check_data_length=check_data_length,
          limit_nums=limit_nums,
      )
  
imports: import re
  import sys
  from datetime import datetime
  from pathlib import Path
  from typing import List, Iterable, Optional, Union
  import fire
  import pandas
  import baostock
  from loguru import logger
  from data_collector.base import BaseCollector, BaseRun, BaseNormalize
  from data_collector.utils import get_hs_stock_symbols, get_calendar_list
label_desc: Use image node_id 1 to create a new PitCollector object from inherited base classes: BaseCollector with example: obj = PitCollector(save_dir, start, end, interval, max_workers, max_collector_count, delay, check_data_length, limit_nums, symbol_regex)