§
    1@Äj?  ã                   ó`  — d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 d„ Z
i Zd„ Zd„ Zd„ Zej        Z G d	„ d
¦  «        Zd„ Zd„ Z ej        ee¦  «         d„ Zd„ Zdefd„Zd„ Zd„ Z G d„ dej        ¦  «        Zd„ Zeej        e<    G d„ dej        ¦  «        Z G d„ d¦  «        ZdS )z/
Serialization support for compiled functions.
é    N)Úcloudpickle)Úirc                 ó   —  | j         |Ž S )zM
    Global hook to rebuild a given class from its __reduce__ arguments.
    )Ú_rebuild)ÚclsÚargss     úEC:\Projects\Historical\venv\Lib\site-packages\numba/core/serialize.pyÚ_rebuild_reductionr
      s   € ð ˆ3Œ<˜ÐÐó    c                 óˆ   — | |f}	 t           |         }n.# t          $ r! t          j        |¦  «        xt           |<   }Y nw xY w|S )zËUsed by `numba_unpickle` from _helperlib.c

    Parameters
    ----------
    address : int
    bytedata : bytes
    hashed : bytes

    Returns
    -------
    obj : object
        unpickled object
    )Ú_unpickled_memoÚKeyErrorr   Úloads)ÚaddressÚbytedataÚhashedÚkeyÚobjs        r	   Ú_numba_unpickler      sb   € ð �FÐ
€CðAÝ˜cÔ"ˆˆøÝð Að Að AÝ%0Ô%6°xÑ%@Ô%@Ð@�˜Ñ˜s˜s˜sðAøøøà€Js   † ”(?¾?c                 óÖ   — t           }t          j        ¦   «         5 } ||d¬¦  «        }|                     | ¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |S )zISimilar to `pickle.dumps()`. Returns the serialized object in bytes.
    é   )ÚprotocolN)ÚNumbaPicklerÚioÚBytesIOÚdumpÚgetvalue)r   ÚpicklerÚbufÚpÚpickleds        r	   Údumpsr"   4   sž   € õ €GÝ	Œ‰Œð !˜ØˆG�C !Ð$Ñ$Ô$ˆØ	�Šˆs‰ŒˆØ—,’,‘.”.ˆð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð
 €Ns   ›7AÁA"Á%A"c                 ó&  — t          j        | ¦  «        \  }}}g }t          |¦  «        }|D ]T}t          |t          j        ¦  «        r#|                     t          |¦  «        ¦  «         Œ?|                     |¦  «         ŒU|t          |¦  «        |fS ©N)	r   r   ÚiterÚ
isinstancer   ÚValueÚappendÚnextÚtuple)Ú
static_excÚexc_argsÚexcÚstatic_argsÚlocinfoÚ	real_argsÚexc_args_iterÚargs           r	   Úruntime_build_excinfo_structr3   @   s—   € Ý +Ô 1°*Ñ =Ô =Ñ€Cˆ�gØ€IÝ˜‘N”N€MØð "ð "ˆÝ�c�2œ8Ñ$Ô$ð 	"Ø×Ò�T -Ñ0Ô0Ñ1Ô1Ð1Ð1à×Ò˜SÑ!Ô!Ð!Ð!Ø•�yÑ!Ô! 7Ð+Ð+r   c                   ó8   — e Zd ZdZdZd„ Zd„ Zed„ ¦   «         ZdS )Ú_CustomPickleda€  A wrapper for objects that must be pickled with `NumbaPickler`.

    Standard `pickle` will pick up the implementation registered via `copyreg`.
    This will spawn a `NumbaPickler` instance to serialize the data.

    `NumbaPickler` overrides the handling of this type so as not to spawn a
    new pickler for the object when it is already being pickled by a
    `NumbaPickler`.
    ©ÚctorÚstatesc                 ó"   — || _         || _        d S r$   r6   )Úselfr7   r8   s      r	   Ú__init__z_CustomPickled.__init__]   s   € ØˆŒ	ØˆŒˆˆr   c                 ó6   — t           j        | j        | j        ffS r$   )r5   r   r7   r8   ©r:   s    r	   Ú_reducez_CustomPickled._reducea   s   € ÝÔ&¨¬°D´KÐ(@Ð@Ð@r   c                 ó   —  | ||¦  «        S r$   © )r   r7   r8   s      r	   r   z_CustomPickled._rebuildd   s   € àˆs�4˜Ñ Ô Ð r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r;   r>   Úclassmethodr   r@   r   r	   r5   r5   P   sa   € € € € € ðð ð !€Iðð ð ðAð Að Að ð!ð !ñ „[ð!ð !ð !r   r5   c                 óF   — t          | ¦  «        \  }}t          ||¦  «        S )zPstandard unpickling for `_CustomPickled`.

    Uses `NumbaPickler` to load.
    )r   r5   )Ú
serializedr7   r8   s      r	   Ú_unpickle__CustomPickledrI   i   s%   € õ
 ˜Ñ$Ô$�L€Dˆ&Ý˜$ Ñ'Ô'Ð'r   c                 óL   — t          | j        | j        f¦  «        }t          |ffS )zNstandard pickling for `_CustomPickled`.

    Uses `NumbaPickler` to dump.
    )r"   r7   r8   rI   )ÚcprH   s     r	   Ú_pickle__CustomPickledrL   r   s'   € õ
 ˜œ ¤Ð+Ñ,Ô,€JÝ# j ]Ð2Ð2r   c                 ó2   — t           t          | |¦  «        ffS )a€  For customizing object serialization in `__reduce__`.

    Object states provided here are used as keyword arguments to the
    `._rebuild()` class method.

    Parameters
    ----------
    states : dict
        Dictionary of object states to be serialized.

    Returns
    -------
    result : tuple
        This tuple conforms to the return type requirement for `__reduce__`.
    )Úcustom_rebuildr5   )r   r8   s     r	   Úcustom_reducerO      s   € õ  �N¨3°Ñ7Ô7Ð9Ð9Ð9r   c                 ó8   — | j         | j        }} |j        di |¤ŽS )ziCustomized object deserialization.

    This function is referenced internally by `custom_reduce()`.
    r@   )r7   r8   r   )Úcustom_pickledr   r8   s      r	   rN   rN   ’   s+   € ð
 !Ô% ~Ô'<ˆ€CØˆ3Œ<Ð!Ð!˜&Ð!Ð!Ð!r   Úreturnc                 óØ   — t          j        ¦   «         5 }t          |¦  «        j        }	  || ¦  «         	 ddd¦  «         dS # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )z‰Check if *obj* can be serialized.

    Parameters
    ----------
    obj : object

    Returns
    --------
    can_serialize : bool
    NTF)r   r   r   r   Ú	Exception)r   Úfoutr   s      r	   Úis_serializablerV   ›   sâ   € õ 
Œ‰Œð 	˜Ý˜DÑ!Ô!Ô&ˆð	ØˆD�‰IŒIˆIð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	øõ ð 	ð 	ð 	ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð	øøøð		ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s3   ”AªAµAÁ
AÁAÁAÁAÁA#Á&A#c                 óL   — t          j        dt          | ¦  «        › d�¦  «        ‚)NzPickling of z is unsupported)ÚpickleÚPicklingErrorÚtype)r   s    r	   Ú
_no_pickler[   ²   s%   € Ý
Ô
ÐH­d°3©i¬iÐHÐHÐHÑ
IÔ
IÐIr   c                 óD   — t           j                             | ¦  «         | S )z1This is called on a type to disable pickling
    )r   Údisabled_typesÚadd)Útyps    r	   Údisable_picklingr`   ¶   s    € õ Ô×#Ò# CÑ(Ô(Ð(à€Jr   c                   ó4   ‡ — e Zd Z e¦   «         Z	 ˆ fd„Zˆ xZS )r   c                 ó�   •— t          |¦  «        | j        v rt          |¦  «         t          ¦   «                              |¦  «        S r$   )rZ   r]   r[   ÚsuperÚreducer_override)r:   r   Ú	__class__s     €r	   rd   zNumbaPickler.reducer_overrideÃ   s:   ø€ å�‰9Œ9˜Ô+Ð+Ð+Ý�s‰OŒOˆOÝ‰wŒw×'Ò'¨Ñ,Ô,Ð,r   )rA   rB   rC   Úsetr]   rd   Ú__classcell__©re   s   @r	   r   r   ¾   sH   ø€ € € € € Ø�S‘U”U€Nðð-ð -ð -ð -ð -ð -ð -ð -ð -r   r   c                 ó*   — |                       ¦   «         S r$   )r>   )rK   s    r	   Ú_custom_reduce__custompickledrj   Ê   s   € Ø�:Š:‰<Œ<Ðr   c                   ón   — e Zd ZdZej        d„ ¦   «         Zeej        d„ ¦   «         ¦   «         Zd„ Z	d„ Z
dS )ÚReduceMixinznA mixin class for objects that should be reduced by the NumbaPickler
    instead of the standard pickler.
    c                 ó   — t           ‚r$   ©ÚNotImplementedErrorr=   s    r	   Ú_reduce_stateszReduceMixin._reduce_states×   s   € å!Ð!r   c                 ó   — t           ‚r$   rn   )r   Úkwargss     r	   r   zReduceMixin._rebuildÛ   s
   € õ "Ð!r   c                 ó   — | j         S r$   rh   r=   s    r	   Ú_reduce_classzReduceMixin._reduce_classâ   s
   € ØŒ~Ðr   c                 ój   — t          |                      ¦   «         |                      ¦   «         ¦  «        S r$   )rO   rt   rp   r=   s    r	   Ú
__reduce__zReduceMixin.__reduce__ç   s*   € Ý˜T×/Ò/Ñ1Ô1°4×3FÒ3FÑ3HÔ3HÑIÔIÐIr   N)rA   rB   rC   rD   ÚabcÚabstractmethodrp   rF   r   rt   rv   r@   r   r	   rl   rl   Ñ   s‰   € € € € € ðð ð
 	Ôð"ð "ñ Ôð"ð ØÔð"ð "ñ Ôñ „[ð"ð
ð ð ð
Jð Jð Jð Jð Jr   rl   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zed„ ¦   «         ZdS )ÚPickleCallableByPathaã  Wrap a callable object to be pickled by path to workaround limitation
    in pickling due to non-pickleable objects in function non-locals.

    Note:
    - Do not use this as a decorator.
    - Wrapped object must be a global that exist in its parent module and it
      can be imported by `from the_module import the_object`.

    Usage:

    >>> def my_fn(x):
    >>>     ...
    >>> wrapped_fn = PickleCallableByPath(my_fn)
    >>> # refer to `wrapped_fn` instead of `my_fn`
    c                 ó   — || _         d S r$   ©Ú_fn)r:   Úfns     r	   r;   zPickleCallableByPath.__init__û   s   € ØˆŒˆˆr   c                 ó   —  | j         |i |¤ŽS r$   r|   )r:   r   rr   s      r	   Ú__call__zPickleCallableByPath.__call__þ   s   € ØˆtŒx˜Ð( Ð(Ð(Ð(r   c                 óZ   — t          | ¦  «        j        | j        j        | j        j        ffS r$   )rZ   r   r}   rB   rA   r=   s    r	   rv   zPickleCallableByPath.__reduce__  s%   € Ý�D‰zŒzÔ" T¤XÔ%8¸$¼(Ô:KÐ$MÐMÐMr   c                 óT   —  | t          t          j        |         |¦  «        ¦  «        S r$   )ÚgetattrÚsysÚmodules)r   ÚmodnameÚfn_paths      r	   r   zPickleCallableByPath._rebuild  s#   € àˆs•7�3œ; wÔ/°Ñ9Ô9Ñ:Ô:Ð:r   N)	rA   rB   rC   rD   r;   r€   rv   rF   r   r@   r   r	   rz   rz   ë   si   € € € € € ðð ðð ð ð)ð )ð )ðNð Nð Nð ð;ð ;ñ „[ð;ð ;ð ;r   rz   ) rD   r„   rw   r   ÚcopyregrX   Únumbar   Úllvmliter   r
   r   r   r"   r3   r   r5   rI   rL   rO   rN   ÚboolrV   r[   r`   ÚCloudPicklerr   rj   Údispatch_tableÚABCrl   rz   r@   r   r	   ú<module>r�      s  ððð ð €
€
€
Ø 
€
€
€
Ø 	€	€	€	Ø €€€ð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð €ðð ð ð,	ð 	ð 	ð	,ð 	,ð 	,ð 	Ô€ð!ð !ð !ð !ð !ñ !ô !ð !ð2(ð (ð (ð3ð 3ð 3ð €„ˆ~Ð5Ñ 6Ô 6Ð 6ð:ð :ð :ð&"ð "ð "ð˜Dð ð ð ð ð.Jð Jð Jðð ð ð	-ð 	-ð 	-ð 	-ð 	-�;Ô+ñ 	-ô 	-ð 	-ðð ð ð /L€Ô ˜NÑ +ðJð Jð Jð Jð J�#”'ñ Jô Jð Jð4;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;r   