class_docstr: Base strategy for trading
class_docstr_tok: ["Base","strategy","for","trading"]
docstr: return data calendar's available decision range for `self` strategy
  the range consider following factors
  - data calendar in the charge of `self` strategy
  - trading range limitation from the decision of outer strategy
  
  
  related methods
  - TradeCalendarManager.get_data_cal_range
  - BaseTradeDecision.get_data_cal_range_limit
  
  Parameters
  ----------
  rtype: str
      - "full": return the available data index range of the strategy from `start_time` to `end_time`
      - "step": return the available data index range of the strategy of current step
  
  Returns
  -------
  Tuple[int, int]:
      the available range both sides are closed
docstr_tok: ["return","data","calendar","'s","available","decision","range","for","`","self","`","strategy","the","range","consider","following","factors","-","data","calendar","in","the","charge","of","`","self","`","strategy","-","trading","range","limitation","from","the","decision","of","outer","strategy","related","methods","-","TradeCalendarManager.get_data_cal_range","-","BaseTradeDecision.get_data_cal_range_limit","Parameters","--","--","--","--","--","rtype",":","str","-","``","full","''",":","return","the","available","data","index","range","of","the","strategy","from","`","start_time","`","to","`","end_time","`","-","``","step","''",":","return","the","available","data","index","range","of","the","strategy","of","current","step","Returns","--","--","--","-","Tuple","[","int",",","int","]",":","the","available","range","both","sides","are","closed"]
code: def get_data_cal_avail_range(
      self, rtype: str = "full"
  ) -> Tuple[int, int]:
      """
      return data calendar's available decision range for `self` strategy
      the range consider following factors
      - data calendar in the charge of `self` strategy
      - trading range limitation from the decision of outer strategy
  
  
      related methods
      - TradeCalendarManager.get_data_cal_range
      - BaseTradeDecision.get_data_cal_range_limit
  
      Parameters
      ----------
      rtype: str
          - "full": return the available data index range of the strategy from `start_time` to `end_time`
          - "step": return the available data index range of the strategy of current step
  
      Returns
      -------
      Tuple[int, int]:
          the available range both sides are closed
      """
      cal_range = self.trade_calendar.get_data_cal_range(rtype=rtype)
      if self.outer_trade_decision is None:
          raise ValueError(
              f"There is not limitation for strategy {self}"
          )
      range_limit = self.outer_trade_decision.get_data_cal_range_limit(
          rtype=rtype
      )
      return max(cal_range[0], range_limit[0]), min(
          cal_range[1], range_limit[1]
      )
  
imports: from __future__ import annotations
  from abc import ABCMeta, abstractmethod
  from typing import Any, Generator, Optional, TYPE_CHECKING, Union
  from typing import Tuple
  from ..backtest.decision import BaseTradeDecision
  from ..backtest.utils import CommonInfrastructure, LevelInfrastructure, TradeCalendarManager
  from ..rl.interpreter import ActionInterpreter, StateInterpreter
  from ..utils import init_instance_by_config
label_desc: Use image node_id 11 for calling the BaseStrategy obj's underlying member method code with example usage: obj.get_data_cal_avail_range(rtype) and returns: max,  min