code: def utc_datetime_and_leap_second(self):
          
          year, month, day, hour, minute, second = self._utc_tuple(
              _half_millisecond)
          second, fraction = divmod(second, 1.0)
          second = second.astype(int)
          leap_second = second // 60
          second -= leap_second
          milli = (fraction * 1000).astype(int) * 1000
          if self.shape:
              utcs = [utc] * self.shape[0]
              argsets = zip(year, month, day, hour, minute, second, milli, utcs)
              dt = array([datetime(*args) for args in argsets])
          else:
              dt = datetime(year, month, day, hour, minute, second, milli, utc)
          return dt, leap_second
docs: Convert to a Python ``datetime`` in UTC, plus a leap second value.
  
          Convert this time to a `datetime`_ object and a leap second::
  
              dt, leap_second = t.utc_datetime_and_leap_second()
  
          If the third-party `pytz`_ package is available, then its
          ``utc`` timezone will be used as the timezone of the return
          value.  Otherwise, Skyfield uses its own ``utc`` timezone.
  
          The leap second value is provided because a Python ``datetime``
          can only number seconds ``0`` through ``59``, but leap seconds
          have a designation of at least ``60``.  The leap second return
          value will normally be ``0``, but will instead be ``1`` if the
          date and time are a UTC leap second.  Add the leap second value
          to the ``second`` field of the ``datetime`` to learn the real
          name of the second.
  
          If this time is an array, then an array of ``datetime`` objects
          and an array of leap second integers is returned, instead of a
          single value each.