code: def _check_month(self, ddate):
      if not self.p.monthdays:
          return True
  
      mask = self._monthmask
      daycarry = False
      dmonth = ddate.month
      if dmonth != self._curmonth:
          self._curmonth = dmonth  # write down new month
          daycarry = self.p.monthcarry and bool(mask)
          self._monthmask = mask = collections.deque(self.p.monthdays)
  
      dday = ddate.day
      dc = bisect.bisect_left(mask, dday)  # "left" for days before dday
      daycarry = daycarry or (self.p.monthcarry and dc > 0)
      if dc < len(mask):
          curday = (
              bisect.bisect_right(mask, dday, lo=dc) > 0
          )  # check dday
          dc += curday
      else:
          curday = False
  
      while dc:
          mask.popleft()
          dc -= 1
  
      return daycarry or curday
  
file_path: backtrader/backtrader/timer.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import bisect
  import collections
  from datetime import date, datetime, timedelta
  from itertools import islice
  from .feed import AbstractDataBase
  from .metabase import MetaParams
  from .utils import date2num, num2date
  from .utils.py3 import integer_types, range, with_metaclass
  from .utils import TIME_MAX
label_desc: Use image node_id 4 for calling the Timer obj's underlying member method code with example usage: obj._check_month(ddate) and returns: unknown, True