o
    g.                     @   s   d dl Z d dlZd dlZG dd de jZG dd de jZG dd deZG dd	 d	eZed
dZ	ee	fdZ
G dd dZG dd deZG dd de jZdd Zedkr_e   dS dS )    Nc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestIsInstanceExceptionsc                 C   s:   G dd dt }G dd dt }| dt| |  d S )Nc                   @      e Zd Zdd ZeeZdS )z;TestIsInstanceExceptions.test_class_has_no_bases.<locals>.Ic                 S   s   d S N selfr   r   J/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_isinstance.pygetclass   s   zDTestIsInstanceExceptions.test_class_has_no_bases.<locals>.I.getclassN__name__
__module____qualname__r	   property	__class__r   r   r   r   I   s    r   c                   @   r   )z;TestIsInstanceExceptions.test_class_has_no_bases.<locals>.Cc                 S      dS Nr   r   r   r   r   r   getbases"      zDTestIsInstanceExceptions.test_class_has_no_bases.<locals>.C.getbasesNr   r   r   r   r   	__bases__r   r   r   r   C!       r   F)objectassertEqual
isinstancer   r   r   r   r   r   test_class_has_no_bases   s   z0TestIsInstanceExceptions.test_class_has_no_basesc                    sL   G dd dt  G  fdddt }G dd dt }| tt| |  d S )Nc                   @   r   )zPTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.Ec                 S      t r   RuntimeErrorr   r   r   r   r   ,   r   zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.E.getbasesNr   r   r   r   r   E+   r   r!   c                       s    e Zd Z fddZeeZdS )zPTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.Ic                    s     S r   r   r   r!   r   r   r	   1      zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.I.getclassNr
   r   r"   r   r   r   0   s    r   c                   @   r   )zPTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.Cc                 S   r   r   r   r   r   r   r   r   6   r   zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   5   r   r   r   assertRaisesr    r   r   r   r"   r   ,test_bases_raises_other_than_attribute_error*   s   zETestIsInstanceExceptions.test_bases_raises_other_than_attribute_errorc                 C   6   G dd d}G dd dt }| tt| |  d S )Nc                   @      e Zd ZdS )zFTestIsInstanceExceptions.test_dont_mask_non_attribute_error.<locals>.INr   r   r   r   r   r   r   r   ?       r   c                   @   r   )zFTestIsInstanceExceptions.test_dont_mask_non_attribute_error.<locals>.Cc                 S   r   r   r   r   r   r   r   r   B   r   zOTestIsInstanceExceptions.test_dont_mask_non_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   A   r   r   r$   r   r   r   r   "test_dont_mask_non_attribute_error>      z;TestIsInstanceExceptions.test_dont_mask_non_attribute_errorc                 C   r'   )Nc                   @   r(   )z=TestIsInstanceExceptions.test_mask_attribute_error.<locals>.INr)   r   r   r   r   r   K   r*   r   c                   @   r   )z=TestIsInstanceExceptions.test_mask_attribute_error.<locals>.Cc                 S   r   r   AttributeErrorr   r   r   r   r   N   r   zFTestIsInstanceExceptions.test_mask_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   M   r   r   )r   r%   	TypeErrorr   r   r   r   r   test_mask_attribute_errorJ   r,   z2TestIsInstanceExceptions.test_mask_attribute_errorc                 C   sH   G dd dt }| }| tt|t G dd d}| tt|| d S )Nc                   @   r   )zQTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.Cc                 S   r   r   r   r   r   r   r   r	   X   r   zZTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.C.getclassNr
   r   r   r   r   r   W   r   r   c                   @   r(   )zQTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.DNr)   r   r   r   r   D`   r*   r1   )r   r%   r    r   bool)r   r   cr1   r   r   r   -test_isinstance_dont_mask_non_attribute_errorV   s
   zFTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_errorN)r   r   r   r   r&   r+   r0   r4   r   r   r   r   r      s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestIsSubclassExceptionsc                 C   8   G dd dt }G dd d|}| tt| |  d S )Nc                   @   r   )zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.Cc                 S   r   r   r   r   r   r   r   r   j   r   zOTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   i   r   r   c                   @   r(   )zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.SNr)   r   r   r   r   Sn   r*   r7   r   r%   r    
issubclassr   r   r7   r   r   r   r+   h      z;TestIsSubclassExceptions.test_dont_mask_non_attribute_errorc                 C   r6   )Nc                   @   r   )z=TestIsSubclassExceptions.test_mask_attribute_error.<locals>.Cc                 S   r   r   r-   r   r   r   r   r   t   r   zFTestIsSubclassExceptions.test_mask_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   s   r   r   c                   @   r(   )z=TestIsSubclassExceptions.test_mask_attribute_error.<locals>.SNr)   r   r   r   r   r7   x   r*   r7   r   r%   r/   r9   r:   r   r   r   r0   r   r;   z2TestIsSubclassExceptions.test_mask_attribute_errorc                 C   4   G dd d}G dd dt }| tt||  d S )Nc                   @   r(   )zQTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_arg.<locals>.BNr)   r   r   r   r   B   r*   r>   c                   @   r   )zQTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_arg.<locals>.Cc                 S   r   r   r   r   r   r   r   r      r   zZTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_arg.<locals>.C.getbasesNr   r   r   r   r   r      r   r   r8   r   r>   r   r   r   r   -test_dont_mask_non_attribute_error_in_cls_arg      zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_argc                 C   r=   )Nc                   @   r(   )zHTestIsSubclassExceptions.test_mask_attribute_error_in_cls_arg.<locals>.BNr)   r   r   r   r   r>      r*   r>   c                   @   r   )zHTestIsSubclassExceptions.test_mask_attribute_error_in_cls_arg.<locals>.Cc                 S   r   r   r-   r   r   r   r   r      r   zQTestIsSubclassExceptions.test_mask_attribute_error_in_cls_arg.<locals>.C.getbasesNr   r   r   r   r   r      r   r   r<   r?   r   r   r   $test_mask_attribute_error_in_cls_arg   rA   z=TestIsSubclassExceptions.test_mask_attribute_error_in_cls_argN)r   r   r   r+   r0   r@   rB   r   r   r   r   r5   g   s
    

r5   c                   @   s,   e Zd Zdd Zdd ZeeZdd ZdS )AbstractClassc                 C   
   || _ d S r   bases)r   rF   r   r   r   __init__      
zAbstractClass.__init__c                 C      | j S r   rE   r   r   r   r   r      r#   zAbstractClass.getbasesc                 C   s   t | S r   )AbstractInstancer   r   r   r   __call__   s   zAbstractClass.__call__N)r   r   r   rG   r   r   r   rK   r   r   r   r   rC      s
    rC   c                   @   s$   e Zd Zdd Zdd ZeeZdS )rJ   c                 C   rD   r   klass)r   rM   r   r   r   rG      rH   zAbstractInstance.__init__c                 C   rI   r   rL   r   r   r   r   r	      r#   zAbstractInstance.getclassN)r   r   r   rG   r	   r   r   r   r   r   r   rJ      s    rJ   r   rE   c                   @   r(   )SuperNr)   r   r   r   r   rN          rN   c                   @   r(   )ChildNr)   r   r   r   r   rP      rO   rP   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestIsInstanceIsSubclassc                 C   s|   |  dtt t |  dtt t |  dtt t |  dtt t |  dtt t |  dtt t d S NTF)r   r   rN   rP   AbstractSuperAbstractChildr   r   r   r   test_isinstance_normal   s   z/TestIsInstanceIsSubclass.test_isinstance_normalc                 C   s   |  dtt t |  dtt t |  dtt t |  dtt t |  dtt t |  dtt t |  dtt t |  dtt t d S rR   )r   r   rS   rT   rN   rP   r   r   r   r   test_isinstance_abstract   s   z1TestIsInstanceIsSubclass.test_isinstance_abstractc                 C   s~  |  tt ttB  | td ttB  |  tdttB  |  tdttB  |  tg tjtjB  |  tdtjtB  | tdtjtjB  |  td td B  | tdttB  | 	t
 tdtt  W d    n1 sww   Y  | 	t
 tdtt tB  W d    n1 sw   Y  | 	t
 tdttB tt B tB  W d    d S 1 sw   Y  d S )N       gQ	@)
assertTruer   rN   intassertFalsestrtypingListTupler%   r/   listfloatr   r   r   r   test_isinstance_with_or_union   s$   "z6TestIsInstanceIsSubclass.test_isinstance_with_or_unionc                 C   s   |  dttt |  dttt |  dttt |  dttt |  dttt |  dttt | ttjtjtjB  | 	tt
tjtjB  d S rR   )r   r9   rN   rS   rP   rZ   r^   r_   r`   r\   r[   r   r   r   r   test_subclass_normal   s   z-TestIsInstanceIsSubclass.test_subclass_normalc                 C   s   |  dttt |  dttt |  dttt |  dttt |  dttt |  dttt |  dttt d S rR   )r   r9   rS   rT   rP   rN   r   r   r   r   test_subclass_abstract   s   z/TestIsInstanceIsSubclass.test_subclass_abstractc                 C   s   |  dtttf |  dtttf |  dtttf |  dttttf |  dttd |  dttttff |  dtttttff |  dtttttff d S )NTFr   )r   r9   rP   rN   r[   rb   r]   r   r   r   r   test_subclass_tuple   s   z,TestIsInstanceIsSubclass.test_subclass_tuplec                 C   s   |  ttttt d S r   )r%   RecursionError	blowstackr9   r]   r   r   r   r   test_subclass_recursion_limit
     z6TestIsInstanceIsSubclass.test_subclass_recursion_limitc                 C   s   |  tttdt d S )NrX   )r%   rg   rh   r   r]   r   r   r   r   test_isinstance_recursion_limit  rj   z8TestIsInstanceIsSubclass.test_isinstance_recursion_limitc                 C   s   |  ttttB tB  |  ttttB tB  | ttttB  | ttttB  | 	t
 tdttB  W d    n1 sCw   Y  | 	t
 tttt tB  W d    d S 1 sbw   Y  d S )NrY   )rZ   r9   r[   rb   r]   rP   r\   dictr   r%   r/   rN   ra   r   r   r   r   test_subclass_with_union  s   "z1TestIsInstanceIsSubclass.test_subclass_with_unionc                    s8   G dd d G  fddd}|  dt| t d S )Nc                   @      e Zd Zedd ZdS )zETestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.Ac                 S   s   t fS r   )r[   r   r   r   r   r   "     zOTestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.A.__bases__Nr   r   r   r   r   r   r   r   r   A!      rq   c                       s$   e Zd Zdd Ze fddZdS )zETestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.Bc                 S   s
   d| _ d S )N   )xr   r   r   r   rG   '  s   
zNTestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.B.__init__c                    s     fS r   r   r   rq   r   r   r   ,  s   zOTestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.B.__bases__N)r   r   r   rG   r   r   r   ru   r   r   r>   &  s    r>   T)r   r9   r[   )r   r>   r   ru   r   !test_issubclass_refcount_handling  s   
z:TestIsInstanceIsSubclass.test_issubclass_refcount_handlingc                 C   sH   G dd d}|  tt| t |  ttt|  |  ttd|  d S )Nc                   @   rn   )zDTestIsInstanceIsSubclass.test_infinite_recursion_in_bases.<locals>.Xc                 S   rI   r   )r   r   r   r   r   r   4  ro   zNTestIsInstanceIsSubclass.test_infinite_recursion_in_bases.<locals>.X.__bases__Nrp   r   r   r   r   X3  rr   rw   rs   )r%   rg   r9   r[   r   )r   rw   r   r   r    test_infinite_recursion_in_bases2  s   z9TestIsInstanceIsSubclass.test_infinite_recursion_in_basesN)r   r   r   rU   rV   rc   rd   re   rf   ri   rk   rm   rv   rx   r   r   r   r   rQ      s    

rQ   c                 C   s0   |f}t t d D ]
}|f}| || qd S )N   )rangesysgetrecursionlimit)fxnargZ
compare_toZ	tuple_argZcntr   r   r   rh   =  s
   rh   __main__)Zunittestr{   r^   ZTestCaser   r5   r   rC   rJ   rS   rT   rN   rP   rQ   rh   r   mainr   r   r   r   <module>   s"   \0
	 	