docs: def make_datetime(dt, date_parser=parse_date):
      """Coerce a datetime or string into datetime.datetime object
  
      Arguments:
        dt (str or datetime.datetime or atetime.time or numpy.Timestamp): time or date
          to be coerced into a `datetime.date` object
  
      Returns:
        datetime.time: Time of day portion of a `datetime` string or object
  
      >>> make_date('')
      datetime.date(1970, 1, 1)
      >>> make_date(None)
      datetime.date(1970, 1, 1)
      >>> make_date("11:59 PM") == datetime.date.today()
      True
      >>> make_date(datetime.datetime(1999, 12, 31, 23, 59, 59))
      datetime.date(1999, 12, 31)
      >>> make_datetime(['1970-10-31', '1970-12-25'])  # doctest: +NORMALIZE_WHITESPACE
      [datetime.datetime(1970, 10, 31, 0, 0), datetime.datetime(1970, 12, 25, 0, 0)]
      """
      if (isinstance(dt, (datetime.datetime, datetime.date, datetime.time, pd.Timestamp, np.datetime64)) or
              dt in (float('nan'), float('inf'), float('-inf'), None, '')):
          return dt
      if isinstance(dt, (float, int)):
          return datetime_from_ordinal_float(dt)
      if isinstance(dt, datetime.date):
          return datetime.datetime(dt.year, dt.month, dt.day)
      if isinstance(dt, datetime.time):
          return datetime.datetime(1, 1, 1, dt.hour, dt.minute, dt.second, dt.microsecond)
      if not dt:
          return datetime.datetime(1970, 1, 1)
      if isinstance(dt, basestring):
          try:
              return date_parser(dt)
          except ValueError:
              print('Unable to make_datetime({})'.format(dt))
              raise
      try:
          return datetime.datetime(*dt.timetuple()[:7])
      except AttributeError:
          try:
              dt = list(dt)
              if 0 < len(dt) < 7:
                  try:
                      return datetime.datetime(*dt[:7])
                  except (TypeError, IndexError, ValueError):
                      pass
          except (TypeError, IndexError, ValueError, AttributeError):
              # dt is not iterable
              return dt
  
      return [make_datetime(val, date_parser=date_parser) for val in dt]