o
    HXh3                     @   s   d dl Z 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ree   dS 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                   @      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   >/opt/python-3.10.19/usr/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
   2      zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.I.getclassNr   r   r#   r   r	   r   1   s    r   c                   @   r   )zPTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.Cc                 S   r   r   r   r   r   r   r	   r   7   r   zYTestIsInstanceExceptions.test_bases_raises_other_than_attribute_error.<locals>.C.getbasesNr   r   r   r   r	   r   6   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   C   r   zOTestIsInstanceExceptions.test_dont_mask_non_attribute_error.<locals>.C.getbasesNr   r   r   r   r	   r   B   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   L   r+   r   c                   @   r   )z=TestIsInstanceExceptions.test_mask_attribute_error.<locals>.Cc                 S   r   r   AttributeErrorr   r   r   r	   r   O   r   zFTestIsInstanceExceptions.test_mask_attribute_error.<locals>.C.getbasesNr   r   r   r   r	   r   N   r   r   )r   r&   	TypeErrorr   r   r   r   r	   test_mask_attribute_errorK   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
   Y   r   zZTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.C.getclassNr   r   r   r   r	   r   X   r   r   c                   @   r)   )zQTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_error.<locals>.DNr*   r   r   r   r	   Da   r+   r2   )r   r&   r!   r   bool)r   r   cr2   r   r   r	   -test_isinstance_dont_mask_non_attribute_errorW   s
   zFTestIsInstanceExceptions.test_isinstance_dont_mask_non_attribute_errorN)r   r   r   r   r'   r,   r1   r5   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   k   r   zOTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.C.getbasesNr   r   r   r   r	   r   j   r   r   c                   @   r)   )zFTestIsSubclassExceptions.test_dont_mask_non_attribute_error.<locals>.SNr*   r   r   r   r	   So   r+   r8   r   r&   r!   
issubclassr   r   r8   r   r   r	   r,   i      z;TestIsSubclassExceptions.test_dont_mask_non_attribute_errorc                 C   r7   )Nc                   @   r   )z=TestIsSubclassExceptions.test_mask_attribute_error.<locals>.Cc                 S   r   r   r.   r   r   r   r	   r   u   r   zFTestIsSubclassExceptions.test_mask_attribute_error.<locals>.C.getbasesNr   r   r   r   r	   r   t   r   r   c                   @   r)   )z=TestIsSubclassExceptions.test_mask_attribute_error.<locals>.SNr*   r   r   r   r	   r8   y   r+   r8   r   r&   r0   r:   r;   r   r   r	   r1   s   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   r9   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   rB   z=TestIsSubclassExceptions.test_mask_attribute_error_in_cls_argN)r   r   r   r,   r1   rA   rC   r   r   r   r	   r6   h   s
    

r6   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   rG   r   r   r	   __init__      
zAbstractClass.__init__c                 C      | j S r   rF   r   r   r   r	   r      r$   zAbstractClass.getbasesc                 C   s   t | S r   )AbstractInstancer   r   r   r	   __call__      zAbstractClass.__call__N)r   r   r   rH   r   r   r   rL   r   r   r   r	   rD      s
    rD   c                   @   s$   e Zd Zdd Zdd ZeeZdS )rK   c                 C   rE   r   klass)r   rO   r   r   r	   rH      rI   zAbstractInstance.__init__c                 C   rJ   r   rN   r   r   r   r	   r
      r$   zAbstractInstance.getclassN)r   r   r   rH   r
   r   r   r   r   r   r	   rK      s    rK   r   rF   c                   @   r)   )SuperNr*   r   r   r   r	   rP          rP   c                   @   r)   )ChildNr*   r   r   r   r	   rR      rQ   rR   c                   @   s|   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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   rP   rR   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 rT   )r   r   rU   rV   rP   rR   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   rP   intassertFalsestrtypingListTupler&   r0   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 rT   )r   r:   rP   rU   rR   r\   r`   ra   rb   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 rT   )r   r:   rU   rV   rR   rP   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   r:   rR   rP   r]   rd   r_   r   r   r   r	   test_subclass_tuple   s   z,TestIsInstanceIsSubclass.test_subclass_tuplec                 C   s@   t   | ttttt W d    d S 1 sw   Y  d S r   )r   infinite_recursionr&   RecursionError	blowstackr:   r_   r   r   r   r	   test_subclass_recursion_limit     
"z6TestIsInstanceIsSubclass.test_subclass_recursion_limitc                 C   s@   t   | tttdt W d    d S 1 sw   Y  d S )NrZ   )r   ri   r&   rj   rk   r   r_   r   r   r   r	   test_isinstance_recursion_limit  rm   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 )Nr[   )r\   r:   r]   rd   r_   rR   r^   dictr   r&   r0   rP   rc   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$      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	   rH   *  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   rH   r   r   r   rx   r   r	   r?   )  s    r?   T)r   r:   r]   )r   r?   r   rx   r	   !test_issubclass_refcount_handling!  s   
z:TestIsInstanceIsSubclass.test_issubclass_refcount_handlingc                 C   sr   G dd d}t  $ | tt| t | ttt|  | ttd|  W d    d S 1 s2w   Y  d S )Nc                   @   rq   )zDTestIsInstanceIsSubclass.test_infinite_recursion_in_bases.<locals>.Xc                 S   rJ   r   )r   r   r   r   r	   r   7  rr   zNTestIsInstanceIsSubclass.test_infinite_recursion_in_bases.<locals>.X.__bases__Nrs   r   r   r   r	   X6  ru   rz   rv   )r   ri   r&   rj   r:   r]   r   r   rz   r   r   r	    test_infinite_recursion_in_bases5  s   
"z9TestIsInstanceIsSubclass.test_infinite_recursion_in_basesc              	   C   s   	 G dd dt }t , | t t| t W d    n1 s$w   Y  W d    d S W d    d S 1 s<w   Y  d S )Nc                   @   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__B  rM   z]TestIsInstanceIsSubclass.test_infinite_recursion_via_bases_tuple.<locals>.Failure.__getattr__Nr   r   r   r~   r   r   r   r	   FailureA  s    r   )r   r   ri   r&   rj   r:   r]   )r   r   r   r   r	   'test_infinite_recursion_via_bases_tuple?  s   
"z@TestIsInstanceIsSubclass.test_infinite_recursion_via_bases_tuplec                 C   sP   	 G dd d}t   | tt| t W d    d S 1 s!w   Y  d S )Nc                   @   rq   )z@TestIsInstanceIsSubclass.test_infinite_cycle_in_bases.<locals>.Xc                 S   s
   | | | fS r   r   r   r   r   r	   r   K  s   
zJTestIsInstanceIsSubclass.test_infinite_cycle_in_bases.<locals>.X.__bases__Nrs   r   r   r   r	   rz   J  ru   rz   r   ri   r&   rj   r:   r]   r{   r   r   r	   test_infinite_cycle_in_basesH  s
   
"z5TestIsInstanceIsSubclass.test_infinite_cycle_in_basesc                    sT   	 G  fddd t   | tt  t W d    d S 1 s#w   Y  d S )Nc                       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                   @   r)   )zUTestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.X.__getattr__.<locals>.ANr*   r   r   r   r	   rt   V  rQ   rt   c                   @   r)   )zUTestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.X.__getattr__.<locals>.BNr*   r   r   r   r	   r?   X  rQ   r?   )r   r~   )r   r}   rt   r?   rz   r   r	   r~   T  s
   zJTestIsInstanceIsSubclass.test_infinitely_many_bases.<locals>.X.__getattr__Nr   r   r   r   r	   rz   S  s    rz   r   r   r   r   r	   test_infinitely_many_basesQ  s
   
	"z3TestIsInstanceIsSubclass.test_infinitely_many_basesN)r   r   r   rW   rX   re   rf   rg   rh   rl   rn   rp   ry   r|   r   r   r   r   r   r   r	   rS      s    


		rS   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	   rk   `  s
   rk   __main__)Zunittestr   r`   testr   ZTestCaser   r6   r   rD   rK   rU   rV   rP   rR   rS   rk   r   mainr   r   r   r	   <module>   s$   \0
	 *	