docs: def fromutc(self, dt):
          """datetime in UTC -> datetime in local time."""
  
          if not isinstance(dt, datetime):
              raise TypeError("fromutc() requires a datetime argument")
          if dt.tzinfo is not self:
              raise ValueError("dt.tzinfo is not self")
          dt = dt.replace(tzinfo=None)
          if dt > self.posix_after:
              dt = self.posix_rules.fromutc(dt.replace(tzinfo=self.posix_rules))
              return dt.replace(tzinfo=self)
          if dt < self.ut[1]:
              tti = self.ti[0]
              fold = 0
          else:
              idx = bisect.bisect_right(self.ut, dt)
              assert self.ut[idx - 1] <= dt
              assert idx == len(self.ut) or dt < self.ut[idx]
              tti_prev, tti = self.ti[idx - 2:idx]
              # Detect fold
              shift = tti_prev[0] - tti[0]
              fold = (shift > dt - self.ut[idx - 1])
          dt += tti[0]
          dt = dt.replace(tzinfo=self)
          if fold:
              return enfold(dt)
          else:
              return dt