class_docstr: Base executor for trading
docstr: Though trade calendar can be accessed from multiple sources, but managing in a centralized way will make the
  code easier
docstr_tok: ["Though","trade","calendar","can","be","accessed","from","multiple","sources",",","but","managing","in","a","centralized","way","will","make","the","code","easier"]
code: def trade_calendar(self) -> TradeCalendarManager:
      """
      Though trade calendar can be accessed from multiple sources, but managing in a centralized way will make the
      code easier
      """
      return self.level_infra.get("trade_calendar")
  
imports: from __future__ import annotations
  import copy
  from abc import abstractmethod
  from collections import defaultdict
  from types import GeneratorType
  from typing import Any, Dict, Generator, List, Tuple, Union, cast
  import pandas
  from qlib.backtest.account import Account
  from qlib.backtest.position import BasePosition
  from qlib.log import get_module_logger
  from ..strategy.base import BaseStrategy
  from ..utils import init_instance_by_config
  from .decision import BaseTradeDecision, Order
  from .exchange import Exchange
  from .utils import CommonInfrastructure, LevelInfrastructure, TradeCalendarManager, get_start_end_idx
label_desc: Use image node_id 4 for calling the BaseExecutor obj's underlying member method code with example usage: obj.trade_calendar() and returns: self