o
    'ѹg?                     @   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$   _/Users/admin/.pyenv/versions/3.10.0/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)Zboxptrmir$   r$   r%   _get_meminfo)   s   
r2   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       r8   r   r   )r   object
class_typeinstance_typeliststructkeysvalues
isinstancer   itemsassertEquallenzip)
r#   spectest_clsall_expectedr8   Zclstynamesr@   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   rL   r#   rF   r$   r$   r%   test_ordereddict_specL   s   z"TestJitClass.test_ordereddict_specc                 C   s   dt fdtfg}| | d S rM   )r   r   rL   rN   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   r5   r   r$   r6   r$   r$   r%   r&   _   r7   z:TestJitClass.test_type_annotations.<locals>.Test1.__init__N)	r)   r*   r+   int__annotations__ptListfloatr&   r$   r$   r$   r%   Test1Z   s   
 rV   r!   )r   r   r:   rL   r   ZListTyper   )r#   rF   rV   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+   rQ   rR   r$   r$   r$   r%   Foof   s   
 rX   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   )rQ   r    r!   r#   rY   r$   r$   r%   r&   m      

zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r)   r*   r+   rU   rR   r&   r$   r$   r$   r%   Bari   s   
 r^   r    r   r!           )rG   rH   )r   rL   r   )r#   rX   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                   @   r4   )z+TestJitClass.test_spec_errors.<locals>.Testc                 S   r5   r   r$   r6   r$   r$   r%   r&   {   r7   z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r8   y       r8   z*spec values should be Numba type instancesz"spec keys should be strings, got 1)rQ   r   r   r:   assertRaises	TypeErrorr   assertInstr	exceptionrC   )r#   Zspec1Zspec2r8   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                   @   r4   )z+TestJitClass.test_init_errors.<locals>.Testc                 S      dS N   r$   r6   r$   r$   r%   r&      r7   z4TestJitClass.test_init_errors.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r8      ra   r8   z"__init__() should return None, not)r   rb   r   r   rd   re   rf   )r#   r8   rg   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!   rm   )r#   r    r!   rm   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&   ru   r$   r$   r$   r%   Float2AndArray   s    rv   )r   r   r   r:   )r#   rF   rv   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                   @   r4   )z+TestJitClass._make_Vector2.<locals>.Vector2c                 S      || _ || _d S r   rr   )r#   r    r!   r$   r$   r%   r&         
z4TestJitClass._make_Vector2.<locals>.Vector2.__init__Nr(   r$   r$   r$   r%   Vector2   r9   rz   )r   r   r   r:   )r#   rF   rz   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   rr   objr$   r$   r%   bar      z*TestJitClass.test_jit_class_1.<locals>.barc                    s4    dd| }| d dd}|||jfS )Nr      {         )ru   rm   )r   r}   vecrv   rz   r~   r$   r%   foo   s   

z*TestJitClass.test_jit_class_1.<locals>.foo
   Zdtype   rk   )rw   r{   r	   npZonesr   rC   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   rp   r|   r$   r$   r%   retrieve_attributes   s   zITestJitClass.test_jitclass_usage_from_python.<locals>.retrieve_attributesr   r   r   r   r   r   |   }   iM  i  r   )rw   r	   r   aranger   r2   rC   refcountdatar   box_get_dataptrZ_numba_type_r;   assertIsr    r!   rm   ru   )r#   rv   r   r   rm   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 )Nrt   c                   @   r4   )z2TestJitClass.test_jitclass_datalayout.<locals>.Fooc                 S   
   || _ d S r   rt   rs   r$   r$   r%   r&        
z;TestJitClass.test_jitclass_datalayout.<locals>.Foo.__init__Nr(   r$   r$   r$   r%   rX     r9   rX   TF)r   r   r   r:   
assertTruert   assertFalse)r#   rF   rX   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   rx   r   )r   r   )r#   r   r   r$   r$   r%   r&     ry   z<TestJitClass.test_deferred_type.<locals>.LinkedNode.__init__c                    s
    | j S r   r   r6   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<   rC   r   ZassertIsNoner   r2   r   r   r   ZassertIsNotNone)	r#   Z	node_typerF   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                   @   r4   )z-TestJitClass.test_c_structure.<locals>.Structc                 S   ro   r   )r   r   r   )r#   r   r   r   r$   r$   r%   r&   X  rq   z6TestJitClass.test_c_structure.<locals>.Struct.__init__Nr(   r$   r$   r$   r%   StructU  r9   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+   ctypesc_int32c_int16c_double_fields_r$   r$   r$   r%   CStruct_  s
    r   r   )r   r   r   r   r   r:   r   	Structurec_void_pr   r   castPOINTERrC   r   r   r   )r#   rF   r   str   r0   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	   rb   r   rd   re   rf   )r#   ZVectorZvec_ar   rg   r$   r$   r%   test_isl  s   

zTestJitClass.test_isc                 C   s"   |   }|dd}| || d S Nr   r   )r{   assertIsInstance)r#   rz   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{   rb   rc   rC   re   rf   )r#   rz   rg   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                   @   r4   )z*TestJitClass.test_base_class.<locals>.Basec                 S   r   r   attrr6   r$   r$   r%   what     z/TestJitClass.test_base_class.<locals>.Base.whatN)r)   r*   r+   r   r$   r$   r$   r%   Base  ra   r   r   c                   @   r4   )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%   r8     r9   r8   r   )r:   r   r   rC   r   )r#   r   r8   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   r5   r   r$   r6   r$   r$   r%   r&     r7   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:   rb   rc   r   rC   re   rf   )r#   r   rg   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   r6   r$   r$   r%   rY     r   z7TestJitClass.test_user_getter_setter.<locals>.Foo.valuec                 S      |d | _ d S r   r   rs   r$   r$   r%   rY        N)r)   r*   r+   r&   propertyrY   setterr$   r$   r$   r%   rX     s    
rX   r   r   i  i  c                 S   s"   | j }|| _ | j }| j}|||fS r   )rY   r   )r   rt   r   r   r   r$   r$   r%   r~     s
   
z1TestJitClass.test_user_getter_setter.<locals>.barr   i6  )r   r   r:   rC   r   rY   r	   )r#   rX   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   r5   r   r$   r6   r$   r$   r%   r&     r7   z:TestJitClass.test_user_deleter_error.<locals>.Foo.__init__c                 S   ri   r   r$   r6   r$   r$   r%   rY     r   z7TestJitClass.test_user_deleter_error.<locals>.Foo.valuec                 S   r5   r   r$   r6   r$   r$   r%   rY     r   N)r)   r*   r+   r&   r   rY   deleterr$   r$   r$   r%   rX     s    
rX   zdeleter is not supported: valuer   r#   rX   rg   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   r5   r   r$   r6   r$   r$   r%   r&     r7   z<TestJitClass.test_name_shadowing_error.<locals>.Foo.__init__c                 S   r5   r   r$   r6   r$   r$   r%   my_property  r   z?TestJitClass.test_name_shadowing_error.<locals>.Foo.my_propertyc                 S   r5   r   r$   r6   r$   r$   r%   	my_method  r7   z=TestJitClass.test_name_shadowing_error.<locals>.Foo.my_methodN)r)   r*   r+   r&   r   r   r   r$   r$   r$   r%   rX     s
    
rX   r   zname shadowing: my_propertyr   zname shadowing: my_method)r:   rb   	NameErrorr   r   rC   re   rf   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                   @   rn   )/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   r6   r$   r$   r%   run  r   3TestJitClass.test_distinct_classes.<locals>.Foo.runNr)   r*   r+   r&   r   r$   r$   r$   r%   rX         rX   c                   @   rn   )r   c                 S   r   r   r   r   r$   r$   r%   r&     r   r   c                 S   s
   | j d S r   r   r6   r$   r$   r%   r     r   r   Nr   r$   r$   r$   r%   rX     r   r   rk      r   r   )r   r   r:   rC   r    r   )r#   rX   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                   @   r4   )z0TestJitClass.test_parameterized.<locals>.MyClassc                 S   r   r   rY   r[   r$   r$   r%   r&     r   z9TestJitClass.test_parameterized.<locals>.MyClass.__init__Nr(   r$   r$   r$   r%   MyClass  ra   r   c                    s   t  dt| fg}|| S )NrY   )r   r   )rY   clsr   r$   r%   create_my_class  s   z8TestJitClass.test_parameterized.<locals>.create_my_classr   g(@)r:   rC   rY   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)rY   _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   )rY   r   _MyClass__valuer   r[   r$   r$   r%   r&   0  s   

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   r   r   r   r6   r$   r$   r%   private_value6  r   z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   r   r   r   r6   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   r6   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#   Z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:   rC   rY   r   r   r  r	  r  r  r   r	   rb   r   r   rd   re   rf   AttributeErrorpy_func)r#   rF   r   rY   r  Zfreeze_inst_valuer  rg   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   rk   N)Zannotation_usecasesr  r   r   rC   r    ru   )r#   r  rF   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   ri   )init docstringNr$   r6   r$   r$   r%   r&         z3TestJitClass.test_docstring.<locals>.Apple.__init__c                 S   ri   )foo method docstringNr$   r6   r$   r$   r%   r     r  z.TestJitClass.test_docstring.<locals>.Apple.fooc                 S   ri   )aval property docstringNr$   r6   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:   rC   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                   @   r4   )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  ra   r#  r   g?)r!   r"   r    r$   )r   r   r   r:   rC   r   r   )r#   rF   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   ro   r   )r    r!   r"   r"  r$   r$   r%   r&     rq   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:   rC   r    r!   r"   r#   rF   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   rC   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UniTuplerb   r   ZUnsupportedErrorr   r-   rd   re   rf   )r#   rF   rg   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                   @   rn   )z5TestJitClass.test_generator_method.<locals>.TestClassc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   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&   r1  r$   r$   r$   r%   r#        r#  c                 s   s     t | D ]}t|V  qd S r   r-  )r/  r0  r$   r$   r%   expected_gen  r2  z8TestJitClass.test_generator_method.<locals>.expected_genr   )r   r:   r.  rE   r1  r   )r#   rF   r#  r4  r/  expectrJ   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   zerosr   r   r6   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#   r?  r$   r$   r%   __getitem__  r   z8TestJitClass.test_getitem.<locals>.TestClass.__getitem__Nr)   r*   r+   r&   r@  rC  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$   )rG  nr$   r$   r%   	get_index$  r   z,TestJitClass.test_getitem.<locals>.get_indexr   r   r   r   r   r:   r	   rC   )r#   rF   rI  rK  rG  r$   rH  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                   @   r7  )z2TestJitClass.test_getitem_unbox.<locals>.TestClassc                 S   r8  r9  r:  r6   r$   r$   r%   r&   2  r<  z;TestJitClass.test_getitem_unbox.<locals>.TestClass.__init__c                 S   r=  r   r   r>  r$   r$   r%   r@  5  r   z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__setitem__c                 S   rA  r   r   rB  r$   r$   r%   rC  8  r   z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__getitem__NrD  r$   r$   r$   r%   r#  0  rE  r#  r   r   c                 S   s   d| d< | d S )N   r   r   r$   rF  r$   r$   r%   set2return1>  s   z4TestJitClass.test_getitem_unbox.<locals>.set2return1r   rN  rL  )r#   rF   r#  rG  rO  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                   @   r7  )z8TestJitClass.test_getitem_complex_key.<locals>.TestClassc                 S   r8  N)r   r   r   r:  r6   r$   r$   r%   r&   L  r<  zATestJitClass.test_getitem_complex_key.<locals>.TestClass.__init__c                 S   s   || j t|jt|jf< d S r   r   rQ   realimagr>  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   rR  rB  r$   r$   r%   rC  R     zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__getitem__NrD  r$   r$   r$   r%   r#  J  rE  r#  r   r   c                 S   s   | t || S r   complex)rG  rS  rT  r$   r$   r%   get_keyY  r   z6TestJitClass.test_getitem_complex_key.<locals>.get_keyc                 S   s   || t ||< d S r   rV  )rG  rS  rT  r   r$   r$   r%   set_key]     z6TestJitClass.test_getitem_complex_key.<locals>.set_keyr   r   )r   r   r:   rW  r	   rC   )r#   rF   r#  rG  rX  rY  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                   @   r7  )z6TestJitClass.test_getitem_tuple_key.<locals>.TestClassc                 S   r8  rQ  r:  r6   r$   r$   r%   r&   j  r<  z?TestJitClass.test_getitem_tuple_key.<locals>.TestClass.__init__c                 S   s   || j |d |d f< d S Nr   r   r   r>  r$   r$   r%   r@  m  rU  zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__setitem__c                 S   s   | j |d |d f S r\  r   rB  r$   r$   r%   rC  p  r<  zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__getitem__NrD  r$   r$   r$   r%   r#  h  rE  r#     r   r   c                 S   s   | d S )Nr^  r$   rF  r$   r$   r%   get11v  r   z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nr   r   r$   rG  r   r$   r$   r%   set22z  r   z2TestJitClass.test_getitem_tuple_key.<locals>.set22   r`  rL  )r#   rF   r#  rG  r_  rb  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                   @   r7  )z6TestJitClass.test_getitem_slice_key.<locals>.TestClassc                 S   r8  r9  r:  r6   r$   r$   r%   r&     r<  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   re  )r#   rh  r$   r$   r%   rC       zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__getitem__NrD  r$   r$   r$   r%   r#    s    r#  r   r   r   c                 S   s   | ddd S )Nr      r   r$   rF  r$   r$   r%   get5  r   z1TestJitClass.test_getitem_slice_key.<locals>.get5c                 S   s   || ddd< d S )Nr   rj  r   r$   ra  r$   r$   r%   set26  rZ  z2TestJitClass.test_getitem_slice_key.<locals>.set26rj  r   )r   r   r:   rC   r	   )r#   rF   r#  rG  rk  rl  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   rp  letterr$   r$   r%   rq    s    c                 S   s   g | ]
}|  d  tfqS rt  )upperr   ru  r$   r$   r%   rq    rr  c                   @   r7  )zJTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabelc                 S   
   d| _ d S )Ng      $@)
aaaaaaaaaar6   r$   r$   r%   r&     r   zSTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.__init__c                 S   s   t | j| j| _d S r   )randomgaussry  Z
bbbbbbbbbbr6   r$   r$   r%   meth1  r<  zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )r|  r6   r$   r$   r%   meth2  ri  zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r)   r*   r+   r&   r|  r}  r$   r$   r$   r%   TruncatedLabel  rE  r~  )r.  extendr   r:   r}  )r#   alphabetrF   r~  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                   @   r4   )z5TestJitClass.test_pickling.<locals>.PickleTestSubjectc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   z>TestJitClass.test_pickling.<locals>.PickleTestSubject.__init__Nr(   r$   r$   r$   r%   PickleTestSubject  ra   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   ru   r    r#   r!   r$   r$   r%   increase     z8TestJitClass.test_static_methods.<locals>.Test1.increasec                 S      | | S r   r$   r   r$   r$   r%   ru     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  staticmethodru   r  r$   r$   r$   r%   rV     s    
rV   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%   ru     r   z3TestJitClass.test_static_methods.<locals>.Test2.addN)r)   r*   r+   r&   r  r  ru   r$   r$   r$   r%   Test2  s
    r  r   r   r   r   rj  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   r5   r   r$   r6   r$   r$   r%   r&     r7   z8TestJitClass.test_static_methods.<locals>.Test3.__init__c                 S   r5   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  r6   Test3r$   r%   call_static  ri  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   ru   r   r  ZassertNotEqualrC   r  rb   r  rd   re   rf   rc   r   r   r  )r#   rV   r  t1t2rg   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   rx  Nr   r   r6   r$   r$   r%   r&   $  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test1.__init__Nr]   r$   r$   r$   r%   rV         
 rV   rF   c                   @   r4   )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test2c                 S   rx  r  r   r6   r$   r$   r%   r&   -  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test2.__init__Nr(   r$   r$   r$   r%   r  *  r9   r  c                   @   r  )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test3r    c                 S   rx  r  r   r6   r$   r$   r%   r&   7  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__Nr]   r$   r$   r$   r%   r  3  r  r  c                   @   r4   )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test4c                 S   rx  r  r   r6   r$   r$   r%   r&   @  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test4.__init__Nr(   r$   r$   r$   r%   Test4=  r9   r  r   r   r   r   r   ZassertDictEqualr;   r>   )r#   rF   rV   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   rx  r  r   r6   r$   r$   r%   r&   L  r   zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__Nr]   r$   r$   r$   r%   AnnotatedTestI  s   
 r  c                   @   r4   )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   rx  r  r   r6   r$   r$   r%   r&   U  r   zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr(   r$   r$   r$   r%   UnannotatedTestS  ra   r  r  )r#   rF   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                   @   r7  )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   r6   r$   r$   r%   getValued  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   r   r   r   r6   r$   r$   r%   getValueIncrg  r   z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r)   r*   r+   r&   r  r  r$   r$   r$   r%   rX   _  rE  rX   c                   @   rn   )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   r6   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  r3  r^   c                    sD   t |  fr |  }t | r|  | dfS |  | dfS dS )NrX   r^   zno match)rA   r  r  )r}   r    r^   rX   r$   r%   test_jitclass_isinstancer  s   
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancer   r   r   )r   r   r   r:   r	   r   r   rC   )r#   rF   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                   @   rn   )z:TestJitClass.test_jitclass_unsupported_dunder.<locals>.Fooc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zCTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__init__c                 S   r5   r   r$   r6   r$   r$   r%   	__enter__  r7   zDTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__enter__N)r)   r*   r+   r&   r  r$   r$   r$   r%   rX     r3  rX   z$Method '__enter__' is not supported.)rb   rc   r   r:   rd   re   rf   )r#   erX   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                   @   r4   )z1TestJitClass.test_modulename.<locals>.TestModnamec                 S   rx  )N   r   r6   r$   r$   r%   r&     r   z:TestJitClass.test_modulename.<locals>.TestModname.__init__Nr(   r$   r$   r$   r%   TestModname  ra   r  )r   r:   r)   r*   rC   )r#   r  Z
thisModuleZclassModuler$   r$   r%   test_modulename  s
   zTestJitClass.test_modulename)NNN)1r)   r*   r+   rL   rO   rP   rW   r`   rh   rl   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r!  r&  r(  r*  r,  r6  rM  rP  r[  rd  rm  r  r  r  r  r  r  r  r  r$   r$   r$   r%   r3   0   s^    
6>&X
 %S))r3   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   r6   r$   r$   r%   r&     ri  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    clearr6   r$   r$   r%   r    r   z"TestJitClassOverloads.PyList.clearc                 C   s   t | jd S rj   rD   r    r6   r$   r$   r%   __abs__  r   z$TestJitClassOverloads.PyList.__abs__c                 C   s   t | jd dkS )Nr   r   r  r6   r$   r$   r%   __bool__  s   z%TestJitClassOverloads.PyList.__bool__c                 C   s    t d}| jr|| jd 7 }|S )Nr   r   )rW  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#   r0  r$   r$   r%   __int__  r  z$TestJitClassOverloads.PyList.__int__c                 C   s   t | jd S r   r  r6   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  r6   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__  ri  z@TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__eq__c                 S   r   r   r   r6   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    ri  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__eq__c                 S   r   r   r   r6   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__  ri  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__ge__c                 S      | j |j kS r   r   r  r$   r$   r%   __gt__  ri  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__gt__c                 S      | j |j kS r   r   r  r$   r$   r%   __le__  ri  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__le__c                 S      | j |j k S r   r   r  r$   r$   r%   __lt__  ri  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__  ri  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__neg__c                    s    | j 
 S r   r   r  r  r$   r%   __pos__  ri  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+  )rC   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   rV  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   rU   r   r$   r$   r%   r  3  r  c                 S   r  r   )r  r   r$   r$   r%   r  4  r  c                 S   r  r   rQ   r   r$   r$   r%   r  5  r  c                 S   r  r   )r  r   r$   r$   r%   r  6  r  c                 S   r  r   )rD   r   r$   r$   r%   r  7  r  c                 S   r  r   )r  r   r$   r$   r%   r  8  r  c                 S   r  r   )re   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	   )rp  r  r$   r$   r%   rq  =      z8TestJitClassOverloads.test_overloads.<locals>.<listcomp>r   )	r   r   rT   r  r  rE   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  r6   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    popr6   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                   @   r4   )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  ra   r  r   )
r	   r   r   rT   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   rV  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                   @   rn   )z?TestJitClassOverloads.test_numeric_fallback.<locals>.FloatClassc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zHTestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__init__c                 S   ri   Nr   r$   r6   r$   r$   r%   r    r7   zITestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__float__N)r)   r*   r+   r&   r  r$   r$   r$   r%   
FloatClass  r3  r  r   rQ   c                   @   rn   )z=TestJitClassOverloads.test_numeric_fallback.<locals>.IntClassc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zFTestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__init__c                 S   ri   rj   r$   r6   r$   r$   r%   r    r7   zETestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__int__N)r)   r*   r+   r&   r  r$   r$   r$   r%   IntClass  r3  r  rk   rW  rU   c                   @   rn   )z?TestJitClassOverloads.test_numeric_fallback.<locals>.IndexClassc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zHTestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__init__c                 S   ri   r   r$   r6   r$   r$   r%   	__index__  r7   zITestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__index__N)r)   r*   r+   r&   r  r$   r$   r$   r%   
IndexClass  r3  r  r         ?c                   @   r  )
zGTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClassc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zPTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__init__c                 S   ri   r  r$   r6   r$   r$   r%   r    r7   zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__float__c                 S   ri   rj   r$   r6   r$   r$   r%   r    r7   zOTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__int__c                 S   ri   r   r$   r6   r$   r$   r%   r    r7   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  rW  rb   rc   rd   re   rf   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$   rr   r$   r$   r%   r    r  z?TestJitClassOverloads.test_arithmetic_logical.<locals>.<lambda>c                 S      | |kS r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |k S r   r$   rr   r$   r$   r%   r    r  c                 S   r  r   r$   rr   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rr   r$   r$   r%   r    r  c                 S   r  r   r$   rr   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rr   r$   r$   r%   r    r  c                 S   r  r   r$   rr   r$   r$   r%   r    r  c                 S   r  r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |> S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |? S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |@ S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |B S r   r$   rr   r$   r$   r%   r    r  c                 S   s   | |A S r   r$   rr   r$   r$   r%   r    r  )r_          @)gX9v?r   )g333333*@g)\(?c                 S   s   t | d| S )Nr    )getattrr   r$   r$   r%   unwrap  ri  z=TestJitClassOverloads.test_arithmetic_logical.<locals>.unwrap)r  r  	itertoolsproductmapr	   r  r  rU   rC   assertAlmostEqualrQ   )r#   r  r  float_py_funcsint_py_funcstest_valuesr  r  r    r!   r  rK   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$   rp  r-  r0  r$   r%   rq  o  r  zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+//%***-/c                    r1  r$   r$   r2  r3  r$   r%   rq  r  r  )<<>>&|^r  )r  r  mror   r   r  r   r  r  r  r	   r  r    r  rQ   rC   )r#   ZJitIntWrapperZJitFloatWrapperZPyIntWrapperZPyFloatWrapperZPyIntUpdateWrapperZPyFloatUpdateWrapperr  r  r  r  Zpy_clsjit_clsr    r!   r  rK   r$   )r#  r  r0  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   r6   r$   r$   r%   r    r   zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__hash__c                 S   s   | j |j  d dkS )NrN  r   r   r#   or$   r$   r%   r    r%  z@TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__eq__N)r)   r*   r+   rQ   rR   r&   r  r  r$   r$   r$   r%   
HashEqTest  s
   
 rE  c                   @   r4   )z;TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTestc                 S   s   | j |j  d dkS )NrN  r   r   rC  r$   r$   r%   __ne__  r%  zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTest.__ne__N)r)   r*   r+   rF  r$   r$   r$   r%   HashEqNeTest      rG  c                 S   r  r   )hashr   r$   r$   r%   py_hash  r  z6TestJitClassOverloads.test_hash_eq_ne.<locals>.py_hashc                 S   r  r   r$   rr   r$   r$   r%   py_eq  r  z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_eqc                 S   r  r   r$   rr   r$   r$   r%   py_ne  r  z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_nec                 S   r   r   r$   )r  r$   r$   r%   identity_decorator  r7   zATestJitClassOverloads.test_hash_eq_ne.<locals>.identity_decorator))r   r   )r   rc  )rk   r   )r   r   FT)r   r   r      ir   )r  r  r	   r   rC   )r#   rE  rG  rJ  rK  rL  rM  ZcomparisonsZbase_clsZuse_jit	decoratorZ	hash_funcZeq_funcZne_funcrA  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                   @   r7  )zBTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLenc                 S   r   r   r   rs   r$   r$   r%   r&     r   zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__init__c                 S   r   r   r   r6   r$   r$   r%   r    r   zJTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__len__c                 S   r  r   r  r6   r$   r$   r%   get_bool  r  zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.get_boolN)r)   r*   r+   r&   r  rQ  r$   r$   r$   r%   NoBoolHasLen  s    rR  rt   r   r   )r   r   Zint64rQ  rC   r  )r#   rR  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                   @   rn   )zETestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLenc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.__init__c                 S   r  r   r  r6   r$   r$   r%   rQ    r  zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.get_boolN)r)   r*   r+   r&   rQ  r$   r$   r$   r%   NoBoolNoLen      rV  )r   rQ  rC   r  )r#   rV  rS  rT  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    ri  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__eq__c                 S   r  r   r   r  r$   r$   r%   r    ri  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__le__c                 S   r  r   r   r  r$   r$   r%   r     ri  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__lt__c                 S   r  r   r   r  r$   r$   r%   r  #  ri  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__ge__c                 S   r  r   r   r  r$   r$   r%   r  &  ri  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__gt__N)	r)   r*   r+   r&   r  r  r  r  r  r$   r$   r$   r%   OperatorsDefined  s    rY  c                   @   r4   )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)  rH  rZ  r    r   r   )r   r   r   rC   )
r#   rY  rZ  rF   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   rm   r#   r   r$   r$   r%   r&   I  r   zDTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__init__c                 S   s   | j |j  S r   rb  r  r$   r$   r%   
__matmul__L  ri  zFTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__matmul__c                 S   s   |j | j  S r   rb  r  r$   r$   r%   __rmatmul__O  ri  zGTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__rmatmul__c                 S   s   | j |j  | _ | S r   rb  r  r$   r$   r%   __imatmul__R  s   zGTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__imatmul__N)r)   r*   r+   r&   rd  re  rf  r$   r$   r$   r%   ArrayAtH  s
    rg  c                   @   r4   )z=TestJitClassOverloads.test_matmul_operator.<locals>.ArrayNoAtc                 S   r   r   rb  rc  r$   r$   r%   r&   W  r   zFTestJitClassOverloads.test_matmul_operator.<locals>.ArrayNoAt.__init__Nr(   r$   r$   r$   r%   	ArrayNoAtV  rH  rh  r   r   )sizerm   r  )r   rz  seedr   r   r   Zassert_allcloserm   )r#   rg  rh  rJ  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__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__radd__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rsub__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rsub__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rmul__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rmul__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rtruediv__  ri  z_TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rtruediv__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rfloordiv__  ri  z`TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rfloordiv__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rmod__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rmod__c                 S   s   |j | j  S r   r   r  r$   r$   r%   __rpow__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rpow__c                 S   s   |j | j > S r   r   r  r$   r$   r%   __rlshift__  ri  z^TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rlshift__c                 S   s   |j | j ? S r   r   r  r$   r$   r%   __rrshift__  ri  z^TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rrshift__c                 S   s   |j | j @ S r   r   r  r$   r$   r%   __rand__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rand__c                 S   s   |j | j A S r   r   r  r$   r$   r%   __rxor__  ri  z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rxor__c                 S   s   |j | j B S r   r   r  r$   r$   r%   __ror__  ri  zZTestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__ror__N)r)   r*   r+   r&   rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  r$   r$   r$   r%   rY    s    rY  c                   @   r4   )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%   rZ    rH  rZ  )r4  r9  r7  r8  r:  r5  r6  r;  r<  r=  r?  r>  )r   r   )r        @r   )r  r  ry  )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   re   rC   evalZassertTupleEqualtuple)r#   rY  rZ  Zfloat_opZint_opZ	test_typeZtest_opZ
test_valuerF   r[  r\  r]  r^  r_  r`  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                   @   rn   )zGTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHashc                 S   r5   r   r$   r6   r$   r$   r%   r&     r7   zPTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__init__c                 S   ri   )NFr$   r  r$   r$   r%   r    r7   zNTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__eq__N)r)   r*   r+   r&   r  r$   r$   r$   r%   ImplicitHash  rW  r}  )r   r   )r#   r}  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  rB  rP  rU  rX  ra  r   rl  r|  r  r$   r$   r$   r%   r    s(    .


62*cFm<+1
?Lr  __main__)2r   r  r  rz  typingrS   Zunittestcollectionsr   Z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-   r2   r3   r  r)   mainr$   r$   r$   r%   <module>   sP    ,	        t      M