o
    _{™iƒ  ã                   @   s˜   d Z ddlZddlZddlmZ ddlZddlmZ dejd< G dd„ deƒZG d	d
„ d
eƒZ	dd„ Z
dd„ Zdd„ ZedkrJe
ƒ  eƒ  eƒ  dS dS )z;
test dill's ability to pickle abstract base class objects
é    N)ÚABC)ÚFunctionTypeTÚrecursec                   @   sd   e Zd Zejdd„ ƒZeejdd„ ƒƒZejejdd„ ƒƒZe	ejdd„ ƒƒZ
eejdd	„ ƒƒZd
S )ÚOneTwoThreec                 C   ó   dS )zA methodN© ©Úselfr   r   úG/home/ubuntu/.local/lib/python3.10/site-packages/dill/tests/test_abc.pyÚfoo   s   zOneTwoThree.fooc                 C   r   )zProperty getterNr   r   r   r   r
   Úbar   ó   zOneTwoThree.barc                 C   r   )zProperty setterNr   ©r	   Úvaluer   r   r
   r      r   c                 C   r   )zClass methodNr   ©Úclsr   r   r
   Úcfoo%   r   zOneTwoThree.cfooc                   C   r   )zStatic methodNr   r   r   r   r
   Úsfoo+   r   zOneTwoThree.sfooN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   Úpropertyr   ÚsetterÚclassmethodr   Ústaticmethodr   r   r   r   r
   r      s    
r   c                   @   sN   e Zd Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZedd	„ ƒZ	e
d
d„ ƒZdS )Ú	EasyAsAbcc                 C   s
   d | _ d S ©N©Ú_barr   r   r   r
   Ú__init__2   s   
zEasyAsAbc.__init__c                 C   r   )NúInstance Method FOOr   r   r   r   r
   r   5   ó   zEasyAsAbc.fooc                 C   s   | j S r   r   r   r   r   r
   r   8   s   zEasyAsAbc.barc                 C   s
   || _ d S r   r   r   r   r   r
   r   <   s   
c                 C   r   )NúClass Method CFOOr   r   r   r   r
   r   @   ó   zEasyAsAbc.cfooc                   C   r   )NúStatic Method SFOOr   r   r   r   r
   r   D   r%   zEasyAsAbc.sfooN)r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r
   r   1   s    


r   c                  C   s  t  t¡tus	J ‚t  t¡tusJ ‚t ¡ % t dt j¡ t jtddtu s)J ‚t jtddtu s4J ‚W d   ƒ n1 s>w   Y  tƒ } dd„ | _t  | ¡}t	|ƒt	| ƒu sZJ ‚t	|jƒt
u scJ ‚| d¡dkslJ ‚| ¡ dkstJ ‚| ¡ d	ks|J ‚| ¡ d
ks„J ‚d S )NÚignoreT)Úbyrefc                 S   s   | d S )Né   r   )Úxr   r   r
   Ú<lambda>S   s    z$test_abc_non_local.<locals>.<lambda>é   é	   r&   r$   r"   )ÚdillÚcopyr   r   ÚwarningsÚcatch_warningsÚsimplefilterÚPicklingWarningr   Útyper   r   r   r   )ÚinstanceÚ	depickledr   r   r
   Útest_abc_non_localH   s    
ý

r7   c               
      sF  G dd„ dt ƒ} t | ¡}|| usJ ‚t|ƒt| ƒu sJ ‚G ‡ fdd„d|ƒ‰ ˆ ƒ }| ¡ dks2J ‚z|ƒ  W n tyI } zW Y d}~nd}~ww tdƒ J ‚t |ˆ ƒ f¡\}}dt|ƒjkscJ ‚d	t|ƒjv slJ ‚t|ƒˆ ustJ ‚|| uszJ ‚||us€J ‚t	||ƒs‡J ‚t	||ƒrŽJ ‚t	|| ƒr•J ‚| 
¡ d
t|ƒ ks¡J ‚dS )z-
    Test using locally scoped ABC class
    c                   @   s"   e Zd Zejdd„ ƒZdd„ ZdS )z test_abc_local.<locals>.LocalABCc                 S   s   d S r   r   r   r   r   r
   r   b   r%   z$test_abc_local.<locals>.LocalABC.fooc                 S   s   t | ƒS r   )Úreprr   r   r   r
   Úbazf   s   z$test_abc_local.<locals>.LocalABC.bazN)r   r   r   r   r   r   r9   r   r   r   r
   ÚLocalABCa   s    
r:   c                       s&   e Zd Zdd„ Z‡‡ fdd„Z‡  ZS )ztest_abc_local.<locals>.Realc                 S   r   )NúTrue!r   r   r   r   r
   r   q   r#   z test_abc_local.<locals>.Real.fooc                    s   dt ˆ | ƒ ¡  S )NúMy )Úsuperr9   r   )ÚRealÚ	__class__r   r
   r9   t   s   z test_abc_local.<locals>.Real.baz)r   r   r   r   r9   Ú__classcell__r   ©r>   )r?   r
   r>   p   s    r>   r;   NzFailed to raise type errorFz.Realr<   )r   r.   r/   r4   r   Ú	TypeErrorÚprintr   r   Ú
isinstancer9   r8   )r:   ÚlabcÚrealÚeÚlabc2Úpikr   rA   r
   Útest_abc_local]   s2   

€þrJ   c                  C   s¤   t  ddi ¡} G dd„ dƒ}G dd„ dƒ}|  |¡ t|| ƒr!J ‚t|| ƒs(J ‚t | ||f¡}t |¡\}}}t|ƒt| ƒksBJ ‚t||ƒrIJ ‚t||ƒsPJ ‚dS )z7
    Test calling metaclass and cache registration
    ÚLocalMetaABCr   c                   @   ó   e Zd ZdS )z-test_meta_local_no_cache.<locals>.ClassyClassN©r   r   r   r   r   r   r
   ÚClassyClass”   ó    rN   c                   @   rL   )z-test_meta_local_no_cache.<locals>.KlassyClassNrM   r   r   r   r
   ÚKlassyClass—   rO   rP   N)r   ÚABCMetaÚregisterÚ
issubclassr.   ÚdumpsÚloadsr4   )rK   rN   rP   ÚresÚlmabcÚccÚkcr   r   r
   Útest_meta_local_no_cacheŽ   s   
rZ   Ú__main__)Ú__doc__r.   r   r   r0   Útypesr   Úsettingsr   r   r7   rJ   rZ   r   r   r   r   r
   Ú<module>   s"   
1
ý