o
    8ήc                     @   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& d dl'm(Z(m)Z)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)Z0e1dkre2  dS dS )    N)OrderedDict)	booleandeferred_typefloat32float64int16int32njitoptionaltypeof)errorstypes)
Dispatcher)LoweringErrorTypingError)MemInfo)	PYVERSION)jitclass)_box)JitClassType)MemoryLeakMixinTestCaseskip_if_typeguardc                   @      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$   B/tmp/pip-target-vg8gfxp4/lib/python/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   box_get_meminfoptrr   acquire)boxptrmir$   r$   r%   _get_meminfo)   s   
r4   c                   @   sj  e Zd ZdXd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.dS )Y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       r:   r   r   )r   object
class_typeinstance_typeliststructkeysvalues
isinstancer   itemsassertEquallenzip)
r#   spectest_clsall_expectedr:   clstynamesrB   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   rO   r#   rH   r$   r$   r%   test_ordereddict_specL   s   z"TestJitClass.test_ordereddict_specc                 C   s   dt fdtfg}| | d S rP   )r   r   rO   rQ   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   r7   r   r$   r8   r$   r$   r%   r&   _   r9   z:TestJitClass.test_type_annotations.<locals>.Test1.__init__N)	r)   r*   r+   int__annotations__ptListfloatr&   r$   r$   r$   r%   Test1Z   s   
 rY   r!   )r   r   r<   rO   r   ListTyper   )r#   rH   rY   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+   rT   rU   r$   r$   r$   r%   Foof   s   
 r\   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   )rT   r    r!   r#   r]   r$   r$   r%   r&   m      

zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r)   r*   r+   rX   rU   r&   r$   r$   r$   r%   Bari   s   
 rb   r    r   r!           )rI   rJ   )r   rO   r   )r#   r\   rb   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                   @   r6   )z+TestJitClass.test_spec_errors.<locals>.Testc                 S   r7   r   r$   r8   r$   r$   r%   r&   {   r9   z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r:   y       r:   z*spec values should be Numba type instancesz"spec keys should be strings, got 1)rT   r   r   r<   assertRaises	TypeErrorr   assertInstr	exceptionrE   )r#   spec1spec2r:   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                   @   r6   )z+TestJitClass.test_init_errors.<locals>.Testc                 S      dS N   r$   r8   r$   r$   r%   r&      r9   z4TestJitClass.test_init_errors.<locals>.Test.__init__Nr(   r$   r$   r$   r%   r:      re   r:   z"__init__() should return None, not)r   rf   r   r   rh   ri   rj   )r#   r:   rm   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!   rs   )r#   r    r!   rs   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&   r{   r$   r$   r$   r%   Float2AndArray   s    r|   )r   r   r   r<   )r#   rH   r|   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                   @   r6   )z+TestJitClass._make_Vector2.<locals>.Vector2c                 S      || _ || _d S r   rx   )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#   rH   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   rx   objr$   r$   r%   bar      z*TestJitClass.test_jit_class_1.<locals>.barc                    s4    dd| }| d dd}|||jfS )Nr      {         )r{   rs   )r   r   vecr|   r   r   r$   r%   foo   s   

z*TestJitClass.test_jit_class_1.<locals>.foo
   dtype   rq   )r}   r   r	   nponesr   rE   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   rv   r   r$   r$   r%   retrieve_attributes   s   zITestJitClass.test_jitclass_usage_from_python.<locals>.retrieve_attributesr   r   r   r   r   r   |   }   iM  i  r   )r}   r	   r   aranger   r4   rE   refcountdatar   box_get_dataptr_numba_type_r=   assertIsr    r!   rs   r{   )r#   r|   r   r   rs   r   obj_meminfootherother_meminfoout_xout_yout_arr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 )Nrz   c                   @   r6   )z2TestJitClass.test_jitclass_datalayout.<locals>.Fooc                 S   
   || _ d S r   rz   ry   r$   r$   r%   r&        
z;TestJitClass.test_jitclass_datalayout.<locals>.Foo.__init__Nr(   r$   r$   r$   r%   r\     r;   r\   TF)r   r   r   r<   
assertTruerz   assertFalse)r#   rH   r\   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   r~   r   )r   r   )r#   r   r   r$   r$   r%   r&     r   z<TestJitClass.test_deferred_type.<locals>.LinkedNode.__init__c                    s
    | j S r   r   r8   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<   definer=   r>   rE   r   assertIsNoner   r4   r   r   r   assertIsNotNone)	r#   	node_typerH   r   firstsecondfirst_meminfosecond_meminfo	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                   @   r6   )z-TestJitClass.test_c_structure.<locals>.Structc                 S   ru   r   )r   r   r   )r#   r   r   r   r$   r$   r%   r&   X  rw   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+   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POINTERrE   r   r   r   )r#   rH   r   str   r2   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	   rf   r   rh   ri   rj   )r#   Vectorvec_ar   rm   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   rf   rg   rE   ri   rj   )r#   r   rm   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                   @   r6   )z*TestJitClass.test_base_class.<locals>.Basec                 S   r   r   attrr8   r$   r$   r%   what     z/TestJitClass.test_base_class.<locals>.Base.whatN)r)   r*   r+   r   r$   r$   r$   r%   Base  re   r   r   c                   @   r6   )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%   r:     r;   r:   r   )r<   r   r   rE   r   )r#   r   r:   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   r7   r   r$   r8   r$   r$   r%   r&     r9   z0TestJitClass.test_globals.<locals>.Mine.__init__N)r)   r*   r+   constantr&   r$   r$   r$   r%   Mine  s    r   z-class members are not yet supported: constantr<   rf   rg   r   rE   ri   rj   )r#   r   rm   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   r8   r$   r$   r%   r]     r   z7TestJitClass.test_user_getter_setter.<locals>.Foo.valuec                 S      |d | _ d S r   r   ry   r$   r$   r%   r]        N)r)   r*   r+   r&   propertyr]   setterr$   r$   r$   r%   r\     s    
r\   r   r   i  i  c                 S   s"   | j }|| _ | j }| j}|||fS r   )r]   r   )r   rz   r   r   r   r$   r$   r%   r     s
   
z1TestJitClass.test_user_getter_setter.<locals>.barr   i6  )r   r   r<   rE   r   r]   r	   )r#   r\   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   r7   r   r$   r8   r$   r$   r%   r&     r9   z:TestJitClass.test_user_deleter_error.<locals>.Foo.__init__c                 S   ro   r   r$   r8   r$   r$   r%   r]     r   z7TestJitClass.test_user_deleter_error.<locals>.Foo.valuec                 S   r7   r   r$   r8   r$   r$   r%   r]     r   N)r)   r*   r+   r&   r   r]   deleterr$   r$   r$   r%   r\     s    
r\   zdeleter is not supported: valuer   r#   r\   rm   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   r7   r   r$   r8   r$   r$   r%   r&     r9   z<TestJitClass.test_name_shadowing_error.<locals>.Foo.__init__c                 S   r7   r   r$   r8   r$   r$   r%   my_property  r   z?TestJitClass.test_name_shadowing_error.<locals>.Foo.my_propertyc                 S   r7   r   r$   r8   r$   r$   r%   	my_method  r9   z=TestJitClass.test_name_shadowing_error.<locals>.Foo.my_methodN)r)   r*   r+   r&   r   r   r   r$   r$   r$   r%   r\     s
    
r\   r   zname shadowing: my_propertyr   zname shadowing: my_method)r<   rf   	NameErrorr   r   rE   ri   rj   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                   @   rt   )/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  r8   r$   r$   r%   run  r   3TestJitClass.test_distinct_classes.<locals>.Foo.runNr)   r*   r+   r&   r  r$   r$   r$   r%   r\         r\   c                   @   rt   )r  c                 S   r   r  r  r  r$   r$   r%   r&     r  r  c                 S   s
   | j d S r   r  r8   r$   r$   r%   r    r   r  Nr	  r$   r$   r$   r%   r\     r
  r   rq      r   r   )r   r   r<   rE   r    r  )r#   r\   FirstFoo	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                   @   r6   )z0TestJitClass.test_parameterized.<locals>.MyClassc                 S   r   r   r]   r_   r$   r$   r%   r&     r   z9TestJitClass.test_parameterized.<locals>.MyClass.__init__Nr(   r$   r$   r$   r%   MyClass  re   r  c                    s   t  dt| fg}|| S )Nr]   )r   r   )r]   clsr  r$   r%   create_my_class  s   z8TestJitClass.test_parameterized.<locals>.create_my_classr   g(@)r<   rE   r]   r   arraytesting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)r]   _value__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   )r]   r  _MyClass__valuer  r_   r$   r$   r%   r&   0  s   

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   r   r   r  r8   r$   r$   r%   private_value6  r   z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   r   r   r  r8   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  r8   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%   __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_dunderr1  )r   r   r   r<   rE   r]   r  r  r   r'  r+  r.  r  r	   rf   r   r   rh   ri   rj   AttributeErrorpy_func)r#   rH   r  r]   r2  freeze_inst_valuer3  rm   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   rq   N)annotation_usecasesr8  r   r   rE   r    r{   )r#   r8  rH   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   ro   )init docstringNr$   r8   r$   r$   r%   r&         z3TestJitClass.test_docstring.<locals>.Apple.__init__c                 S   ro   )foo method docstringNr$   r8   r$   r$   r%   r     r=  z.TestJitClass.test_docstring.<locals>.Apple.fooc                 S   ro   )aval property docstringNr$   r8   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    rB  r;  r<  r>  r?  )r   r<   rE   rA  r&   r   r@  )r#   rB  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                   @   r6   )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  re   rE  r   g?)r!   r"   r    r$   )r   r   r   r<   rE   r   r   )r#   rH   rE  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   ru   r   )r    r!   r"   rD  r$   r$   r%   r&     rw   z:TestJitClass.test_default_args.<locals>.TestClass.__init__Nr'   r(   r$   r$   r$   r%   rE    s    rE  r   r   r   r   )r!   r"   r    )r   r   r<   rE   r    r!   r"   r#   rH   rE  rG  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   rE   r    r!   r"   r   rI  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   UniTuplerf   r   UnsupportedErrorr   r-   rh   ri   rj   )r#   rH   rm   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                   @   rt   )z5TestJitClass.test_generator_method.<locals>.TestClassc                 S   r7   r   r$   r8   r$   r$   r%   r&     r9   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&   rU  r$   r$   r$   r%   rE        rE  c                 s   s     t | D ]}t|V  qd S r   rQ  )rS  rT  r$   r$   r%   expected_gen  rV  z8TestJitClass.test_generator_method.<locals>.expected_genr   )r   r<   rR  rG   rU  r   )r#   rH   rE  rX  rS  expectrM   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   r8   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#   rc  r$   r$   r%   __getitem__  r   z8TestJitClass.test_getitem.<locals>.TestClass.__getitem__Nr)   r*   r+   r&   rd  rg  r$   r$   r$   r%   rE        rE  c                     s"     } d| d< d| d< d| d< | S )Nr   r   r   r$   trE  r$   r%   create_and_set_indices  s
   z9TestJitClass.test_getitem.<locals>.create_and_set_indicesc                 S   s   | | S r   r$   )rk  nr$   r$   r%   	get_index$  r   z,TestJitClass.test_getitem.<locals>.get_indexr   r   r   r   r   r<   r	   rE   )r#   rH   rm  ro  rk  r$   rl  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                   @   r[  )z2TestJitClass.test_getitem_unbox.<locals>.TestClassc                 S   r\  r]  r^  r8   r$   r$   r%   r&   2  r`  z;TestJitClass.test_getitem_unbox.<locals>.TestClass.__init__c                 S   ra  r   r   rb  r$   r$   r%   rd  5  r  z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__setitem__c                 S   re  r   r   rf  r$   r$   r%   rg  8  r   z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__getitem__Nrh  r$   r$   r$   r%   rE  0  ri  rE  r   r   c                 S   s   d| d< | d S )N   r   r   r$   rj  r$   r$   r%   set2return1>  s   z4TestJitClass.test_getitem_unbox.<locals>.set2return1r   rr  rp  )r#   rH   rE  rk  rs  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                   @   r[  )z8TestJitClass.test_getitem_complex_key.<locals>.TestClassc                 S   r\  N)r   r   r   r^  r8   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   rT   realimagrb  r$   r$   r%   rd  O  s   zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__setitem__c                 S   s   | j t|jt|jf S r   rw  rf  r$   r$   r%   rg  R     zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__getitem__Nrh  r$   r$   r$   r%   rE  J  ri  rE  r   r   c                 S   s   | t || S r   complex)rk  rx  ry  r$   r$   r%   get_keyY  r   z6TestJitClass.test_getitem_complex_key.<locals>.get_keyc                 S   s   || t ||< d S r   r{  )rk  rx  ry  r   r$   r$   r%   set_key]     z6TestJitClass.test_getitem_complex_key.<locals>.set_keyr   r   )r   r   r<   r|  r	   rE   )r#   rH   rE  rk  r}  r~  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                   @   r[  )z6TestJitClass.test_getitem_tuple_key.<locals>.TestClassc                 S   r\  rv  r^  r8   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   rb  r$   r$   r%   rd  m  rz  zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__setitem__c                 S   s   | j |d |d f S r  r   rf  r$   r$   r%   rg  p  r`  zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__getitem__Nrh  r$   r$   r$   r%   rE  h  ri  rE     r   r   c                 S   s   | d S )Nr  r$   rj  r$   r$   r%   get11v  r   z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nr   r   r$   rk  r   r$   r$   r%   set22z  r   z2TestJitClass.test_getitem_tuple_key.<locals>.set22   r  rp  )r#   rH   rE  rk  r  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                   @   r[  )z6TestJitClass.test_getitem_slice_key.<locals>.TestClassc                 S   r\  r]  r^  r8   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%   rd    s   zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__setitem__c                 S   s   | j |j S r   )r   r  )r#   r  r$   r$   r%   rg       zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__getitem__Nrh  r$   r$   r$   r%   rE    s    rE  r   r   r   c                 S   s   | ddd S )Nr      r   r$   rj  r$   r$   r%   get5  r   z1TestJitClass.test_getitem_slice_key.<locals>.get5c                 S   s   || ddd< d S )Nr   r  r   r$   r  r$   r$   r%   set26  r  z2TestJitClass.test_getitem_slice_key.<locals>.set26r  r   )r   r   r<   rE   r	   )r#   rH   rE  rk  r  r  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   r  letterr$   r$   r%   r    s    c                 S   s   g | ]
}|  d  tfqS r  )upperr   r  r$   r$   r%   r    r  c                   @   r[  )zJTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabelc                 S   
   d| _ d S )Ng      $@)
aaaaaaaaaar8   r$   r$   r%   r&     r   zSTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.__init__c                 S   s   t | j| j| _d S r   )randomgaussr  
bbbbbbbbbbr8   r$   r$   r%   meth1  r`  zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )r  r8   r$   r$   r%   meth2  r  zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r)   r*   r+   r&   r  r  r$   r$   r$   r%   TruncatedLabel  ri  r  )rR  extendr   r<   r  )r#   alphabetrH   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                   @   r6   )z5TestJitClass.test_pickling.<locals>.PickleTestSubjectc                 S   r7   r   r$   r8   r$   r$   r%   r&     r9   z>TestJitClass.test_pickling.<locals>.PickleTestSubject.__init__Nr(   r$   r$   r$   r%   PickleTestSubject  re   r  )
r   r<   r   r   r   ClassInstanceTypepickledumpsr   loads)r#   r  r2  ty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   r{   r    r#   r!   r$   r$   r%   increase     z8TestJitClass.test_static_methods.<locals>.Test1.increasec                 S      | | S r   r$   r   r$   r$   r%   r{     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  staticmethodr{   r  r$   r$   r$   r%   rY     s    
rY   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%   r{     r   z3TestJitClass.test_static_methods.<locals>.Test2.addN)r)   r*   r+   r&   r  r  r{   r$   r$   r$   r%   Test2  s
    r  r   r   r   r   r  r   y               @y              ?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   r7   r   r$   r8   r$   r$   r%   r&     r9   z8TestJitClass.test_static_methods.<locals>.Test3.__init__c                 S   r7   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  r8   Test3r$   r%   call_static  r  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   r{   r   r  assertNotEqualrE   r  rf   r4  rh   ri   rj   rg   r   r   r  )r#   rY   r  t1t2rm   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   r  Nr   r  r8   r$   r$   r%   r&   $  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test1.__init__Nra   r$   r$   r$   r%   rY         
 rY   )rH   c                   @   r6   )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test2c                 S   r  r  r  r8   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   r  r  r  r8   r$   r$   r%   r&   7  r   zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__Nra   r$   r$   r$   r%   r  3  r  r  c                   @   r6   )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test4c                 S   r  r  r  r8   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   assertDictEqualr=   r@   )r#   rH   rY   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   r  r  r  r8   r$   r$   r%   r&   L  r   zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__Nra   r$   r$   r$   r%   AnnotatedTestI  s   
 r  c                   @   r6   )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   r  r  r  r8   r$   r$   r%   r&   U  r   zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr(   r$   r$   r$   r%   UnannotatedTestS  re   r  r  )r#   rH   r  JitTest1r  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                   @   r[  )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  r8   r$   r$   r%   getValued  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   r   r   r  r8   r$   r$   r%   getValueIncrg  r   z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r)   r*   r+   r&   r  r  r$   r$   r$   r%   r\   _  ri  r\   c                   @   rt   )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  r8   r$   r$   r%   r  o  r   z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.getValueN)r)   r*   r+   r&   r  r$   r$   r$   r%   rb   j  rW  rb   c                    sD   t |  fr |  }t | r|  | dfS |  | dfS dS )Nr\   rb   zno match)rC   r  r  )r   r    rb   r\   r$   r%   test_jitclass_isinstancer  s   
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancer   r   r   )r   r   r   r<   r	   r   r   rE   )r#   rH   r  pyfunccfuncr$   r  r%   r  \  s   

z%TestJitClass.test_jitclass_isinstance)NNN)/r)   r*   r+   rO   rR   rS   r[   rd   rn   rr   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r7  r   r:  rC  rH  rJ  rL  rP  rZ  rq  ru  r  r  r  r  r  r  r  r  r  r$   r$   r$   r%   r5   0   sZ    
6>&X
 %S)r5   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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  r8   r$   r$   r%   r&     r  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    clearr8   r$   r$   r%   r    r  z"TestJitClassOverloads.PyList.clearc                 C   s   t | jd S rp   rF   r    r8   r$   r$   r%   __abs__  r  z$TestJitClassOverloads.PyList.__abs__c                 C   s   t | jd dkS )Nr   r   r  r8   r$   r$   r%   __bool__  s   z%TestJitClassOverloads.PyList.__bool__c                 C   s    t d}| jr|| jd 7 }|S )Nr   r   )r|  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#   rT  r$   r$   r%   __int__  r  z$TestJitClassOverloads.PyList.__int__c                 C   s   t | jd S r   r  r8   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  r8   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__  r  z@TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__eq__c                 S   r   r   r  r8   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    r  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__eq__c                 S   r   r   r  r8   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__  r  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__ge__c                 S      | j |j kS r   r  r  r$   r$   r%   __gt__  r  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__gt__c                 S      | j |j kS r   r  r  r$   r$   r%   __le__  r  zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__le__c                 S      | j |j k S r   r  r  r$   r$   r%   __lt__  r  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__  r  zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__neg__c                    s    | j 
 S r   r  r  r  r$   r%   __pos__  r  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)rO  )rE   type)r#   r   r   rO  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   r{  r  r$   r$   r%   r    r  c                 S   r  r   )r  r  r$   r$   r%   r    r  c                 S   s   d| v S r  r$   r  r$   r$   r%   r    r  c                 S   s
   |  dS r  )r  r  r$   r$   r%   r    s   
 c                 S   r  r   rX   r  r$   r$   r%   r    r  c                 S   r  r   )r  r  r$   r$   r%   r    r  c                 S   r  r   rT   r  r$   r$   r%   r    r  c                 S   r  r   )r  r  r$   r$   r%   r     r  c                 S   r  r   )rF   r  r$   r$   r%   r  !  r  c                 S   r  r   )r  r  r$   r$   r%   r  "  r  c                 S   r  r   )ri   r  r$   r$   r%   r  #  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	   )r  r  r$   r$   r%   r  '      z8TestJitClassOverloads.test_overloads.<locals>.<listcomp>r   )	r   r   rW   r  r  rG   r  r  r  )r#   JitListpy_funcs	jit_funcspy_list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_bC     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&   J  r   zCTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__init__c                 S   s   t | jd S )Nr   r  r8   r$   r$   r%   r  M  r  zBTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__len__c                 S   r  r   r  r  r$   r$   r%   r  P  r  zATestJitClassOverloads.test_bool_fallback.<locals>.LenClass.appendc                 S   s   | j d d S r  )r    popr8   r$   r$   r%   r)  S  r  z>TestJitClassOverloads.test_bool_fallback.<locals>.LenClass.popN)r)   r*   r+   r&   r  r  r)  r$   r$   r$   r%   LenClassH  
    r*  )r   r   r   r   r!   c                   @   r6   )z=TestJitClassOverloads.test_bool_fallback.<locals>.NormalClassc                 S   r   r   )r!   r  r$   r$   r%   r&   d  r   zFTestJitClassOverloads.test_bool_fallback.<locals>.NormalClass.__init__Nr(   r$   r$   r$   r%   NormalClassb  re   r,  r   )
r	   r   r   rW   r  r   r  r   r)  r   )r#   r&  jit_br*  r   r,  r$   r$   r%   test_bool_fallbackA  s$   
z(TestJitClassOverloads.test_bool_fallbackc                 C   s(  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kr~| ||td | ||td | ||d | ||d | ||d | ||d n| 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 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 sBw   Y  | d
t|	j tg G dd d}| }| ||td	 | ||td	 | ||d	 | ||d	 | ||d | ||d d S )Nc                 S   r  r   r{  r  r$   r$   r%   py_cl  r'  z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_cc                 S   r  r   r  r  r$   r$   r%   r#  o  r'  z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_fc                 S   r  r   r  r  r$   r$   r%   py_ir  r'  z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_ic                   @   rt   )z?TestJitClassOverloads.test_numeric_fallback.<locals>.FloatClassc                 S   r7   r   r$   r8   r$   r$   r%   r&   {  r9   zHTestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__init__c                 S   ro   Nr   r$   r8   r$   r$   r%   r  ~  r9   zITestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__float__N)r)   r*   r+   r&   r  r$   r$   r$   r%   
FloatClassy  rW  r2  r   rT   c                   @   rt   )z=TestJitClassOverloads.test_numeric_fallback.<locals>.IntClassc                 S   r7   r   r$   r8   r$   r$   r%   r&     r9   zFTestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__init__c                 S   ro   rp   r$   r8   r$   r$   r%   r    r9   zETestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__int__N)r)   r*   r+   r&   r  r$   r$   r$   r%   IntClass  rW  r3  rq   r|  rX   c                   @   rt   )z?TestJitClassOverloads.test_numeric_fallback.<locals>.IndexClassc                 S   r7   r   r$   r8   r$   r$   r%   r&     r9   zHTestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__init__c                 S   ro   r   r$   r8   r$   r$   r%   	__index__  r9   zITestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__index__N)r)   r*   r+   r&   r4  r$   r$   r$   r%   
IndexClass  rW  r5  )r   r  r   g      ?c                   @   r(  )
zGTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClassc                 S   r7   r   r$   r8   r$   r$   r%   r&     r9   zPTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__init__c                 S   ro   r1  r$   r8   r$   r$   r%   r    r9   zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__float__c                 S   ro   rp   r$   r8   r$   r$   r%   r    r9   zOTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__int__c                 S   ro   r   r$   r8   r$   r$   r%   r4    r9   zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__index__N)r)   r*   r+   r&   r  r  r4  r$   r$   r$   r%   FloatIntIndexClass  r+  r6  )r	   r   r  r|  rf   rg   rh   ri   rj   r   r   )r#   r/  r#  r0  jit_cr$  jit_ir2  r   er3  r5  r6  r$   r$   r%   test_numeric_fallbackk  s   












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$   rx   r$   r$   r%   r    r  z?TestJitClassOverloads.test_arithmetic_logical.<locals>.<lambda>c                 S      | |kS r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |kS r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |k S r   r$   rx   r$   r$   r%   r    r  c                 S   r  r   r$   rx   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rx   r$   r$   r%   r    r  c                 S   r  r   r$   rx   r$   r$   r%   r    r  c                 S   s   | | S r   r$   rx   r$   r$   r%   r    r  c                 S   r;  r   r$   rx   r$   r$   r%   r    r  c                 S   r<  r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |> S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |? S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |@ S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |B S r   r$   rx   r$   r$   r%   r    r  c                 S   s   | |A S r   r$   rx   r$   r$   r%   r    r  )rc   g       @)gX9v?r   )g333333*@g)\(?c                 S   s   t | d| S )Nr    )getattrr  r$   r$   r%   unwrap  r  z=TestJitClassOverloads.test_arithmetic_logical.<locals>.unwrap)r  r  	itertoolsproductmapr	   r5  r  rX   rE   assertAlmostEqualrT   )r#   r  r  float_py_funcsint_py_funcstest_valuesr?  r$  r    r!   r#  rN   jit_x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&   3  r   z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__init__c                    r  r   r  r  JitIntUpdateWrapperr$   r%   __ilshift__6  r  z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ilshift__c                    r  r   r  r  rK  r$   r%   __irshift__9  r  z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__irshift__c                    r  r   r  r  rK  r$   r%   __iand__<  r  z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__iand__c                    r  r   r  r  rK  r$   r%   __ior__?  r  zZTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ior__c                    r  r   r  r  rK  r$   r%   __ixor__B  r  z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ixor__N)	r)   r*   r+   r&   rM  rN  rO  rP  rQ  r$   rK  r$   r%   rL  1  s    rL  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&   H  r   z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__init__c                    s    | j d|j   S NgX9v@r  r  JitFloatUpdateWrapperr$   r%   __iadd__K     z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__iadd__c                    s    | j d |j  S rR  r  r  rS  r$   r%   __ifloordiv__N  rV  zbTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ifloordiv__c                    s    | j |j d  S r   r  r  rS  r$   r%   __imod__Q  rV  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imod__c                    s    | j |j  d S r   r  r  rS  r$   r%   __imul__T  rV  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imul__c                    s    | j |j  d S r   r  r  rS  r$   r%   __ipow__W  rV  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ipow__c                    s    | j d|j   S r1  r  r  rS  r$   r%   __isub__Z  rV  z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__isub__c                    s    | j d |j  S r   r  r  rS  r$   r%   __itruediv__]  rV  zaTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__itruediv__N)r)   r*   r+   r&   rU  rW  rX  rY  rZ  r[  r\  r$   rS  r$   r%   rT  E  s    rT  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_funcc  s   
zNTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.get_update_funcc                       g | ]} |qS r$   r$   r  r^  ra  r$   r%   r  m  r  zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+z//%*z**-/c                    rb  r$   r$   rc  rd  r$   r%   r  p  r  )z<<z>>&|^r=  )r  r  mror   r   r  r   r@  rA  rB  r	   r5  r    rC  rT   rE   )r#   JitIntWrapperJitFloatWrapperPyIntWrapperPyFloatWrapperPyIntUpdateWrapperPyFloatUpdateWrapperrD  rE  rF  r$  py_clsjit_clsr    r!   r#  rN   r$   )rT  rL  ra  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  r8   r$   r$   r%   r    r   zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__hash__c                 S   s   | j |j  d dkS )Nrr  r   r  r#   or$   r$   r%   r    rV  z@TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__eq__N)r)   r*   r+   rT   rU   r&   r  r  r$   r$   r$   r%   
HashEqTest  s
   
 ry  c                   @   r6   )z;TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTestc                 S   s   | j |j  d dkS )Nrr  r   r  rw  r$   r$   r%   __ne__  rV  zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTest.__ne__N)r)   r*   r+   rz  r$   r$   r$   r%   HashEqNeTest      r{  c                 S   r  r   )hashr  r$   r$   r%   py_hash  r'  z6TestJitClassOverloads.test_hash_eq_ne.<locals>.py_hashc                 S   r;  r   r$   rx   r$   r$   r%   py_eq  r'  z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_eqc                 S   r<  r   r$   rx   r$   r$   r%   py_ne  r'  z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_nec                 S   r   r   r$   )r  r$   r$   r%   identity_decorator  r9   zATestJitClassOverloads.test_hash_eq_ne.<locals>.identity_decorator))r   r   )r   r  )rq   r   )r   r   FT)r   r   r      ir   )r@  rA  r	   r   rE   )r#   ry  r{  r~  r  r  r  comparisonsbase_clsuse_jit	decorator	hash_funceq_funcne_funcru  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                   @   r[  )zBTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLenc                 S   r   r   r   ry   r$   r$   r%   r&     r   zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__init__c                 S   r   r   r   r8   r$   r$   r%   r    r   zJTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__len__c                 S   r  r   r  r8   r$   r$   r%   get_bool  r'  zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.get_boolN)r)   r*   r+   r&   r  r  r$   r$   r$   r%   NoBoolHasLen  s    r  rz   r   r   )r   r   int64r  rE   r  )r#   r  py_classjitted_classpy_class_0_boolpy_class_2_booljitted_class_0_bool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                   @   rt   )zETestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLenc                 S   r7   r   r$   r8   r$   r$   r%   r&     r9   zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.__init__c                 S   r  r   r  r8   r$   r$   r%   r    r'  zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.get_boolN)r)   r*   r+   r&   r  r$   r$   r$   r%   NoBoolNoLen       r  )r   r  rE   r  )r#   r  r  r  py_class_bool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    r  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__eq__c                 S   r  r   r  r  r$   r$   r%   r    r  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__le__c                 S   r  r   r  r  r$   r$   r%   r    r  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__lt__c                 S   r  r   r  r  r$   r$   r%   r  !  r  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__ge__c                 S   r  r   r  r  r$   r$   r%   r   $  r  zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__gt__N)	r)   r*   r+   r&   r  r  r  r  r   r$   r$   r$   r%   OperatorsDefined  s    r  c                   @   r6   )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'  r|  r  r    r   r   )r   r   r   rE   )
r#   r  r  rH   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   s2   G dd d}t g |}| }| ||k d S )Nc                   @   rt   )zGTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHashc                 S   r7   r   r$   r8   r$   r$   r%   r&   I  r9   zPTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__init__c                 S   ro   )NFr$   r  r$   r$   r%   r  L  r9   zNTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__eq__N)r)   r*   r+   r&   r  r$   r$   r$   r%   ImplicitHashH  r  r  )r   r   )r#   r  jittedinstancer$   r$   r%   test_implicit_hash_compilesD  s   z1TestJitClassOverloads.test_implicit_hash_compilesr   )r)   r*   r+   r  r  r  r  r  r%  r.  r:  rJ  rv  r  r  r  r  r  r$   r$   r$   r%   r    s"    .


62*wFm<+1r  __main__)3r   r@  r  r  typingrV   unittestcollectionsr   numpyr   numbar   r   r   r   r   r   r	   r
   r   
numba.corer   r   numba.core.dispatcherr   numba.core.errorsr   r   numba.core.runtime.nrtr   numba.core.utilsr   numba.experimentalr   numba.experimental.jitclassr    numba.experimental.jitclass.baser   numba.tests.supportr   r   r   r<   r   r-   r4   r5   r  r)   mainr$   r$   r$   r%   <module>   sN    ,	        ^     T