o
    i?                     @   sP  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	Z
d dlmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dlm Z  d d	l!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z( d dl%m)Z) G dd de*Z+G dd de*Z,dd Z-G dd de'e&Z.G dd de&e'Z/e0dkre1  dS dS )    N)OrderedDict)	booleandeferred_typefloat32float64int16int32njitoptionaltypeof)errorstypes)
Dispatcher)LoweringErrorTypingError)MemInfo)jitclass)_box)JitClassType)MemoryLeakMixinTestCaseskip_if_typeguard)skip_unless_scipyc                   @      e Zd ZdddddZdS )
TestClass1      ac                C   s   || _ || _|| _|| _d S N)xyzr   )selfr    r!   r"   r    r$   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_jitclasses.py__init__   s   
zTestClass1.__init__Nr   __name__
__module____qualname__r&   r$   r$   r$   r%   r          r   c                   @   r   )
TestClass2r   r   r   c                G   s"   || _ || _|| _|| _|| _d S r   )r    r!   r"   argsr   )r#   r    r!   r"   r   r.   r$   r$   r%   r&   !   s
   
zTestClass2.__init__Nr'   r(   r$   r$   r$   r%   r-       r,   r-   c                 C   s   t | }t|}|  |S r   )r   Zbox_get_meminfoptrr   acquire)boxptrmir$   r$   r%   _get_meminfo)   s   
r3   c                   @   sz  e Zd Zd\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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d0d1 Zd2d3 Zed4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0dS )]TestJitClassNc           
      C   s   |d u rt |G dd dt}|}|jj}t|j }t|j }|d u r4t|t	r2|
 }n|}|d us:J | t|t| tt|||D ]\}}	| |d |	d  | |d |	d  qLd S )Nc                   @      e Zd Zdd ZdS )z&TestJitClass._check_spec.<locals>.Testc                 S      d S r   r$   r#   r$   r$   r%   r&   7      z/TestJitClass._check_spec.<locals>.Test.__init__Nr(   r$   r$   r$   r%   Test4       r9   r   r   )r   object
class_typeinstance_typeliststructkeysvalues
isinstancer   itemsassertEquallenzip)
r#   spectest_clsall_expectedr9   ZclstynamesrA   gotexpectedr$   r$   r%   _check_spec2   s"   

zTestJitClass._check_specc                 C   s$   t  }t|d< t|d< | | d S Nr    r!   )r   r   r   rM   r#   rG   r$   r$   r%   test_ordereddict_specL   s   z"TestJitClass.test_ordereddict_specc                 C   s   dt fdtfg}| | d S rN   )r   r   rM   rO   r$   r$   r%   test_list_specR   s   zTestJitClass.test_list_specc              	   C   sD   dt fg}t|G dd dt}| |||dttfg  d S )Nr    c                   @   s,   e Zd ZU eed< eje ed< dd ZdS )z1TestJitClass.test_type_annotations.<locals>.Test1r    r!   c                 S   r6   r   r$   r7   r$   r$   r%   r&   _   r8   z:TestJitClass.test_type_annotations.<locals>.Test1.__init__N)	r)   r*   r+   int__annotations__ptListfloatr&   r$   r$   r$   r%   Test1Z   s   
 rW   r!   )r   r   r;   rM   r   ZListTyper   )r#   rG   rW   r$   r$   r%   test_type_annotationsW   s   
"z"TestJitClass.test_type_annotationsc                 C   sH   G dd d}t G dd d|}| j|dtdfdtdfgd	 d S )
Nc                   @   s   e Zd ZU eed< dS )z:TestJitClass.test_type_annotation_inheritance.<locals>.Foor    N)r)   r*   r+   rR   rS   r$   r$   r$   r%   Foof   s   
 rY   c                   @   s(   e Zd ZU eed< deddfddZdS )z:TestJitClass.test_type_annotation_inheritance.<locals>.Barr!   valuereturnNc                 S   s   t || _|| _d S r   )rR   r    r!   r#   rZ   r$   r$   r%   r&   m      

zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r)   r*   r+   rV   rS   r&   r$   r$   r$   r%   Bari   s   
 r_   r    r   r!           )rH   rI   )r   rM   r   )r#   rY   r_   r$   r$   r%    test_type_annotation_inheritanced   s   
z-TestJitClass.test_type_annotation_inheritancec                 C   s   dt fdtd d  fg}dtfdtd d  fg}G dd dt}| t}t|| W d    n1 s5w   Y  | dt|j	 | t}t|| W d    n1 sXw   Y  | 
t|j	d d S )Nr    r!   r   c                   @   r5   )z+TestJitClass.test_spec_errors.<locals>.Testc                 S   r6   r   r$   r7   r$   r$   r%   r&   {   r8   z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r9   y       r9   z*spec values should be Numba type instancesz"spec keys should be strings, got 1)rR   r   r   r;   assertRaises	TypeErrorr   assertInstr	exceptionrD   )r#   Zspec1Zspec2r9   raisesr$   r$   r%   test_spec_errorsu   s   zTestJitClass.test_spec_errorsc                 C   s^   t g G dd d}| tj}|  W d    n1 sw   Y  | dt|j d S )Nc                   @   r5   )z+TestJitClass.test_init_errors.<locals>.Testc                 S      dS N   r$   r7   r$   r$   r%   r&      r8   z4TestJitClass.test_init_errors.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r9      rb   r9   z"__init__() should return None, not)r   rc   r   r   re   rf   rg   )r#   r9   rh   r$   r$   r%   test_init_errors   s   zTestJitClass.test_init_errorsc                 C   sB   t  }t|d< t|d< td d  |d< t|G dd dt}|S )Nr    r!   arrc                   @      e Zd Zdd Zdd ZdS )z9TestJitClass._make_Float2AndArray.<locals>.Float2AndArrayc                 S      || _ || _|| _d S r   r    r!   rn   )r#   r    r!   rn   r$   r$   r%   r&         
zBTestJitClass._make_Float2AndArray.<locals>.Float2AndArray.__init__c                 S   s    |  j |7  _ |  j|7  _|S r   r    r!   r#   valr$   r$   r%   add   s   z=TestJitClass._make_Float2AndArray.<locals>.Float2AndArray.addN)r)   r*   r+   r&   rv   r$   r$   r$   r%   Float2AndArray   s    rw   )r   r   r   r;   )r#   rG   rw   r$   r$   r%   _make_Float2AndArray   s   z!TestJitClass._make_Float2AndArrayc                 C   s2   t  }t|d< t|d< t|G dd dt}|S )Nr    r!   c                   @   r5   )z+TestJitClass._make_Vector2.<locals>.Vector2c                 S      || _ || _d S r   rs   )r#   r    r!   r$   r$   r%   r&         
z4TestJitClass._make_Vector2.<locals>.Vector2.__init__Nr(   r$   r$   r$   r%   Vector2   r:   r{   )r   r   r   r;   )r#   rG   r{   r$   r$   r%   _make_Vector2   s   zTestJitClass._make_Vector2c                    sv   |    |  tdd t fdd}tjdtjd}||\}}}| |d | |d | || d S )	Nc                 S   s   | j | j S r   rs   objr$   r$   r%   bar      z*TestJitClass.test_jit_class_1.<locals>.barc                    s4    dd| }| d dd}|||jfS )Nr      {         )rv   rn   )r   r~   vecrw   r{   r   r$   r%   foo   s   

z*TestJitClass.test_jit_class_1.<locals>.foo
   Zdtype   rl   )rx   r|   r	   npZonesr   rD   assertPreciseEqual)r#   r   inpr   bcr$   r   r%   test_jit_class_1   s   
zTestJitClass.test_jit_class_1c                 C   s  |   }tdd }tdd }tjdtjd}|dd|}t|}| |jd | |jt	
| | |jj|j ||}t|}| |jd	 | |jd	 | |jt	
| | |j|j ~~| |jd ||\}	}
}| |	d | |
d | || | |jd | |jd | |j| | |d
d
 | |jd | |jd d|_d|_tjdtjd |_}| |jd | |jd | |j| d S )Nc                 S      | S r   r$   r}   r$   r$   r%   identity      z>TestJitClass.test_jitclass_usage_from_python.<locals>.identityc                 S   s   | j | j| jfS r   rq   r}   r$   r$   r%   retrieve_attributes   s   zITestJitClass.test_jitclass_usage_from_python.<locals>.retrieve_attributesr   r   r   r   r   r   |   }   iM  i  r   )rx   r	   r   aranger   r3   rD   refcountdatar   box_get_dataptrZ_numba_type_r<   assertIsr    r!   rn   rv   )r#   rw   r   r   rn   r~   Zobj_meminfootherZother_meminfoZout_xZout_yZout_arrZnewarrr$   r$   r%   test_jitclass_usage_from_python   sJ   


z,TestJitClass.test_jitclass_usage_from_pythonc                 C   sJ   t  }t|d< t|G dd dt}| |dj | |dj d S )Nru   c                   @   r5   )z2TestJitClass.test_jitclass_datalayout.<locals>.Fooc                 S   
   || _ d S r   ru   rt   r$   r$   r%   r&        
z;TestJitClass.test_jitclass_datalayout.<locals>.Foo.__init__Nr(   r$   r$   r$   r%   rY     r:   rY   TF)r   r   r   r;   
assertTrueru   assertFalse)r#   rG   rY   r$   r$   r%   test_jitclass_datalayout  s   z%TestJitClass.test_jitclass_datalayoutc           	         s  t  }t }t|d< t||d< tdd  t|G  fdddt}||jj	 |dd }| 
|jd | |j |d|}t|}t|}| 
|jd	 | 
|jj|j | 
|jd	 | 
|jd
 | }| 
||j | |j ||dd  | |j | 
|jjd | |jj ||dd  | |jj | 
|jjjd | 
|jd	 ~~| 
|jd
 d S )Nr   nextc                 S      | j S r   r   )noder$   r$   r%   get_data     z1TestJitClass.test_deferred_type.<locals>.get_datac                       s(   e Zd Zdd Z fddZdd ZdS )z3TestJitClass.test_deferred_type.<locals>.LinkedNodec                 S   ry   r   )r   r   )r#   r   r   r$   r$   r%   r&     rz   z<TestJitClass.test_deferred_type.<locals>.LinkedNode.__init__c                    s
    | j S r   r   r7   r   r$   r%   get_next_data#     
zATestJitClass.test_deferred_type.<locals>.LinkedNode.get_next_datac                 S   s(   | }|j d ur|j }|j d us||_ d S r   r   )r#   r   curr$   r$   r%   append_to_tail'  s
   


zBTestJitClass.test_deferred_type.<locals>.LinkedNode.append_to_tailN)r)   r*   r+   r&   r   r   r$   r   r$   r%   
LinkedNode  s    r   r   A  r   r   7  i  )r   r   r   r
   r	   r   r;   Zdefiner<   r=   rD   r   ZassertIsNoner   r3   r   r   r   ZassertIsNotNone)	r#   Z	node_typerG   r   firstsecondZfirst_meminfoZsecond_meminfoZ	first_valr$   r   r%   test_deferred_type  s@   


zTestJitClass.test_deferred_typec                 C   s   t  }t|d< t|d< t|d< t|G dd dt}|ddd}G d	d
 d
tj}tt	
|}t|t|d }| |j|j | |j|j | |j|j d S )Nr   r   r   c                   @   r5   )z-TestJitClass.test_c_structure.<locals>.Structc                 S   rp   r   )r   r   r   )r#   r   r   r   r$   r$   r%   r&   X  rr   z6TestJitClass.test_c_structure.<locals>.Struct.__init__Nr(   r$   r$   r$   r%   StructU  r:   r   iͫ     o!	@c                   @   s(   e Zd ZdejfdejfdejfgZdS )z.TestJitClass.test_c_structure.<locals>.CStructr   r   r   N)r)   r*   r+   ctypesZc_int32Zc_int16Zc_doubleZ_fields_r$   r$   r$   r%   CStruct_  s
    r   r   )r   r   r   r   r   r;   r   Z	StructureZc_void_pr   r   castZPOINTERrD   r   r   r   )r#   rG   r   str   r1   Zcstructr$   r$   r%   test_c_structureO  s   zTestJitClass.test_c_structurec                 C   sh   |   }|dd}tdd }| t}||| W d    n1 s$w   Y  | dt|j d S )Nr   r   c                 S   s   | |u S r   r$   r   r   r$   r$   r%   do_isp     z#TestJitClass.test_is.<locals>.do_iszno default `is` implementation)r|   r	   rc   r   re   rf   rg   )r#   ZVectorZvec_ar   rh   r$   r$   r%   test_isl  s   

zTestJitClass.test_isc                 C   s"   |   }|dd}| || d S Nr   r   )r|   assertIsInstance)r#   r{   r   r$   r$   r%   test_isinstancey  s   
zTestJitClass.test_isinstancec                 C   sX   |   }| t}G dd d|}W d    n1 sw   Y  | t|jd d S )Nc                   @   s   e Zd ZdS )z+TestJitClass.test_subclassing.<locals>.SubVN)r)   r*   r+   r$   r$   r$   r%   SubV  s    r   zcannot subclass from a jitclass)r|   rc   rd   rD   rf   rg   )r#   r{   rh   r   r$   r$   r%   test_subclassing~  s   zTestJitClass.test_subclassingc                 C   sJ   G dd dt }tdtfgG dd d|}|d}| | d d S )Nc                   @   r5   )z*TestJitClass.test_base_class.<locals>.Basec                 S   r   r   attrr7   r$   r$   r%   what     z/TestJitClass.test_base_class.<locals>.Base.whatN)r)   r*   r+   r   r$   r$   r$   r%   Base  rb   r   r   c                   @   r5   )z*TestJitClass.test_base_class.<locals>.Testc                 S   r   r   r   r#   r   r$   r$   r%   r&     r   z3TestJitClass.test_base_class.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r9     r:   r9   r   )r;   r   r   rD   r   )r#   r   r9   r~   r$   r$   r%   test_base_class  s
   zTestJitClass.test_base_classc                 C   X   G dd dt }| t}t| W d    n1 sw   Y  | t|jd d S )Nc                   @   s   e Zd ZdZdd ZdS )z'TestJitClass.test_globals.<locals>.Miner   c                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   z0TestJitClass.test_globals.<locals>.Mine.__init__N)r)   r*   r+   Zconstantr&   r$   r$   r$   r%   Mine  s    r   z-class members are not yet supported: constantr;   rc   rd   r   rD   rf   rg   )r#   r   rh   r$   r$   r%   test_globals  s   
zTestJitClass.test_globalsc                 C   s   t dtfgG dd dt}|d}| |jd | |jd d|_| |jd | |jd tdd	 }||d
\}}}| |d | |d
 | |d d S )Nr   c                   @   .   e Zd Zdd Zedd Zejdd ZdS )z1TestJitClass.test_user_getter_setter.<locals>.Fooc                 S   r   r   r   r   r$   r$   r%   r&     r   z:TestJitClass.test_user_getter_setter.<locals>.Foo.__init__c                 S   
   | j d S Nr   r   r7   r$   r$   r%   rZ     r   z7TestJitClass.test_user_getter_setter.<locals>.Foo.valuec                 S      |d | _ d S r   r   rt   r$   r$   r%   rZ        N)r)   r*   r+   r&   propertyrZ   setterr$   r$   r$   r%   rY     s    
rY   r   r   i  i  c                 S   s"   | j }|| _ | j }| j}|||fS r   )rZ   r   )r   ru   r   r   r   r$   r$   r%   r     s
   
z1TestJitClass.test_user_getter_setter.<locals>.barr   i6  )r   r   r;   rD   r   rZ   r	   )r#   rY   r   r   r   r   r   r$   r$   r%   test_user_getter_setter  s   
z$TestJitClass.test_user_getter_setterc                 C   r   )Nc                   @   r   )z1TestJitClass.test_user_deleter_error.<locals>.Fooc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   z:TestJitClass.test_user_deleter_error.<locals>.Foo.__init__c                 S   rj   r   r$   r7   r$   r$   r%   rZ     r   z7TestJitClass.test_user_deleter_error.<locals>.Foo.valuec                 S   r6   r   r$   r7   r$   r$   r%   rZ     r   N)r)   r*   r+   r&   r   rZ   deleterr$   r$   r$   r%   rY     s    
rY   zdeleter is not supported: valuer   r#   rY   rh   r$   r$   r%   test_user_deleter_error  s   
z$TestJitClass.test_user_deleter_errorc                 C   s   G dd dt }| t}t|dtfg W d    n1 s w   Y  | t|jd | t}t|dtfg W d    n1 sFw   Y  | t|jd d S )Nc                   @   s(   e Zd Zdd Zedd Zdd ZdS )z3TestJitClass.test_name_shadowing_error.<locals>.Fooc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   z<TestJitClass.test_name_shadowing_error.<locals>.Foo.__init__c                 S   r6   r   r$   r7   r$   r$   r%   my_property  r   z?TestJitClass.test_name_shadowing_error.<locals>.Foo.my_propertyc                 S   r6   r   r$   r7   r$   r$   r%   	my_method  r8   z=TestJitClass.test_name_shadowing_error.<locals>.Foo.my_methodN)r)   r*   r+   r&   r   r   r   r$   r$   r$   r%   rY     s
    
rY   r   zname shadowing: my_propertyr   zname shadowing: my_method)r;   rc   	NameErrorr   r   rD   rf   rg   r   r$   r$   r%   test_name_shadowing_error  s   z&TestJitClass.test_name_shadowing_errorc                 C   s   t dtfgG dd dt}|}t dtfgG dd dt}|}|d}| |jd | | d |d}| |jd | | d	 d S )
Nr    c                   @   ro   )/TestJitClass.test_distinct_classes.<locals>.Fooc                 S   s   |d | _ d S Nr   r    r#   r    r$   r$   r%   r&        8TestJitClass.test_distinct_classes.<locals>.Foo.__init__c                 S   r   r   r   r7   r$   r$   r%   run  r   3TestJitClass.test_distinct_classes.<locals>.Foo.runNr)   r*   r+   r&   r   r$   r$   r$   r%   rY         rY   c                   @   ro   )r   c                 S   r   r   r   r   r$   r$   r%   r&     r   r   c                 S   s
   | j d S r   r   r7   r$   r$   r%   r     r   r   Nr   r$   r$   r$   r%   rY     r   r   rl      r   r   )r   r   r;   rD   r    r   )r#   rY   ZFirstFooZ	SecondFoor   r$   r$   r%   test_distinct_classes  s   z"TestJitClass.test_distinct_classesc                    s   G dd dt   fdd}|d}| |jd |d}| |jd |tdg}tj|jdg |tdg}tj|jdg d S )Nc                   @   r5   )z0TestJitClass.test_parameterized.<locals>.MyClassc                 S   r   r   rZ   r\   r$   r$   r%   r&     r   z9TestJitClass.test_parameterized.<locals>.MyClass.__init__Nr(   r$   r$   r$   r%   MyClass  rb   r   c                    s   t  dt| fg}|| S )NrZ   )r   r   )rZ   clsr   r$   r%   create_my_class  s   z8TestJitClass.test_parameterized.<locals>.create_my_classr   g(@)r;   rD   rZ   r   arraytestingZassert_equal)r#   r   r   r   r   dr$   r   r%   test_parameterized  s   zTestJitClass.test_parameterizedc                 C   s  t tt t d}t|G dd dt}d}||}| |j| | |j|d  | |j|d  | |j|j |j}| jd8  _| |j|d  | |	d|d  | |	|d d | |
d|jd  | |d|jd  | |j|d  | jd	8  _| |j|d
  tdd }| tj}|| W d    n1 sw   Y  | dt|j | t}|| W d    n1 sw   Y  | dt|j d S )N)rZ   _valueZ__value	__value__c                   @   st   e Zd Zdd Zedd Zedd Zejdd Zedd	 Zejd
d	 Zdd Z	dd Z
dd Zdd ZdS )z2TestJitClass.test_protected_attrs.<locals>.MyClassc                 S   s(   || _ |d | _|d | _|d | _d S )Nr   r   )rZ   r   _MyClass__valuer   r\   r$   r$   r%   r&   0  s   

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   r   r   r   r7   r$   r$   r%   private_value6  r   z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   r   r   r   r7   r$   r$   r%   _inner_value:  r   z?TestJitClass.test_protected_attrs.<locals>.MyClass._inner_valuec                 S   r   r   r   r#   vr$   r$   r%   r   >  r   c                 S   r   r   r   r7   r$   r$   r%   __private_valueB  r   zBTestJitClass.test_protected_attrs.<locals>.MyClass.__private_valuec                 S   r   r   r   r   r$   r$   r%   r   F  r   c                 S   s   | j }|| _ |S r   )_MyClass__private_value)r#   newoldr$   r$   r%   swap_private_valueJ  s   zETestJitClass.test_protected_attrs.<locals>.MyClass.swap_private_valuec                 S   
   | j | S r   r   r#   factorr$   r$   r%   _protected_methodO  r   zDTestJitClass.test_protected_attrs.<locals>.MyClass._protected_methodc                 S   r  r   r   r  r$   r$   r%   Z__private_methodR  r   zCTestJitClass.test_protected_attrs.<locals>.MyClass.__private_methodc                 S   s
   |  |S r   )_MyClass__private_methodr  r$   r$   r%   check_private_methodU  r   zGTestJitClass.test_protected_attrs.<locals>.MyClass.check_private_methodN)r)   r*   r+   r&   r   r   r   r   r   r  r  r  r	  r$   r$   r$   r%   r   -  s     




r   r   r   r   r   r   d   e   c                 S   r   r   )_TestJitClass__value)instr$   r$   r%   access_dundero  r   z8TestJitClass.test_protected_attrs.<locals>.access_dunderr  )r   r   r   r;   rD   rZ   r   r   r   r  r  r	  r   r	   rc   r   r   re   rf   rg   AttributeErrorpy_func)r#   rG   r   rZ   r  Zfreeze_inst_valuer  rh   r$   r$   r%   test_protected_attrs%  sB   *

z!TestJitClass.test_protected_attrsc                 C   sJ   ddl m} dti}t||}|d}| |jd | |dd dS )zM
        Methods with annotations should compile fine (issue #1911).
        r   )AnnotatedClassr    r   r   rl   N)Zannotation_usecasesr  r   r   rD   r    rv   )r#   r  rG   r   r~   r$   r$   r%   test_annotations}  s   
zTestJitClass.test_annotationsc                 C   sV   t G dd dt}| |jd | |jjd | |jjd | |jjd d S )Nc                   @   s,   e Zd ZdZdd Zdd Zedd ZdS )	z*TestJitClass.test_docstring.<locals>.AppleClass docstringc                 S   rj   )init docstringNr$   r7   r$   r$   r%   r&         z3TestJitClass.test_docstring.<locals>.Apple.__init__c                 S   rj   )foo method docstringNr$   r7   r$   r$   r%   r     r  z.TestJitClass.test_docstring.<locals>.Apple.fooc                 S   rj   )aval property docstringNr$   r7   r$   r$   r%   aval  r  z/TestJitClass.test_docstring.<locals>.Apple.avalN)r)   r*   r+   __doc__r&   r   r   r  r$   r$   r$   r%   Apple  s    r  r  r  r  r  )r   r;   rD   r  r&   r   r  )r#   r  r$   r$   r%   test_docstring  s   zTestJitClass.test_docstringc                 C   st   dt fdtfg}t|G dd dt}d}d}d}||d}|d	ddi|}| |j||  | |j| d S )
Nr   r   c                   @   r5   )z+TestJitClass.test_kwargs.<locals>.TestClassc                 S   s   || | _ || _d S r   r   r#   r    r!   r"   r$   r$   r%   r&     r]   z4TestJitClass.test_kwargs.<locals>.TestClass.__init__Nr(   r$   r$   r$   r%   	TestClass  rb   r  r   g?)r!   r"   r    r$   )r   r   r   r;   rD   r   r   )r#   rG   r  r    r!   r"   kwargstcr$   r$   r%   test_kwargs  s   
zTestJitClass.test_kwargsc                 C   s   dt fdt fdt fg}t|G dd dt}|ddd}| |jd | |jd | |jd |dd}| |jd | |jd | |jd |dd	dd
}| |jd | |jd | |jd	 d S )Nr    r!   r"   c                   @   s   e Zd ZdddZdS )z1TestJitClass.test_default_args.<locals>.TestClassr   c                 S   rp   r   )r    r!   r"   r  r$   r$   r%   r&     rr   z:TestJitClass.test_default_args.<locals>.TestClass.__init__Nr'   r(   r$   r$   r$   r%   r    s    r  r   r   r   r   )r!   r"   r    )r   r   r;   rD   r    r!   r"   r#   rG   r  r   r$   r$   r%   test_default_args  s$   
zTestJitClass.test_default_argsc                 C   s>  dt fdt fdt fdt fg}tt|}|dd}| |jd | |jd | |jd | |jd |d	dd
dd}| |jd | |jd	 | |jd | |jd
 |d	dd
d}| |jd | |jd	 | |jd | |jd
 |d	dd}| |jd | |jd	 | |jd | |jd d S )Nr    r!   r"   r   r   r   r   r   r   *   r
  )r!   r    r   r"   )r!   r    r   )r!   r    )r   r   r   rD   r    r!   r"   r   r"  r$   r$   r%   test_default_args_keyonly  s4   

z&TestJitClass.test_default_args_keyonlyc                 C   sz   dt fdt fdt fdtt dfdt fg}| tj}tt| W d    n1 s+w   Y  d}| |t	|j
 d S )Nr    r!   r"   r.   r   r   z(VAR_POSITIONAL argument type unsupported)r   r   ZUniTuplerc   r   ZUnsupportedErrorr   r-   re   rf   rg   )r#   rG   rh   msgr$   r$   r%   &test_default_args_starargs_and_keyonly  s   z3TestJitClass.test_default_args_starargs_and_keyonlyc                 C   sb   g }t |G dd dt}dd }tdD ]}t||| |D ]
\}}| || q#qd S )Nc                   @   ro   )z5TestJitClass.test_generator_method.<locals>.TestClassc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   z>TestJitClass.test_generator_method.<locals>.TestClass.__init__c                 s   s     t |D ]}t|V  qd S r   ranger   r   )r#   niterir$   r$   r%   gen     z9TestJitClass.test_generator_method.<locals>.TestClass.genN)r)   r*   r+   r&   r,  r$   r$   r$   r%   r        r  c                 s   s     t | D ]}t|V  qd S r   r(  )r*  r+  r$   r$   r%   expected_gen  r-  z8TestJitClass.test_generator_method.<locals>.expected_genr   )r   r;   r)  rF   r,  r   )r#   rG   r  r/  r*  expectrK   r$   r$   r%   test_generator_method  s   z"TestJitClass.test_generator_methodc                    s   dt d d  fg}t|G dd dt t fdd}tdd }| }| ||dd | ||d	d	 | ||d
d
 d S )Nr   c                   @   $   e Zd Zdd Zdd Zdd ZdS )z,TestJitClass.test_getitem.<locals>.TestClassc                 S      t jdt jd| _d S Nr   r   r   Zzerosr   r   r7   r$   r$   r%   r&        z5TestJitClass.test_getitem.<locals>.TestClass.__init__c                 S      || j |< d S r   r   r#   keyr   r$   r$   r%   __setitem__  r   z8TestJitClass.test_getitem.<locals>.TestClass.__setitem__c                 S   
   | j | S r   r   r#   r9  r$   r$   r%   __getitem__  r   z8TestJitClass.test_getitem.<locals>.TestClass.__getitem__Nr)   r*   r+   r&   r:  r=  r$   r$   r$   r%   r        r  c                     s"     } d| d< d| d< d| d< | S )Nr   r   r   r$   tr  r$   r%   create_and_set_indices  s
   z9TestJitClass.test_getitem.<locals>.create_and_set_indicesc                 S   s   | | S r   r$   )rA  nr$   r$   r%   	get_index$  r   z,TestJitClass.test_getitem.<locals>.get_indexr   r   r   r   r   r;   r	   rD   )r#   rG   rC  rE  rA  r$   rB  r%   test_getitem  s   

zTestJitClass.test_getitemc                 C   sl   dt d d  fg}t|G dd dt}| }d|d< tdd }||}| |d | |d d	 d S )
Nr   c                   @   r2  )z2TestJitClass.test_getitem_unbox.<locals>.TestClassc                 S   r3  r4  r5  r7   r$   r$   r%   r&   2  r6  z;TestJitClass.test_getitem_unbox.<locals>.TestClass.__init__c                 S   r7  r   r   r8  r$   r$   r%   r:  5  r   z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__setitem__c                 S   r;  r   r   r<  r$   r$   r%   r=  8  r   z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__getitem__Nr>  r$   r$   r$   r%   r  0  r?  r  r   r   c                 S   s   d| d< | d S )N   r   r   r$   r@  r$   r$   r%   set2return1>  s   z4TestJitClass.test_getitem_unbox.<locals>.set2return1r   rH  rF  )r#   rG   r  rA  rI  Zt_1r$   r$   r%   test_getitem_unbox-  s   

zTestJitClass.test_getitem_unboxc                 C   s   dt d d d d f fg}t|G dd dt}| }d|tdd< tdd }tdd	 }| ||ddd ||d
d
d | |td
d
 d d S )Nr   c                   @   r2  )z8TestJitClass.test_getitem_complex_key.<locals>.TestClassc                 S   r3  N)r   r   r   r5  r7   r$   r$   r%   r&   L  r6  zATestJitClass.test_getitem_complex_key.<locals>.TestClass.__init__c                 S   s   || j t|jt|jf< d S r   r   rR   realimagr8  r$   r$   r%   r:  O  s   zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__setitem__c                 S   s   | j t|jt|jf S r   rL  r<  r$   r$   r%   r=  R     zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__getitem__Nr>  r$   r$   r$   r%   r  J  r?  r  r   r   c                 S   s   | t || S r   complex)rA  rM  rN  r$   r$   r%   get_keyY  r   z6TestJitClass.test_getitem_complex_key.<locals>.get_keyc                 S   s   || t ||< d S r   rP  )rA  rM  rN  r   r$   r$   r%   set_key]     z6TestJitClass.test_getitem_complex_key.<locals>.set_keyr   r   )r   r   r;   rQ  r	   rD   )r#   rG   r  rA  rR  rS  r$   r$   r%   test_getitem_complex_keyG  s   


z%TestJitClass.test_getitem_complex_keyc                 C   s   dt d d d d f fg}t|G dd dt}| }d|d< tdd }tdd	 }| ||d ||d
 | |d d
 d S )Nr   c                   @   r2  )z6TestJitClass.test_getitem_tuple_key.<locals>.TestClassc                 S   r3  rK  r5  r7   r$   r$   r%   r&   j  r6  z?TestJitClass.test_getitem_tuple_key.<locals>.TestClass.__init__c                 S   s   || j |d |d f< d S Nr   r   r   r8  r$   r$   r%   r:  m  rO  zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__setitem__c                 S   s   | j |d |d f S rV  r   r<  r$   r$   r%   r=  p  r6  zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__getitem__Nr>  r$   r$   r$   r%   r  h  r?  r     r   r   c                 S   s   | d S )NrX  r$   r@  r$   r$   r%   get11v  r   z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nr   r   r$   rA  r   r$   r$   r%   set22z  r   z2TestJitClass.test_getitem_tuple_key.<locals>.set22   rZ  rF  )r#   rG   r  rA  rY  r\  r$   r$   r%   test_getitem_tuple_keye  s   



z#TestJitClass.test_getitem_tuple_keyc                 C   s   dt d d  fg}t|G dd dt}| }d|ddd< | |ddd d | |ddd d tdd }| ||d td	d
 }||d | |ddd d | |ddd d d S )Nr   c                   @   r2  )z6TestJitClass.test_getitem_slice_key.<locals>.TestClassc                 S   r3  r4  r5  r7   r$   r$   r%   r&     r6  z?TestJitClass.test_getitem_slice_key.<locals>.TestClass.__init__c                 S   s"   || j |j< ||j | j |j< d S r   )r   startstepstop)r#   slcr   r$   r$   r%   r:    s   zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__setitem__c                 S   s   | j |j S r   )r   r_  )r#   rb  r$   r$   r%   r=       zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__getitem__Nr>  r$   r$   r$   r%   r    s    r  r   r   r   c                 S   s   | ddd S )Nr      r   r$   r@  r$   r$   r%   get5  r   z1TestJitClass.test_getitem_slice_key.<locals>.get5c                 S   s   || ddd< d S )Nr   rd  r   r$   r[  r$   r$   r%   set26  rT  z2TestJitClass.test_getitem_slice_key.<locals>.set26rd  r   )r   r   r;   rD   r	   )r#   rG   r  rA  re  rf  r$   r$   r%   test_getitem_slice_key  s   


z#TestJitClass.test_getitem_slice_keyc                 C   sZ   dd t dD }dd |D }|dd |D  t|G dd dt}|   d S )Nc                 S   s   g | ]
}t td | qS r   )chrord).0r    r$   r$   r%   
<listcomp>      zFTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.<listcomp>   c                 S   s   g | ]}|d  t fqS r   )r   rj  letterr$   r$   r%   rk    s    c                 S   s   g | ]
}|  d  tfqS rn  )upperr   ro  r$   r$   r%   rk    rl  c                   @   r2  )zJTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabelc                 S   
   d| _ d S )Ng      $@)
aaaaaaaaaar7   r$   r$   r%   r&     r   zSTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.__init__c                 S   s   t | j| j| _d S r   )randomgaussrs  Z
bbbbbbbbbbr7   r$   r$   r%   meth1  r6  zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )rv  r7   r$   r$   r%   meth2  rc  zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r)   r*   r+   r&   rv  rw  r$   r$   r$   r%   TruncatedLabel  r?  rx  )r)  extendr   r;   rw  )r#   alphabetrG   rx  r$   r$   r%   %test_jitclass_longlabel_not_truncated  s   z2TestJitClass.test_jitclass_longlabel_not_truncatedc                 C   sP   t G dd dt}| }t|}| |tj t|}| t	|| d S )Nc                   @   r5   )z5TestJitClass.test_pickling.<locals>.PickleTestSubjectc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   z>TestJitClass.test_pickling.<locals>.PickleTestSubject.__init__Nr(   r$   r$   r$   r%   PickleTestSubject  rb   r|  )
r   r;   r   r   r   ZClassInstanceTypepickledumpsr   loads)r#   r|  r  tyZpickledr$   r$   r%   test_pickling  s   
zTestJitClass.test_picklingc                    sT  t dtfgG dd d}t dtfgG dd d}| |jt | |jt | |jt | |j|j | d|dd | d	|dd | d
|dd |d}|d}| d|d | d	|d | d|dd | d|dd | d|dd | d|dd | d|dd | d|dd | 	t
}|dd W d    n1 sw   Y  | dt|j | 	t}|d W d    n1 sw   Y  | dt|j t g G  fddd   }| 	tj}|  W d    n	1 sw   Y  | dt|j d S )Nr    c                   @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
z/TestJitClass.test_static_methods.<locals>.Test1c                 S   r   r   r   r   r$   r$   r%   r&     r   z8TestJitClass.test_static_methods.<locals>.Test1.__init__c                 S      |  | j|| _| jS r   rv   r    r#   r!   r$   r$   r%   increase     z8TestJitClass.test_static_methods.<locals>.Test1.increasec                 S      | | S r   r$   r   r$   r$   r%   rv     r   z3TestJitClass.test_static_methods.<locals>.Test1.addc                 S      | | S r   r$   r   r$   r$   r%   sub  r   z3TestJitClass.test_static_methods.<locals>.Test1.subN)r)   r*   r+   r&   r  staticmethodrv   r  r$   r$   r$   r%   rW     s    
rW   c                   @   s(   e Zd Zdd Zdd Zedd ZdS )z/TestJitClass.test_static_methods.<locals>.Test2c                 S   r   r   r   r   r$   r$   r%   r&     r   z8TestJitClass.test_static_methods.<locals>.Test2.__init__c                 S   r  r   r  r  r$   r$   r%   r    r  z8TestJitClass.test_static_methods.<locals>.Test2.increasec                 S   r  r   r$   r   r$   r$   r%   rv     r   z3TestJitClass.test_static_methods.<locals>.Test2.addN)r)   r*   r+   r&   r  r  rv   r$   r$   r$   r%   Test2  s
    r  r   r   r   r   rd  r   y               @y              ?Zfoobarr   r   zhas no attribute 'sub'z'not enough arguments: expected 2, got 1c                       s,   e Zd Zdd Zedd Z fddZdS )z/TestJitClass.test_static_methods.<locals>.Test3c                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   z8TestJitClass.test_static_methods.<locals>.Test3.__init__c                 S   r6   r   r$   r   r$   r$   r%   a_static_method  r   z?TestJitClass.test_static_methods.<locals>.Test3.a_static_methodc                    s     ddS r   )r  r7   Test3r$   r%   call_static  rc  z;TestJitClass.test_static_methods.<locals>.Test3.call_staticN)r)   r*   r+   r&   r  r  r  r$   r  r$   r%   r  
  s
    
r  z#Unknown attribute 'a_static_method')r   r   r   rv   r   r  ZassertNotEqualrD   r  rc   r  re   rf   rg   rd   r   r   r  )r#   rW   r  t1t2rh   invalidr$   r  r%   test_static_methods  sT   
z TestJitClass.test_static_methodsc                 C   s   t td}t G dd d}| |t | |jj| t|dG dd d}| |t | |jj| tG dd d}| |t | |jj| t|G d	d
 d
}| |t | |jj| d S )Nr   c                   @      e Zd ZU eed< dd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test1r    c                 S   rr  Nr   r   r7   r$   r$   r%   r&   $  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test1.__init__Nr^   r$   r$   r$   r%   rW         
 rW   rG   c                   @   r5   )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test2c                 S   rr  r  r   r7   r$   r$   r%   r&   -  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test2.__init__Nr(   r$   r$   r$   r%   r  *  r:   r  c                   @   r  )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test3r    c                 S   rr  r  r   r7   r$   r$   r%   r&   7  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__Nr^   r$   r$   r$   r%   r  3  r  r  c                   @   r5   )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test4c                 S   rr  r  r   r7   r$   r$   r%   r&   @  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test4.__init__Nr(   r$   r$   r$   r%   Test4=  r:   r  r   r   r   r   r   ZassertDictEqualr<   r?   )r#   rG   rW   r  r  r  r$   r$   r%    test_jitclass_decorator_usecases  s"   
z-TestJitClass.test_jitclass_decorator_usecasesc                 C   st   t td}G dd d}t|}| |t | |jj| G dd d}t||}| |t | |jj| d S )Nr   c                   @   r  )zCTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTestr    c                 S   rr  r  r   r7   r$   r$   r%   r&   L  r   zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__Nr^   r$   r$   r$   r%   AnnotatedTestI  s   
 r  c                   @   r5   )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   rr  r  r   r7   r$   r$   r%   r&   U  r   zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr(   r$   r$   r$   r%   UnannotatedTestS  rb   r  r  )r#   rG   r  ZJitTest1r  ZJitTest2r$   r$   r%   test_jitclass_function_usecasesF  s   

z,TestJitClass.test_jitclass_function_usecasesc                    s   t td}t|G dd dtt|G dd dt  fdd}|}t|}| t | |d|d | | d	| d	 | |d
|d
 d S )Nr   c                   @   r2  )z2TestJitClass.test_jitclass_isinstance.<locals>.Fooc                 S   r   r   r   r\   r$   r$   r%   r&   a  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.__init__c                 S   r   r   r   r7   r$   r$   r%   getValued  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   r   r   r   r7   r$   r$   r%   getValueIncrg  r   z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r)   r*   r+   r&   r  r  r$   r$   r$   r%   rY   _  r?  rY   c                   @   ro   )z2TestJitClass.test_jitclass_isinstance.<locals>.Barc                 S   r   r   r   r\   r$   r$   r%   r&   l  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.__init__c                 S   r   r   r   r7   r$   r$   r%   r  o  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.getValueN)r)   r*   r+   r&   r  r$   r$   r$   r%   r_   j  r.  r_   c                    sD   t |  fr |  }t | r|  | dfS |  | dfS dS )NrY   r_   zno match)rB   r  r  )r~   r    r_   rY   r$   r%   test_jitclass_isinstancer  s   
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancer   r   r   )r   r   r   r;   r	   r   r   rD   )r#   rG   r  ZpyfuncZcfuncr$   r  r%   r  \  s   

z%TestJitClass.test_jitclass_isinstancec                 C   sZ   |  t}tG dd dt}|  W d    n1 sw   Y  | dt|j d S )Nc                   @   ro   )z:TestJitClass.test_jitclass_unsupported_dunder.<locals>.Fooc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zCTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__init__c                 S   r6   r   r$   r7   r$   r$   r%   	__enter__  r8   zDTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__enter__N)r)   r*   r+   r&   r  r$   r$   r$   r%   rY     r.  rY   z$Method '__enter__' is not supported.)rc   rd   r   r;   re   rf   rg   )r#   erY   r$   r$   r%    test_jitclass_unsupported_dunder  s   	z-TestJitClass.test_jitclass_unsupported_dunderc                 C   s.   t G dd dt}t}|j}| || d S )Nc                   @   r5   )z1TestJitClass.test_modulename.<locals>.TestModnamec                 S   rr  )N   r   r7   r$   r$   r%   r&     r   z:TestJitClass.test_modulename.<locals>.TestModname.__init__Nr(   r$   r$   r$   r%   TestModname  rb   r  )r   r;   r)   r*   rD   )r#   r  Z
thisModuleZclassModuler$   r$   r%   test_modulename  s
   zTestJitClass.test_modulename)NNN)1r)   r*   r+   rM   rP   rQ   rX   ra   ri   rm   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r!  r#  r%  r'  r1  rG  rJ  rU  r^  rg  r{  r  r  r  r  r  r  r  r$   r$   r$   r%   r4   0   s^    
6>&X
 %S))r4   c                   @   s   e Zd ZG dd dZedd Zedd Zd"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edd Zdd Zd d! ZdS )#TestJitClassOverloadsc                   @   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 )zTestJitClassOverloads.PyListc                 C   s   dg| _ d S r  r   r7   r$   r$   r%   r&     rc  z%TestJitClassOverloads.PyList.__init__c                 C      | j | d S r   r    appendr  r$   r$   r%   r       z#TestJitClassOverloads.PyList.appendc                 C   s   | j   d S r   )r    clearr7   r$   r$   r%   r    r   z"TestJitClassOverloads.PyList.clearc                 C   s   t | jd S rk   rE   r    r7   r$   r$   r%   __abs__  r   z$TestJitClassOverloads.PyList.__abs__c                 C   s   t | jd dkS )Nr   r   r  r7   r$   r$   r%   __bool__  s   z%TestJitClassOverloads.PyList.__bool__c                 C   s    t d}| jr|| jd 7 }|S )Nr   r   )rQ  r    )r#   r   r$   r$   r%   __complex__  s   z(TestJitClassOverloads.PyList.__complex__c                 C   s
   || j v S r   r   r  r$   r$   r%   __contains__  r   z)TestJitClassOverloads.PyList.__contains__c                 C      d}| j r|| j d 7 }|S )Nr   r   r   )r#   fr$   r$   r%   	__float__     z&TestJitClassOverloads.PyList.__float__c                 C   r  )Nr   r   r   )r#   r+  r$   r$   r%   __int__  r  z$TestJitClassOverloads.PyList.__int__c                 C   s   t | jd S r   r  r7   r$   r$   r%   __len__  r   z$TestJitClassOverloads.PyList.__len__c                 C   s   t | jdkr	dS dS )Nr   zPyList emptyzPyList non-emptyr  r7   r$   r$   r%   __str__  s   z$TestJitClassOverloads.PyList.__str__N)r)   r*   r+   r&   r  r  r  r  r  r  r  r  r  r  r$   r$   r$   r%   PyList  s    r  c                      &   t dtjfgG  fddd  S )Nr    c                       s`   e Zd Zdd Zdd Zdd Z fddZ fd	d
Z fddZ fddZ	 fddZ
dS )z9TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapperc                 S   r   r   r   r\   r$   r$   r%   r&     r   zBTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__init__c                 S      | j |j kS r   r   r#   r   r$   r$   r%   __eq__  rc  z@TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__eq__c                 S   r   r   r   r7   r$   r$   r%   __hash__  r   zBTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__hash__c                        | j |j > S r   r   r  
IntWrapperr$   r%   
__lshift__  r  zDTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__lshift__c                        | j |j ? S r   r   r  r  r$   r%   
__rshift__  r  zDTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__rshift__c                        | j |j @ S r   r   r  r  r$   r%   __and__  r  zATestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__and__c                        | j |j B S r   r   r  r  r$   r%   __or__  r  z@TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__or__c                        | j |j A S r   r   r  r  r$   r%   __xor__  r  zATestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__xor__N)r)   r*   r+   r&   r  r  r  r  r  r  r  r$   r  r$   r%   r    s    r  )r   r   intpr$   r$   r  r%   get_int_wrapper  s   z%TestJitClassOverloads.get_int_wrapperc                      r  )Nr    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	 fddZ
 fddZ fddZ fddZ fddZ fddZ fddZ fddZ fdd Zd!S )"z=TestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapperc                 S   r   r   r   r\   r$   r$   r%   r&     r   zFTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__init__c                 S   r  r   r   r  r$   r$   r%   r    rc  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__eq__c                 S   r   r   r   r7   r$   r$   r%   r    r   zFTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__hash__c                 S      | j |j kS r   r   r  r$   r$   r%   __ge__  rc  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__ge__c                 S      | j |j kS r   r   r  r$   r$   r%   __gt__  rc  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__gt__c                 S      | j |j kS r   r   r  r$   r$   r%   __le__  rc  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__le__c                 S      | j |j k S r   r   r  r$   r$   r%   __lt__  rc  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__lt__c                    s    | j |j  S r   r   r  FloatWrapperr$   r%   __add__  r  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__add__c                    s    | j |j  S r   r   r  r  r$   r%   __floordiv__  r  zJTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__floordiv__c                    s    | j |j  S r   r   r  r  r$   r%   __mod__
  r  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__mod__c                    s    | j |j  S r   r   r  r  r$   r%   __mul__  r  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__mul__c                    s    | j  S r   r   r  r  r$   r%   __neg__  rc  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__neg__c                    s    | j 
 S r   r   r  r  r$   r%   __pos__  rc  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__pos__c                    s    | j |j  S r   r   r  r  r$   r%   __pow__  r  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__pow__c                    s    | j |j  S r   r   r  r  r$   r%   __sub__  r  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__sub__c                    s    | j |j  S r   r   r  r  r$   r%   __truediv__  r  zITestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__truediv__N)r)   r*   r+   r&   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r  r$   r%   r    s"    r  )r   r   r   r$   r$   r  r%   get_float_wrapper  s   2z'TestJitClassOverloads.get_float_wrapperNc                 C   s,   | j t|t||d | j |||d d S )N)r&  )rD   type)r#   r   r   r&  r$   r$   r%   
assertSame!  s   z TestJitClassOverloads.assertSamec                 C   s  t dttji| j}dd dd dd dd dd dd d	d d
d dd dd dd dd dd dd dd dd dd g}dd |D }|  }| }t||D ]\}}| |||| | |||| qU|d |d t||D ]\}}| |||| | |||| q}|d |d t||D ]\}}| |||| | |||| q|  |  t||D ]\}}| |||| | |||| qd S )Nr    c                 S      t | S r   )absr   r$   r$   r%   <lambda>+      z6TestJitClassOverloads.test_overloads.<locals>.<lambda>c                 S      |   S r   )r  r   r$   r$   r%   r  ,  r  c                 S   r  r   boolr   r$   r$   r%   r  -  r  c                 S   r  r   )r  r   r$   r$   r%   r  .  r  c                 S   r  r   rP  r   r$   r$   r%   r  /  r  c                 S   r  r   )r  r   r$   r$   r%   r  0  r  c                 S   s   d| v S r  r$   r   r$   r$   r%   r  1  r  c                 S   s
   |  dS r  )r  r   r$   r$   r%   r  2  s   
 c                 S   r  r   rV   r   r$   r$   r%   r  3  r  c                 S   r  r   )r  r   r$   r$   r%   r  4  r  c                 S   r  r   rR   r   r$   r$   r%   r  5  r  c                 S   r  r   )r  r   r$   r$   r%   r  6  r  c                 S   r  r   )rE   r   r$   r$   r%   r  7  r  c                 S   r  r   )r  r   r$   r$   r%   r  8  r  c                 S   r  r   )rf   r   r$   r$   r%   r  9  r  c                 S   r  r   )r  r   r$   r$   r%   r  :  r  c                 S   s   | rdS dS )Nr   r   r$   r   r$   r$   r%   r  ;  s    c                 S   s   g | ]}t |qS r$   )r	   )rj  r  r$   r$   r%   rk  =      z8TestJitClassOverloads.test_overloads.<locals>.<listcomp>r   )	r   r   rU   r  r  rF   r  r  r  )r#   ZJitListZpy_funcsZ	jit_funcsZpy_listZjit_listpy_fjit_fr$   r$   r%   test_overloads%  sR   



z$TestJitClassOverloads.test_overloadsc                 C   s   dd }t |}tdttjfgG dd d}|g d}| || | || |d | || | || |  | || | || tdtj	fgG d	d
 d
}|d}| || | || d S )Nc                 S   r  r   r  r   r$   r$   r%   py_bY     z6TestJitClassOverloads.test_bool_fallback.<locals>.py_br    c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z:TestJitClassOverloads.test_bool_fallback.<locals>.LenClassc                 S   r   r   r   r   r$   r$   r%   r&   `  r   zCTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__init__c                 S   s   t | jd S )Nr   r  r7   r$   r$   r%   r  c  r   zBTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__len__c                 S   r  r   r  r  r$   r$   r%   r  f  r  zATestJitClassOverloads.test_bool_fallback.<locals>.LenClass.appendc                 S   s   | j d d S r  )r    popr7   r$   r$   r%   r  i  r  z>TestJitClassOverloads.test_bool_fallback.<locals>.LenClass.popN)r)   r*   r+   r&   r  r  r  r$   r$   r$   r%   LenClass^  
    r  )r   r   r   r   r!   c                   @   r5   )z=TestJitClassOverloads.test_bool_fallback.<locals>.NormalClassc                 S   r   r   )r!   r  r$   r$   r%   r&   z  r   zFTestJitClassOverloads.test_bool_fallback.<locals>.NormalClass.__init__Nr(   r$   r$   r$   r%   NormalClassx  rb   r  r   )
r	   r   r   rU   r  r   r  r   r  r   )r#   r  Zjit_br  r~   r  r$   r$   r%   test_bool_fallbackW  s$   
z(TestJitClassOverloads.test_bool_fallbackc                 C   sx  dd }dd }dd }t |}t |}t |}tg G dd d}| }| ||td	 | ||td	 | ||d	 | ||d	 | t}	|| W d    n1 s^w   Y  | d
t|	j | t	}	|| W d    n1 sw   Y  | d
t|	j tg G dd d}
|
 }| ||d | ||d | t}	|| W d    n1 sw   Y  | dt|	j | t	}	|| W d    n1 sw   Y  | dt|	j | t}	|| W d    n	1 sw   Y  | dt|	j | t	}	|| W d    n	1 s(w   Y  | dt|	j tg G dd d}| }| ||td | ||td | ||d | ||d | ||d | ||d tg G dd d}| }| ||td	 | ||td	 | ||d	 | ||d	 | ||d | ||d d S )Nc                 S   r  r   rP  r   r$   r$   r%   py_c  r  z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_cc                 S   r  r   r  r   r$   r$   r%   r    r  z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_fc                 S   r  r   r  r   r$   r$   r%   py_i  r  z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_ic                   @   ro   )z?TestJitClassOverloads.test_numeric_fallback.<locals>.FloatClassc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zHTestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__init__c                 S   rj   Nr   r$   r7   r$   r$   r%   r    r8   zITestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__float__N)r)   r*   r+   r&   r  r$   r$   r$   r%   
FloatClass  r.  r  r   rR   c                   @   ro   )z=TestJitClassOverloads.test_numeric_fallback.<locals>.IntClassc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zFTestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__init__c                 S   rj   rk   r$   r7   r$   r$   r%   r    r8   zETestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__int__N)r)   r*   r+   r&   r  r$   r$   r$   r%   IntClass  r.  r  rl   rQ  rV   c                   @   ro   )z?TestJitClassOverloads.test_numeric_fallback.<locals>.IndexClassc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zHTestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__init__c                 S   rj   r   r$   r7   r$   r$   r%   	__index__  r8   zITestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__index__N)r)   r*   r+   r&   r   r$   r$   r$   r%   
IndexClass  r.  r  r         ?c                   @   r  )
zGTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClassc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zPTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__init__c                 S   rj   r  r$   r7   r$   r$   r%   r    r8   zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__float__c                 S   rj   rk   r$   r7   r$   r$   r%   r    r8   zOTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__int__c                 S   rj   r   r$   r7   r$   r$   r%   r     r8   zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__index__N)r)   r*   r+   r&   r  r  r   r$   r$   r$   r%   FloatIntIndexClass  r  r  )
r	   r   r  rQ  rc   rd   re   rf   rg   r   )r#   r  r  r  Zjit_cr  Zjit_ir  r~   r  r  r  r  r$   r$   r%   test_numeric_fallback  sx   





z+TestJitClassOverloads.test_numeric_fallbackc                 C   s  |   }|  }dd dd dd dd dd dd dd d	d d
d dd dd dd dd g}dd dd dd dd dd dd dd g}g d}dd }ttt||D ]>\}\}}	|j}
|
||	}||}||	}t|turx| j	n| j
}|||||	 ||||
|| |||||| qYttt||D ]>\}\}}	|j}
t|t|	}}	|
||	}||}||	}| 	||||	 | 	|||
|| | 	||||| qd S )Nc                 S      | |kS r   r$   rs   r$   r$   r%   r    r  z?TestJitClassOverloads.test_arithmetic_logical.<locals>.<lambda>c                 S      | |kS r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |k S r   r$   rs   r$   r$   r%   r    r  c                 S   r  r   r$   rs   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rs   r$   r$   r%   r    r  c                 S   r  r   r$   rs   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rs   r$   r$   r%   r    r  c                 S   r  r   r$   rs   r$   r$   r%   r    r  c                 S   r  r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |> S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |? S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |@ S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |B S r   r$   rs   r$   r$   r%   r    r  c                 S   s   | |A S r   r$   rs   r$   r$   r%   r    r  )r`          @)gX9v?r   )g333333*@g)\(?c                 S   s   t | d| S )Nr    )getattrr   r$   r$   r%   unwrap  rc  z=TestJitClassOverloads.test_arithmetic_logical.<locals>.unwrap)r  r  	itertoolsproductmapr	   r  r  rV   rD   assertAlmostEqualrR   )r#   r  r  float_py_funcsint_py_funcstest_valuesr
  r  r    r!   r  rL   Zjit_xZjit_ycheckr$   r$   r%   test_arithmetic_logical  sh   




z-TestJitClassOverloads.test_arithmetic_logicalc                    s  |   }|  }| d }| d }tdtjfgG fddd|tdtjiG  fddd|  d }  d }dd fd	d
dD }fdd
dD }g d}	tt	t
|||f| fg|	D ]2\}
\}}\}}|
j}|||||j}| ||||||j | ||
||||j qmtt	t
|||f|fg|	D ];\}
\}}\}}t|t|}}|
j}|||||j}| ||||||j | ||
||||j qd S )Nr   r    c                       sP   e Zd Zdd Z fddZ fddZ fddZ fd	d
Z fddZdS )zRTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapperc                 S   r   r   r   r\   r$   r$   r%   r&   5  r   z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__init__c                    r  r   r   r  JitIntUpdateWrapperr$   r%   __ilshift__8  r  z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ilshift__c                    r  r   r   r  r  r$   r%   __irshift__;  r  z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__irshift__c                    r  r   r   r  r  r$   r%   __iand__>  r  z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__iand__c                    r  r   r   r  r  r$   r%   __ior__A  r  zZTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ior__c                    r  r   r   r  r  r$   r%   __ixor__D  r  z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ixor__N)	r)   r*   r+   r&   r  r  r  r  r  r$   r  r$   r%   r  3  s    r  c                       sh   e Zd Zdd Z fddZ fddZ fddZ fd	d
Z fddZ fddZ	 fddZ
dS )zTTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapperc                 S   r   r   r   r\   r$   r$   r%   r&   J  r   z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__init__c                    s    | j d|j   S NgX9v@r   r  JitFloatUpdateWrapperr$   r%   __iadd__M     z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__iadd__c                    s    | j d |j  S r  r   r  r  r$   r%   __ifloordiv__P  r  zbTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ifloordiv__c                    s    | j |j d  S r   r   r  r  r$   r%   __imod__S  r  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imod__c                    s    | j |j  d S r   r   r  r  r$   r%   __imul__V  r  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imul__c                    s    | j |j  d S r   r   r  r  r$   r%   __ipow__Y  r  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ipow__c                    s    | j d|j   S r  r   r  r  r$   r%   __isub__\  r  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__isub__c                    s    | j d |j  S r   r   r  r  r$   r%   __itruediv___  r  zaTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__itruediv__N)r)   r*   r+   r&   r  r   r!  r"  r#  r$  r%  r$   r  r$   r%   r  G  s    r  c                 S   s"   d|  d}i }t || |d S )Nz
def f(x, y):
    x z= y
    return x
r  )exec)optemplate	namespacer$   r$   r%   get_update_funce  s   
zNTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.get_update_funcc                       g | ]} |qS r$   r$   rj  r'  r*  r$   r%   rk  o  r  zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+//%***-/c                    r+  r$   r$   r,  r-  r$   r%   rk  r  r  )<<>>&|^r  )r  r  mror   r   r  r   r  r  r  r	   r  r    r  rR   rD   )r#   ZJitIntWrapperZJitFloatWrapperZPyIntWrapperZPyFloatWrapperZPyIntUpdateWrapperZPyFloatUpdateWrapperr  r  r  r  Zpy_clsjit_clsr    r!   r  rL   r$   )r  r  r*  r%   test_arithmetic_logical_inplace*  sL   
z5TestJitClassOverloads.test_arithmetic_logical_inplacec                 C   s  G dd d}G dd d|}dd }dd }d	d
 }dd }g d}t ||gddgD ]X\}}	|	r5tn|}
|
|}|
|}|
|}t|}dD ]}| ||||d  qI|D ]*\}}| |||||||||k | |||||||||k qZq-d S )Nc                   @   s.   e Zd ZU eed< dd Zdd Zdd ZdS )	z9TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTestr    c                 S   r   r   r   r   r$   r$   r%   r&     r   zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__init__c                 S   s
   | j d S )Nr   r   r7   r$   r$   r%   r    r   zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__hash__c                 S   s   | j |j  d dkS )NrH  r   r   r#   or$   r$   r%   r    r  z@TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__eq__N)r)   r*   r+   rR   rS   r&   r  r  r$   r$   r$   r%   
HashEqTest  s
   
 r?  c                   @   r5   )z;TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTestc                 S   s   | j |j  d dkS )NrH  r   r   r=  r$   r$   r%   __ne__  r  zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTest.__ne__N)r)   r*   r+   r@  r$   r$   r$   r%   HashEqNeTest      rA  c                 S   r  r   )hashr   r$   r$   r%   py_hash  r  z6TestJitClassOverloads.test_hash_eq_ne.<locals>.py_hashc                 S   r  r   r$   rs   r$   r$   r%   py_eq  r  z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_eqc                 S   r  r   r$   rs   r$   r$   r%   py_ne  r  z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_nec                 S   r   r   r$   )r  r$   r$   r%   identity_decorator  r8   zATestJitClassOverloads.test_hash_eq_ne.<locals>.identity_decorator))r   r   )r   r]  )rl   r   )r   r   FT)r   r   r      ir   )r  r  r	   r   rD   )r#   r?  rA  rD  rE  rF  rG  ZcomparisonsZbase_clsZuse_jit	decoratorZ	hash_funcZeq_funcZne_funcr;  r   r    r!   r$   r$   r%   test_hash_eq_ne  s8   z%TestJitClassOverloads.test_hash_eq_nec                 C   s   G dd d}|}t dtjfg|}|d }|d }|d }|d }| || | || | t|t| | t|t| d S )Nc                   @   r2  )zBTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLenc                 S   r   r   r   rt   r$   r$   r%   r&     r   zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__init__c                 S   r   r   r   r7   r$   r$   r%   r    r   zJTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__len__c                 S   r  r   r  r7   r$   r$   r%   get_bool  r  zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.get_boolN)r)   r*   r+   r&   r  rK  r$   r$   r$   r%   NoBoolHasLen  s    rL  ru   r   r   )r   r   Zint64rK  rD   r  )r#   rL  py_classjitted_classZpy_class_0_boolZpy_class_2_boolZjitted_class_0_boolZjitted_class_2_boolr$   r$   r%   test_bool_fallback_len  s   
z,TestJitClassOverloads.test_bool_fallback_lenc                 C   sV   G dd d}|}t g |}|  }|  }| || | t|t| d S )Nc                   @   ro   )zETestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLenc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.__init__c                 S   r  r   r  r7   r$   r$   r%   rK    r  zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.get_boolN)r)   r*   r+   r&   rK  r$   r$   r$   r%   NoBoolNoLen      rP  )r   rK  rD   r  )r#   rP  rM  rN  Zpy_class_boolZjitted_class_boolr$   r$   r%   test_bool_fallback_default  s   

z0TestJitClassOverloads.test_bool_fallback_defaultc           
      C   s   G dd d}G dd d}dt jfg}t||}t||}|d}|d}|d}|d}	| ||k|	|k | ||k|	|k | ||k |	|k  | ||k|	|k | ||k|	|k d S )Nc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )zHTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefinedc                 S   r   r   r   r   r$   r$   r%   r&     r   zQTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__init__c                 S   r  r   r   r  r$   r$   r%   r    rc  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__eq__c                 S   r  r   r   r  r$   r$   r%   r    rc  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__le__c                 S   r  r   r   r  r$   r$   r%   r     rc  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__lt__c                 S   r  r   r   r  r$   r$   r%   r  #  rc  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__ge__c                 S   r  r   r   r  r$   r$   r%   r  &  rc  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__gt__N)	r)   r*   r+   r&   r  r  r  r  r  r$   r$   r$   r%   OperatorsDefined  s    rS  c                   @   r5   )zJTestJitClassOverloads.test_operator_reflection.<locals>.NoOperatorsDefinedc                 S   r   r   r   r   r$   r$   r%   r&   *  r   zSTestJitClassOverloads.test_operator_reflection.<locals>.NoOperatorsDefined.__init__Nr(   r$   r$   r$   r%   NoOperatorsDefined)  rB  rT  r    r   r   )r   r   r   rD   )
r#   rS  rT  rG   JitOperatorsDefinedJitNoOperatorsDefinedpy_ops_definedpy_ops_not_definedjit_ops_definedjit_ops_not_definedr$   r$   r%   test_operator_reflection  s0   




z.TestJitClassOverloads.test_operator_reflectionc                 C   s  G dd d}G dd d}d}t jd t jj|fd}t jj||fd}||}||}t|dtd d d id	|}t|dtd d d id	|}	||}
||}t|dtd d d d df id	|}t|dtd d d d df id	|}t j|| |	|  t j||
 |	|  t j|| ||  t j||
 ||  t j|| ||	  t j|| ||  t j|
| ||	  t j|
| ||  ||
 }||
 }|	| }	|| }t j|j|	j t j|j|j d S )
Nc                   @   r  )
z;TestJitClassOverloads.test_matmul_operator.<locals>.ArrayAtc                 S   r   r   rn   r#   r   r$   r$   r%   r&   I  r   zDTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__init__c                 S   s   | j |j  S r   r\  r  r$   r$   r%   
__matmul__L  rc  zFTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__matmul__c                 S   s   |j | j  S r   r\  r  r$   r$   r%   __rmatmul__O  rc  zGTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__rmatmul__c                 S   s   | j |j  | _ | S r   r\  r  r$   r$   r%   __imatmul__R  s   zGTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__imatmul__N)r)   r*   r+   r&   r^  r_  r`  r$   r$   r$   r%   ArrayAtH  s
    ra  c                   @   r5   )z=TestJitClassOverloads.test_matmul_operator.<locals>.ArrayNoAtc                 S   r   r   r\  r]  r$   r$   r%   r&   W  r   zFTestJitClassOverloads.test_matmul_operator.<locals>.ArrayNoAt.__init__Nr(   r$   r$   r$   r%   	ArrayNoAtV  rB  rb  r   r   )sizern   r  )r   rt  seedr   r   r   Zassert_allclosern   )r#   ra  rb  rD  r   matZvector_noatZ	vector_atZjit_vector_noatZjit_vector_atZmatrix_noatZ	matrix_atZjit_matrix_noatZjit_matrix_atr$   r$   r%   test_matmul_operatorF  sX   &&z*TestJitClassOverloads.test_matmul_operatorc              
   C   sB  G dd d}G dd d}g d}g |dddd	d
}t |dft|dftd d d |tg dtg dfffD ]_\}}}d|i}t||}	t||}
||d }||d }|	|d }|
|d }|D ]1}dt|vr| td| dtd| d ql| t	td| dt	td| d qlq?d S )Nc                   @   st   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S )zRTestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefinedc                 S   r   r   r   r   r$   r$   r%   r&     r   z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__init__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __radd__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__radd__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rsub__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rsub__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rmul__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rmul__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rtruediv__  rc  z_TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rtruediv__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rfloordiv__  rc  z`TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rfloordiv__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rmod__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rmod__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rpow__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rpow__c                 S   s   |j | j > S r   r   r  r$   r$   r%   __rlshift__  rc  z^TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rlshift__c                 S   s   |j | j ? S r   r   r  r$   r$   r%   __rrshift__  rc  z^TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rrshift__c                 S   s   |j | j @ S r   r   r  r$   r$   r%   __rand__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rand__c                 S   s   |j | j A S r   r   r  r$   r$   r%   __rxor__  rc  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rxor__c                 S   s   |j | j B S r   r   r  r$   r$   r%   __ror__  rc  zZTestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__ror__N)r)   r*   r+   r&   rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  r$   r$   r$   r%   rS    s    rS  c                   @   r5   )zTTestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.NoOperatorsDefinedc                 S   r   r   r   r   r$   r$   r%   r&     r   z]TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.NoOperatorsDefined.__init__Nr(   r$   r$   r$   r%   rT    rB  rT  )r.  r3  r1  r2  r4  r/  r0  r5  r6  r7  r9  r8  )r   r   )r        @r   )r  r  rs  )g      4@g      8r  r    r   r   zpy_ops_not_defined z py_ops_definedzjit_ops_not_defined z jit_ops_defined)
r   r   r   r   r   rf   rD   evalZassertTupleEqualtuple)r#   rS  rT  Zfloat_opZint_opZ	test_typeZtest_opZ
test_valuerG   rU  rV  rW  rX  rY  rZ  r'  r$   r$   r%   "test_arithmetic_logical_reflection  s:   (

z8TestJitClassOverloads.test_arithmetic_logical_reflectionc                 C   s2   G dd d}t g |}| }| ||k d S )Nc                   @   ro   )zGTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHashc                 S   r6   r   r$   r7   r$   r$   r%   r&     r8   zPTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__init__c                 S   rj   )NFr$   r  r$   r$   r%   r    r8   zNTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__eq__N)r)   r*   r+   r&   r  r$   r$   r$   r%   ImplicitHash  rQ  rw  )r   r   )r#   rw  Zjittedinstancer$   r$   r%   test_implicit_hash_compiles  s   z1TestJitClassOverloads.test_implicit_hash_compilesr   )r)   r*   r+   r  r  r  r  r  r  r  r  r  r<  rJ  rO  rR  r[  r   rf  rv  ry  r$   r$   r$   r%   r    s(    .


62*cFm<+1
?Lr  __main__)2r   r  r}  rt  typingrT   Zunittestcollectionsr   numpyr   Znumbar   r   r   r   r   r   r	   r
   r   Z
numba.corer   r   Znumba.core.dispatcherr   Znumba.core.errorsr   r   Znumba.core.runtime.nrtr   Znumba.experimentalr   Znumba.experimental.jitclassr   Z numba.experimental.jitclass.baser   Znumba.tests.supportr   r   r   r   r;   r   r-   r3   r4   r  r)   mainr$   r$   r$   r%   <module>   sP    ,	        t      M