U
    -e                     @   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re
  e  e  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   s   dS )zA methodN selfr   r   T/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/dill/tests/test_abc.pyfoo   s    zOneTwoThree.fooc                 C   s   dS )zProperty getterNr   r   r   r   r	   bar   s    zOneTwoThree.barc                 C   s   dS )zProperty setterNr   r   valuer   r   r	   r      s    c                 C   s   dS )zClass methodNr   clsr   r   r	   cfoo    s    zOneTwoThree.cfooc                   C   s   dS )zStatic methodNr   r   r   r   r	   sfoo&   s    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Z_barr   r   r   r	   __init__-   s    zEasyAsAbc.__init__c                 C   s   dS )NInstance Method FOOr   r   r   r   r	   r
   0   s    zEasyAsAbc.fooc                 C   s   | j S r   r   r   r   r   r	   r   3   s    zEasyAsAbc.barc                 C   s
   || _ d S r   r   r   r   r   r	   r   7   s    c                 C   s   dS )NClass Method CFOOr   r   r   r   r	   r   ;   s    zEasyAsAbc.cfooc                   C   s   dS )NStatic Method SFOOr   r   r   r   r	   r   ?   s    zEasyAsAbc.sfooN)r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r	   r   ,   s   


r   c               	   C   s   t ttk	stt ttk	s$tt @ tdt j t jtddtksRtt jtddtkshtW 5 Q R X t } dd | _	t | }t
|t
| k	stt
|j	tkst|	ddkst| dkst| d	kst| d
kstd S )NignoreT)Zbyrefc                 S   s   | d S )N   r   )xr   r   r	   <lambda>N       z$test_abc_non_local.<locals>.<lambda>   	   r!   r    r   )dillcopyr   AssertionErrorr   warningscatch_warningssimplefilterZPicklingWarningr   typer   r   r   r
   )instanceZ	depickledr   r   r	   test_abc_non_localC   s    
 

r1   c               
      sR  G dd dt } t| }|| k	s&tt|t| ks:tG  fddd|   }| dksdtz
|  W n" tk
r } zW 5 d}~X Y nX td dstt|  f\}}dt|jkstd	t|j	kstt| k	st|| k	st||k	stt
||stt
||r$tt
|| r4t| d
t| ksNt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
   \   s    z$test_abc_local.<locals>.LocalABC.fooc                 S   s   t | S r   )reprr   r   r   r	   baz`   s    z$test_abc_local.<locals>.LocalABC.bazN)r   r   r   r   r   r
   r3   r   r   r   r	   LocalABC[   s   
r4   c                       s&   e Zd Zdd Z fddZ  ZS )ztest_abc_local.<locals>.Realc                 S   s   dS )NTrue!r   r   r   r   r	   r
   k   s    z test_abc_local.<locals>.Real.fooc                    s   dt  |   S )NMy )superr3   r   )Real	__class__r   r	   r3   n   s    z test_abc_local.<locals>.Real.baz)r   r   r   r
   r3   __classcell__r   r8   )r9   r	   r8   j   s   r8   r5   NzFailed to raise type errorFz.Realr6   )r   r)   r*   r+   r/   r
   	TypeErrorprintr   r   
isinstancer3   r2   )r4   ZlabcrealeZlabc2Zpikr   r;   r	   test_abc_localW   s.    

rA   c                  C   s   t ddi } G dd d}G dd d}| | t|| rBtt|| sPtt| ||f}t|\}}}t|t| kstt||rtt||stdS )z7
    Test calling metaclass and cache registration
    LocalMetaABCr   c                   @   s   e Zd ZdS )z-test_meta_local_no_cache.<locals>.ClassyClassNr   r   r   r   r   r   r	   ClassyClass   s   rD   c                   @   s   e Zd ZdS )z-test_meta_local_no_cache.<locals>.KlassyClassNrC   r   r   r   r	   KlassyClass   s   rE   N)	r   ABCMetaregister
issubclassr+   r)   dumpsloadsr/   )rB   rD   rE   resZlmabccckcr   r   r	   test_meta_local_no_cache   s    
rN   __main__)__doc__r)   r   r   r,   typesr   settingsr   r   r1   rA   rN   r   r   r   r   r	   <module>   s   
1