code: def coerce_to_pendulum(x: PotentialDatetimeType,
                         assume_local: bool = False) -> Optional[DateTime]:
      
      if not x:  # None and blank string
          return None
      if isinstance(x, DateTime):
          return x
      tz = get_tz_local() if assume_local else get_tz_utc()
      if isinstance(x, datetime.datetime):
          return pendulum.instance(x, tz=tz)  # (*)
      elif isinstance(x, datetime.date):
          # BEWARE: datetime subclasses date. The order is crucial here.
          # Can also use: type(x) is datetime.date
          # noinspection PyUnresolvedReferences
          midnight = DateTime.min.time()
          dt = DateTime.combine(x, midnight)
          return pendulum.instance(dt, tz=tz)  # (*)
      elif isinstance(x, str):
          return pendulum.parse(x, tz=tz)  # (*)  # may raise
      else:
          raise ValueError("Don't know how to convert to DateTime: "
                           "{!r}".format(x))
docs: Converts something to a :class:`pendulum.DateTime`.
  
      Args:
          x: something that may be coercible to a datetime
          assume_local: if ``True``, assume local timezone; if ``False``, assume
              UTC
  
      Returns:
          a :class:`pendulum.DateTime`, or ``None``.
  
      Raises:
          pendulum.parsing.exceptions.ParserError: if a string fails to parse
          ValueError: if no conversion possible