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   P/home/ubuntu/veenaModal/venv/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sJ 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sJ t	||sJ t	||rJ t	|| rJ |
 d
t| ksJ 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
