a
    zeA.                     @   s   d dl Z d dlZd dlm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re   dS )    N)supportc                   @   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                   @   s   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   */usr/lib/python3.9/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                   @   s   e Zd Zdd ZeeZdS )z;TestIsInstanceExceptions.test_class_has_no_bases.<locals>.Cc                 S   s   dS Nr   r   r   r   r   r   getbases"   s    zDTestIsInstanceExceptions.test_class_has_no_bases.<locals>.C.getbasesNr   r   r   r   r   	__bases__r   r   r   r   C!   s   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                   @   s   e Zd Zdd ZeeZdS )zPTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.Ec                 S   s   t d S r   RuntimeErrorr   r   r   r   r   ,   s    zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.E.getbasesNr   r   r   r   r   E+   s   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   s    zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.I.getclassNr
   r   r   r   r   r   0   s   r   c                   @   s   e Zd Zdd ZeeZdS )zPTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.Cc                 S   s   dS r   r   r   r   r   r   r   6   s    zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   5   s   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   s6   G dd d}G dd dt }| tt| |  d S )Nc                   @   s   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                   @   s   e Zd Zdd ZeeZdS )zFTestIsInstanceExceptions.test_dont_mask_non_attribute_error.<locals>.Cc                 S   s   t d S r   r   r   r   r   r   r   B   s    zOTestIsInstanceExceptions.test_dont_mask_non_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   A   s   r   r   r   r   r   r   "test_dont_mask_non_attribute_error>   s    z;TestIsInstanceExceptions.test_dont_mask_non_attribute_errorc                 C   s6   G dd d}G dd dt }| tt| |  d S )Nc                   @   s   e Zd ZdS )z=TestIsInstanceExceptions.test_mask_attribute_error.<locals>.INr"   r   r   r   r   r   K   r#   r   c                   @   s   e Zd Zdd ZeeZdS )z=TestIsInstanceExceptions.test_mask_attribute_error.<locals>.Cc                 S   s   t d S r   AttributeErrorr   r   r   r   r   N   s    zFTestIsInstanceExceptions.test_mask_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   M   s   r   )r   r    	TypeErrorr   r   r   r   r   test_mask_attribute_errorJ   s    z2TestIsInstanceExceptions.test_mask_attribute_errorc                 C   sH   G dd dt }| }| tt|t G dd d}| tt|| d S )Nc                   @   s   e Zd Zdd ZeeZdS )zQTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.Cc                 S   s   t d S r   r   r   r   r   r   r	   X   s    zZTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.C.getclassNr
   r   r   r   r   r   W   s   r   c                   @   s   e Zd ZdS )zQTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.DNr"   r   r   r   r   D`   r#   r)   )r   r    r   r   bool)r   r   cr)   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$   r(   r,   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   s8   G dd dt }G dd d|}| tt| |  d S )Nc                   @   s   e Zd Zdd ZeeZdS )zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.Cc                 S   s   t d S r   r   r   r   r   r   r   j   s    zOTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   i   s   r   c                   @   s   e Zd ZdS )zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.SNr"   r   r   r   r   Sn   r#   r.   r   r    r   
issubclassr   r   r.   r   r   r   r$   h   s    z;TestIsSubclassExceptions.test_dont_mask_non_attribute_errorc                 C   s8   G dd dt }G dd d|}| tt| |  d S )Nc                   @   s   e Zd Zdd ZeeZdS )z=TestIsSubclassExceptions.test_mask_attribute_error.<locals>.Cc                 S   s   t d S r   r%   r   r   r   r   r   t   s    zFTestIsSubclassExceptions.test_mask_attribute_error.<locals>.C.getbasesNr   r   r   r   r   r   s   s   r   c                   @   s   e Zd ZdS )z=TestIsSubclassExceptions.test_mask_attribute_error.<locals>.SNr"   r   r   r   r   r.   x   r#   r.   r   r    r'   r0   r1   r   r   r   r(   r   s    z2TestIsSubclassExceptions.test_mask_attribute_errorc                 C   s4   G dd d}G dd dt }| tt||  d S )Nc                   @   s   e Zd ZdS )zQTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_arg.<locals>.BNr"   r   r   r   r   B   r#   r3   c                   @   s   e Zd Zdd ZeeZdS )zQTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_arg.<locals>.Cc                 S   s   t d S r   r   r   r   r   r   r      s    zZTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_arg.<locals>.C.getbasesNr   r   r   r   r   r      s   r   r/   r   r3   r   r   r   r   -test_dont_mask_non_attribute_error_in_cls_arg   s    zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error_in_cls_argc                 C   s4   G dd d}G dd dt }| tt||  d S )Nc                   @   s   e Zd ZdS )zHTestIsSubclassExceptions.test_mask_attribute_error_in_cls_arg.<locals>.BNr"   r   r   r   r   r3      r#   r3   c                   @   s   e Zd Zdd ZeeZdS )zHTestIsSubclassExceptions.test_mask_attribute_error_in_cls_arg.<locals>.Cc                 S   s   t d S r   r%   r   r   r   r   r      s    zQTestIsSubclassExceptions.test_mask_attribute_error_in_cls_arg.<locals>.C.getbasesNr   r   r   r   r   r      s   r   r2   r4   r   r   r   $test_mask_attribute_error_in_cls_arg   s    z=TestIsSubclassExceptions.test_mask_attribute_error_in_cls_argN)r   r   r   r$   r(   r5   r6   r   r   r   r   r-   g   s   

r-   c                   @   s,   e Zd Zdd Zdd ZeeZdd ZdS )AbstractClassc                 C   s
   || _ d S r   bases)r   r9   r   r   r   __init__   s    zAbstractClass.__init__c                 C   s   | j S r   r8   r   r   r   r   r      s    zAbstractClass.getbasesc                 C   s   t | S r   )AbstractInstancer   r   r   r   __call__   s    zAbstractClass.__call__N)r   r   r   r:   r   r   r   r<   r   r   r   r   r7      s   r7   c                   @   s$   e Zd Zdd Zdd ZeeZdS )r;   c                 C   s
   || _ d S r   klass)r   r>   r   r   r   r:      s    zAbstractInstance.__init__c                 C   s   | j S r   r=   r   r   r   r   r	      s    zAbstractInstance.getclassN)r   r   r   r:   r	   r   r   r   r   r   r   r;      s   r;   r   r8   c                   @   s   e Zd ZdS )SuperNr"   r   r   r   r   r?      s   r?   c                   @   s   e Zd ZdS )ChildNr"   r   r   r   r   r@      s   r@   c                   @   sl   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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   r?   r@   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 rB   )r   r   rC   rD   r?   r@   r   r   r   r   test_isinstance_abstract   s    z1TestIsInstanceIsSubclass.test_isinstance_abstractc                 C   sp   |  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 rB   )r   r0   r?   rC   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 rB   )r   r0   rC   rD   r@   r?   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   r0   r@   r?   intfloatstrr   r   r   r   test_subclass_tuple   s    z,TestIsInstanceIsSubclass.test_subclass_tuplec                 C   s>   t  " | ttttt W d    n1 s00    Y  d S r   )r   infinite_recursionr    RecursionError	blowstackr0   rK   r   r   r   r   test_subclass_recursion_limit   s    
z6TestIsInstanceIsSubclass.test_subclass_recursion_limitc                 C   s>   t  " | tttdt W d    n1 s00    Y  d S )N )r   rM   r    rN   rO   r   rK   r   r   r   r   test_isinstance_recursion_limit   s    
z8TestIsInstanceIsSubclass.test_isinstance_recursion_limitc                    s8   G dd d G  fddd}|  dt| t d S )Nc                   @   s   e Zd Zedd ZdS )zETestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.Ac                 S   s   t fS r   )rI   r   r   r   r   r     s    zOTestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.A.__bases__Nr   r   r   r   r   r   r   r   r   A  s   rT   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   r:   
  s    zNTestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.B.__init__c                    s     fS r   r   r   rT   r   r   r     s    zOTestIsInstanceIsSubclass.test_issubclass_refcount_handling.<locals>.B.__bases__N)r   r   r   r:   r   r   r   rW   r   r   r3   	  s   r3   T)r   r0   rI   )r   r3   r   rW   r   !test_issubclass_refcount_handling  s    
z:TestIsInstanceIsSubclass.test_issubclass_refcount_handlingc                 C   sp   G dd d}t  F | tt| t | ttt|  | ttd|  W d    n1 sb0    Y  d S )Nc                   @   s   e Zd Zedd ZdS )zDTestIsInstanceIsSubclass.test_infinite_recursion_in_bases.<locals>.Xc                 S   s   | j S r   )r   r   r   r   r   r     s    zNTestIsInstanceIsSubclass.test_infinite_recursion_in_bases.<locals>.X.__bases__NrS   r   r   r   r   X  s   rY   rU   )r   rM   r    rN   r0   rI   r   r   rY   r   r   r    test_infinite_recursion_in_bases  s
    
z9TestIsInstanceIsSubclass.test_infinite_recursion_in_basesc              	   C   sr   G dd dt }t F | t t| t W d   n1 sF0    Y  W d   n1 sd0    Y  dS )Regression test for bpo-30570.c                   @   s   e Zd Zdd ZdS )zQTestIsInstanceIsSubclass.test_infinite_recursion_via_bases_tuple.<locals>.Failurec                 S   s   | d fS r   r   )r   attrr   r   r   __getattr__"  s    z]TestIsInstanceIsSubclass.test_infinite_recursion_via_bases_tuple.<locals>.Failure.__getattr__Nr   r   r   r^   r   r   r   r   Failure!  s   r`   N)r   r   rM   r    rN   r0   rI   )r   r`   r   r   r   'test_infinite_recursion_via_bases_tuple  s    
z@TestIsInstanceIsSubclass.test_infinite_recursion_via_bases_tuplec                 C   sL   G dd d}t  " | tt| t W d   n1 s>0    Y  dS )r\   c                   @   s   e Zd Zedd ZdS )z@TestIsInstanceIsSubclass.test_infinite_cycle_in_bases.<locals>.Xc                 S   s
   | | | fS r   r   r   r   r   r   r   +  s    zJTestIsInstanceIsSubclass.test_infinite_cycle_in_bases.<locals>.X.__bases__NrS   r   r   r   r   rY   *  s   rY   Nr   rM   r    rN   r0   rI   rZ   r   r   r   test_infinite_cycle_in_bases(  s    
z5TestIsInstanceIsSubclass.test_infinite_cycle_in_basesc                    sP   G  fddd t  " | tt  t W d   n1 sB0    Y  dS )r\   c                       s   e Zd Z fddZdS )z>TestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.Xc                    sB   |  |d G dd d}G dd d} j |_|_| | fS )Nr   c                   @   s   e Zd ZdS )zUTestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.X.__getattr__.<locals>.ANr"   r   r   r   r   rT   6  s   rT   c                   @   s   e Zd ZdS )zUTestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.X.__getattr__.<locals>.BNr"   r   r   r   r   r3   8  s   r3   )r   r^   )r   r]   rT   r3   rY   r   r   r^   4  s
    zJTestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.X.__getattr__Nr_   r   rd   r   r   rY   3  s   rY   Nrb   r   r   rd   r   test_infinitely_many_bases1  s    	
z3TestIsInstanceIsSubclass.test_infinitely_many_basesN)r   r   r   rE   rF   rG   rH   rL   rP   rR   rX   r[   ra   rc   re   r   r   r   r   rA      s   


		rA   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   rO   @  s    rO   __main__)Zunittestrh   testr   ZTestCaser   r-   r   r7   r;   rC   rD   r?   r@   rA   rO   r   mainr   r   r   r   <module>   s   \0	
 	