a
    zej                     @   s   g d Z i ZdddZdd Zze W n ey8   Y n0 dd Zeeee dd	 Zd
Ze	e
jZdd Zdd Zdd Zdd Zi Zi Zi Zdd Zdd Zdd ZdS ))pickleconstructoradd_extensionremove_extensionclear_extension_cacheNc                 C   s,   t |std|t| < |d ur(t| d S )Nz$reduction functions must be callable)callable	TypeErrordispatch_tabler   )ob_typepickle_functionconstructor_ob r   /usr/lib/python3.9/copyreg.pyr      s
    r   c                 C   s   t | stdd S )Nzconstructors must be callable)r   r   )objectr   r   r   r      s    r   c                 C   s   t | j| jffS N)complexrealimag)cr   r   r   pickle_complex"   s    r   c                 C   s<   |t u rt | }n$|| |}|jt jkr8||| |S r   )r   __new____init__)clsbasestateobjr   r   r   _reconstructor)   s    r   i   c           	      C   s  | j }|jD ]:}t|dr(|jt@ s( qL|j}t|tr|j|u r qLqt	}|t	u rZd }n"||u rtt
d|jd|| }|||f}z
| j}W nX ty   t| dd rt
d|jd| d z
| j}W n ty   d }Y n0 Y n0 | }|r t||fS t|fS d S )N	__flags__zcannot pickle z object	__slots__zf object: a class that defines __slots__ without defining __getstate__ cannot be pickled with protocol )	__class____mro__hasattrr   	_HEAPTYPEr   
isinstance	_new_type__self__r   r   __name____getstate__AttributeErrorgetattr__dict__r   )	selfprotor   r   newr   argsgetstatedictr   r   r   
_reduce_ex7   s>    




r0   c                 G   s   | j | g|R  S r   r   )r   r-   r   r   r   
__newobj__^   s    r2   c                 C   s   | j | g|R i |S r   r1   )r   r-   kwargsr   r   r   __newobj_ex__a   s    r4   c                 C   s   | j d}|d ur|S g }t| ds(n| jD ]}d|j v r.|j d }t|trV|f}|D ]^}|dv rjqZqZ|dr|ds|j	d}|r|
d||f  q|
| qZ|
| qZq.z
|| _W n   Y n0 |S )N__slotnames__r   )r)   __weakref_____z_%s%s)r)   getr    r   r"   str
startswithendswithr%   lstripappendr5   )r   namesr   slotsnamestrippedr   r   r   
_slotnamesg   s2    





rC   c                 C   s   t |}d|  krdks&n td| |f}t||krNt||krNd S |tv rjtd|t| f |tv rtd|t| f |t|< |t|< d S )N   izcode out of rangez)key %s is already registered with code %sz$code %s is already in use for key %s)int
ValueError_extension_registryr9   _inverted_registrymodulerA   codekeyr   r   r   r      s$    

r   c                 C   sR   | |f}t ||ks$t||kr4td||f t |= t|= |tv rNt|= d S )Nz%key %s is not registered with code %s)rG   r9   rH   rF   _extension_cacherI   r   r   r   r      s    r   c                   C   s   t   d S r   )rM   clearr   r   r   r   r      s    r   )N)__all__r   r   r   r   	NameErrorr   r   r!   typerE   r   r#   r0   r2   r4   rC   rG   rH   rM   r   r   r   r   r   r   r   <module>   s,   

	
'<