docs: def unpickler(zone, utcoffset=None, dstoffset=None, tzname=None):
      """Factory function for unpickling pytz tzinfo instances.
  
      This is shared for both StaticTzInfo and DstTzInfo instances, because
      database changes could cause a zones implementation to switch between
      these two base classes and we can't break pickles on a pytz version
      upgrade.
      """
      # Raises a KeyError if zone no longer exists, which should never happen
      # and would be a bug.
      tz = pytz.timezone(zone)
  
      # A StaticTzInfo - just return it
      if utcoffset is None:
          return tz
  
      # This pickle was created from a DstTzInfo. We need to
      # determine which of the list of tzinfo instances for this zone
      # to use in order to restore the state of any datetime instances using
      # it correctly.
      utcoffset = memorized_timedelta(utcoffset)
      dstoffset = memorized_timedelta(dstoffset)
      try:
          return tz._tzinfos[(utcoffset, dstoffset, tzname)]
      except KeyError:
          # The particular state requested in this timezone no longer exists.
          # This indicates a corrupt pickle, or the timezone database has been
          # corrected violently enough to make this particular
          # (utcoffset,dstoffset) no longer exist in the zone, or the
          # abbreviation has been changed.
          pass
  
      # See if we can find an entry differing only by tzname. Abbreviations
      # get changed from the initial guess by the database maintainers to
      # match reality when this information is discovered.
      for localized_tz in tz._tzinfos.values():
          if (localized_tz._utcoffset == utcoffset
                  and localized_tz._dst == dstoffset):
              return localized_tz
  
      # This (utcoffset, dstoffset) information has been removed from the
      # zone. Add it back. This might occur when the database maintainers have
      # corrected incorrect information. datetime instances using this
      # incorrect information will continue to do so, exactly as they were
      # before being pickled. This is purely an overly paranoid safety net - I
      # doubt this will ever been needed in real life.
      inf = (utcoffset, dstoffset, tzname)
      tz._tzinfos[inf] = tz.__class__(inf, tz._tzinfos)
      return tz._tzinfos[inf]