docs: def astimezone(self, tz):
          """
          Return a :py:class:`khayyam.JalaliDatetime` object with new :py:meth:`khayyam.JalaliDatetime.tzinfo` attribute
          tz, adjusting the date and time data so the result is the same UTC time as self, but in *tz*‘s local time.
  
          *tz* must be an instance of a :py:class:`datetime.tzinfo` subclass, and
          its :py:meth:`datetime.tzinfo.utcoffset()` and :py:meth:`datetime.tzinfo.dst()` methods must not
          return :py:obj:`None`. *self* must be aware (`self.tzinfo` must not be `None`, and `self.utcoffset()` must
          not return `None`).
  
          If `self.tzinfo` is `tz`, `self.astimezone(tz)` is equal to `self`: no adjustment of date or time data is
          performed. Else the result is local time in time zone `tz`, representing the same UTC time as `self`:
          after `astz = dt.astimezone(tz), astz - astz.utcoffset()` will usually have the same date and time data as
          `dt - dt.utcoffset()`. The discussion of class :py:class:`datetime.tzinfo` explains the cases at Daylight
          Saving Time transition boundaries where this cannot be achieved (an issue only if `tz` models both
          standard and daylight time).
  
          If you merely want to attach a time zone object `tz` to a datetime dt without adjustment of date and time data,
          use `dt.replace(tzinfo=tz)`. If you merely want to remove the time zone object from an aware datetime dt
          without conversion of date and time data, use `dt.replace(tzinfo=None)`.
  
          Note that the default :py:meth:`datetime.tzinfo.fromutc()` method can be overridden in a
          :py:class:`datetime.tzinfo` subclass to affect the result returned
          by :py:meth:`khayyam.JalaliDatetime.astimezone()`. Ignoring error
          cases, :py:meth:`khayyam.JalaliDatetime.astimezone()` acts like:
  
          .. code-block:: python
             :emphasize-lines: 3,5
  
             def astimezone(self, tz):  # doctest: +SKIP
  
                 if self.tzinfo is tz:
                     return self
                 if self.tzinfo:
                     utc = self - self.utcoffset()
                 else:
                     utc = self
                 return tz.fromutc(utc.replace(tzinfo=tz))
  
  
          :param tz: :py:class:`datetime.tzinfo`
          :rtype: :py:class:`khayyam.JalaliDatetime`
          """
          if self.tzinfo is tz:
              return self
          if self.tzinfo:
              utc = self - self.utcoffset()
          else:
              utc = self
          return tz.fromutc(utc.replace(tzinfo=tz))