U
    9%e                     @   sN  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rJe1  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                   @   s   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#   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_jitclasses.py__init__   s    zTestClass1.__init__N)r   __name__
__module____qualname__r%   r#   r#   r#   r$   r      s   r   c                   @   s   e Zd ZdddddZdS )
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__N)r   r&   r#   r#   r#   r$   r*       s   r*   c                 C   s   t | }t|}|  |S r   )r   Zbox_get_meminfoptrr   acquire)boxptrmir#   r#   r$   _get_meminfo)   s    
r0   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 kr$t |G dd dt}|}|jj}t|j }t|j }|d krht|t	rd|
 }n|}|d k	stt| t|t| tt|||D ]0\}}	| |d |	d  | |d |	d  qd S )Nc                   @   s   e Zd Zdd ZdS )z&TestJitClass._check_spec.<locals>.Testc                 S   s   d S r   r#   r"   r#   r#   r$   r%   7   s    z/TestJitClass._check_spec.<locals>.Test.__init__Nr&   r#   r#   r#   r$   Test4   s   r3   r   r   )r   object
class_typeinstance_typeliststructkeysvalues
isinstancer   itemsAssertionErrorassertEquallenzip)
r"   spectest_clsall_expectedr3   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   rG   r"   rA   r#   r#   r$   test_ordereddict_specL   s    z"TestJitClass.test_ordereddict_specc                 C   s   dt fdtfg}| | d S rH   )r   r   rG   rI   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   s   d S r   r#   r2   r#   r#   r$   r%   _   s    z:TestJitClass.test_type_annotations.<locals>.Test1.__init__N)	r'   r(   r)   int__annotations__ptListfloatr%   r#   r#   r#   r$   Test1Z   s   
rQ   r    )r   r   r4   rG   r   ZListTyper   )r"   rA   rQ   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)   rL   rM   r#   r#   r#   r$   Foof   s   
rS   c                   @   s&   e Zd ZU eed< eddddZdS )z:TestJitClass.test_type_annotation_inheritance.<locals>.Barr    N)valuereturnc                 S   s   t || _|| _d S r   )rL   r   r    r"   rT   r#   r#   r$   r%   m   s    
zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r'   r(   r)   rP   rM   r%   r#   r#   r#   r$   Bari   s   
rX   r   r   r            )rB   rC   )r   rG   r   )r"   rS   rX   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 5 Q R X | dt|j	 | t}t|| W 5 Q R X | 
t|j	d d S )Nr   r    r   c                   @   s   e Zd Zdd ZdS )z+TestJitClass.test_spec_errors.<locals>.Testc                 S   s   d S r   r#   r2   r#   r#   r$   r%   {   s    z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr&   r#   r#   r#   r$   r3   y   s   r3   z*spec values should be Numba type instancesz"spec keys should be strings, got 1)rL   r   r   r4   assertRaises	TypeErrorr   assertInstr	exceptionr>   )r"   Zspec1Zspec2r3   raisesr#   r#   r$   test_spec_errorsu   s    zTestJitClass.test_spec_errorsc              	   C   sJ   t g G dd d}| tj}|  W 5 Q R X | dt|j d S )Nc                   @   s   e Zd Zdd ZdS )z+TestJitClass.test_init_errors.<locals>.Testc                 S   s   dS N   r#   r2   r#   r#   r$   r%      s    z4TestJitClass.test_init_errors.<locals>.Test.__init__Nr&   r#   r#   r#   r$   r3      s   r3   z"__init__() should return None, not)r   r[   r   r   r]   r^   r_   )r"   r3   r`   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                   @   s   e Zd Zdd Zdd ZdS )z9TestJitClass._make_Float2AndArray.<locals>.Float2AndArrayc                 S   s   || _ || _|| _d S r   r   r    re   )r"   r   r    re   r#   r#   r$   r%      s    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%   rj   r#   r#   r#   r$   Float2AndArray   s   rk   )r   r   r   r4   )r"   rA   rk   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                   @   s   e Zd Zdd ZdS )z+TestJitClass._make_Vector2.<locals>.Vector2c                 S   s   || _ || _d S r   rg   )r"   r   r    r#   r#   r$   r%      s    z4TestJitClass._make_Vector2.<locals>.Vector2.__init__Nr&   r#   r#   r#   r$   Vector2   s   rm   )r   r   r   r4   )r"   rA   rm   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   rg   objr#   r#   r$   bar   s    z*TestJitClass.test_jit_class_1.<locals>.barc                    s4    dd| }| d dd}|||jfS )Nr      {         )rj   re   )r   rp   vecrk   rm   rq   r#   r$   foo   s    

z*TestJitClass.test_jit_class_1.<locals>.foo
   Zdtype   rc   )rl   rn   r	   npZonesr   r>   assertPreciseEqual)r"   rx   Zinpr   bcr#   rw   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   | S r   r#   ro   r#   r#   r$   identity   s    z>TestJitClass.test_jitclass_usage_from_python.<locals>.identityc                 S   s   | j | j| jfS r   rf   ro   r#   r#   r$   retrieve_attributes   s    zITestJitClass.test_jitclass_usage_from_python.<locals>.retrieve_attributesry   rz   r   rr   ru   rs   |   }   iM  i  r   )rl   r	   r|   aranger   r0   r>   refcountdatar   box_get_dataptrZ_numba_type_r5   assertIsr   r    re   rj   )r"   rk   r   r   re   rp   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 )Nri   c                   @   s   e Zd Zdd ZdS )z2TestJitClass.test_jitclass_datalayout.<locals>.Fooc                 S   s
   || _ d S r   ri   rh   r#   r#   r$   r%     s    z;TestJitClass.test_jitclass_datalayout.<locals>.Foo.__init__Nr&   r#   r#   r#   r$   rS     s   rS   TF)r   r   r   r4   
assertTrueri   assertFalse)r"   rA   rS   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   s   | j S r   r   )noder#   r#   r$   get_data  s    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   s   || _ || _d S r   )r   r   )r"   r   r   r#   r#   r$   r%     s    z<TestJitClass.test_deferred_type.<locals>.LinkedNode.__init__c                    s
    | j S r   r   r2   r   r#   r$   get_next_data#  s    zATestJitClass.test_deferred_type.<locals>.LinkedNode.get_next_datac                 S   s    | }|j d k	r|j }q||_ 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   rs   A  rt   rr   7  i  )r   r   r   r
   r	   r   r4   Zdefiner5   r6   r>   r   ZassertIsNoner   r0   r   r   r   ZassertIsNotNone)	r"   Z	node_typerA   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                   @   s   e Zd Zdd ZdS )z-TestJitClass.test_c_structure.<locals>.Structc                 S   s   || _ || _|| _d S r   )r   r~   r   )r"   r   r~   r   r#   r#   r$   r%   X  s    z6TestJitClass.test_c_structure.<locals>.Struct.__init__Nr&   r#   r#   r#   r$   StructU  s   r   iͫ     o!	@c                   @   s(   e Zd ZdejfdejfdejfgZdS )z.TestJitClass.test_c_structure.<locals>.CStructr   r~   r   N)r'   r(   r)   ctypesZc_int32Zc_int16Zc_doubleZ_fields_r#   r#   r#   r$   CStruct_  s   r   r   )r   r   r   r   r   r4   r   Z	StructureZc_void_pr   r   castZPOINTERr>   r   r~   r   )r"   rA   r   str   r.   Zcstructr#   r#   r$   test_c_structureO  s    zTestJitClass.test_c_structurec              	   C   sT   |   }|dd}tdd }| t}||| W 5 Q R X | dt|j d S )Nr   rr   c                 S   s   | |kS r   r#   r   r~   r#   r#   r$   do_isp  s    z#TestJitClass.test_is.<locals>.do_iszno default `is` implementation)rn   r	   r[   r   r]   r^   r_   )r"   ZVectorZvec_ar   r`   r#   r#   r$   test_isl  s    

zTestJitClass.test_isc                 C   s"   |   }|dd}| || d S Nr   rr   )rn   assertIsInstance)r"   rm   rv   r#   r#   r$   test_isinstancey  s    
zTestJitClass.test_isinstancec              	   C   sD   |   }| t}G dd d|}W 5 Q R X | 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)rn   r[   r\   r>   r^   r_   )r"   rm   r`   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                   @   s   e Zd Zdd ZdS )z*TestJitClass.test_base_class.<locals>.Basec                 S   s   | j S r   attrr2   r#   r#   r$   what  s    z/TestJitClass.test_base_class.<locals>.Base.whatN)r'   r(   r)   r   r#   r#   r#   r$   Base  s   r   r   c                   @   s   e Zd Zdd ZdS )z*TestJitClass.test_base_class.<locals>.Testc                 S   s
   || _ d S r   r   r"   r   r#   r#   r$   r%     s    z3TestJitClass.test_base_class.<locals>.Test.__init__Nr&   r#   r#   r#   r$   r3     s   r3   rs   )r4   r   r   r>   r   )r"   r   r3   rp   r#   r#   r$   test_base_class  s
    zTestJitClass.test_base_classc              	   C   sD   G dd dt }| t}t| W 5 Q R X | t|jd d S )Nc                   @   s   e Zd ZdZdd ZdS )z'TestJitClass.test_globals.<locals>.Miners   c                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    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r4   r[   r\   r   r>   r^   r_   )r"   r   r`   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                   @   s.   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   s
   || _ d S r   r   r   r#   r#   r$   r%     s    z:TestJitClass.test_user_getter_setter.<locals>.Foo.__init__c                 S   s
   | j d S Nr   r   r2   r#   r#   r$   rT     s    z7TestJitClass.test_user_getter_setter.<locals>.Foo.valuec                 S   s   |d | _ d S r   r   rh   r#   r#   r$   rT     s    N)r'   r(   r)   r%   propertyrT   setterr#   r#   r#   r$   rS     s
   
rS   rs   r   i  i  c                 S   s"   | j }|| _ | j }| j}|||fS r   )rT   r   )rx   ri   r   r~   r   r#   r#   r$   rq     s
    z1TestJitClass.test_user_getter_setter.<locals>.barr   i6  )r   r   r4   r>   r   rT   r	   )r"   rS   rx   rq   r   r~   r   r#   r#   r$   test_user_getter_setter  s    
z$TestJitClass.test_user_getter_setterc              	   C   sD   G dd dt }| t}t| W 5 Q R X | t|jd d S )Nc                   @   s.   e Zd Zdd Zedd Zejdd ZdS )z1TestJitClass.test_user_deleter_error.<locals>.Fooc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    z:TestJitClass.test_user_deleter_error.<locals>.Foo.__init__c                 S   s   dS r   r#   r2   r#   r#   r$   rT     s    z7TestJitClass.test_user_deleter_error.<locals>.Foo.valuec                 S   s   d S r   r#   r2   r#   r#   r$   rT     s    N)r'   r(   r)   r%   r   rT   deleterr#   r#   r#   r$   rS     s
   
rS   zdeleter is not supported: valuer   r"   rS   r`   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 5 Q R X | t|jd | t}t|dtfg W 5 Q R X | 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   s   d S r   r#   r2   r#   r#   r$   r%     s    z<TestJitClass.test_name_shadowing_error.<locals>.Foo.__init__c                 S   s   d S r   r#   r2   r#   r#   r$   my_property  s    z?TestJitClass.test_name_shadowing_error.<locals>.Foo.my_propertyc                 S   s   d S r   r#   r2   r#   r#   r$   	my_method  s    z=TestJitClass.test_name_shadowing_error.<locals>.Foo.my_methodN)r'   r(   r)   r%   r   r   r   r#   r#   r#   r$   rS     s   
rS   r   zname shadowing: my_propertyr   zname shadowing: my_method)r4   r[   	NameErrorr   r   r>   r^   r_   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                   @   s   e Zd Zdd Zdd ZdS )/TestJitClass.test_distinct_classes.<locals>.Fooc                 S   s   |d | _ d S Nrr   r   r"   r   r#   r#   r$   r%     s    8TestJitClass.test_distinct_classes.<locals>.Foo.__init__c                 S   s
   | j d S r   r   r2   r#   r#   r$   run  s    3TestJitClass.test_distinct_classes.<locals>.Foo.runNr'   r(   r)   r%   r   r#   r#   r#   r$   rS     s   rS   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 S   s   |d | _ d S r   r   r   r#   r#   r$   r%     s    r   c                 S   s
   | j d S r   r   r2   r#   r#   r$   r     s    r   Nr   r#   r#   r#   r$   rS     s   r   rc      rt   rr   )r   r   r4   r>   r   r   )r"   rS   ZFirstFooZ	SecondFoorx   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                   @   s   e Zd Zdd ZdS )z0TestJitClass.test_parameterized.<locals>.MyClassc                 S   s
   || _ d S r   rT   rV   r#   r#   r$   r%     s    z9TestJitClass.test_parameterized.<locals>.MyClass.__init__Nr&   r#   r#   r#   r$   MyClass  s   r   c                    s   t  dt| fg}|| S )NrT   )r   r   )rT   clsr   r#   r$   create_my_class  s    z8TestJitClass.test_parameterized.<locals>.create_my_classrs   g(@)r4   r>   rT   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 5 Q R X | dt|j | t}|| W 5 Q R X | dt|j d S )N)rT   _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 )Nrr   r   )rT   r   _MyClass__valuer   rV   r#   r#   r$   r%   0  s    

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   s   | j S r   r   r2   r#   r#   r$   private_value6  s    z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   s   | j S r   r   r2   r#   r#   r$   _inner_value:  s    z?TestJitClass.test_protected_attrs.<locals>.MyClass._inner_valuec                 S   s
   || _ d S r   r   r"   vr#   r#   r$   r   >  s    c                 S   s   | j S r   r   r2   r#   r#   r$   __private_valueB  s    zBTestJitClass.test_protected_attrs.<locals>.MyClass.__private_valuec                 S   s
   || _ d S r   r   r   r#   r#   r$   r   F  s    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   s
   | j | S r   r   r"   factorr#   r#   r$   _protected_methodO  s    zDTestJitClass.test_protected_attrs.<locals>.MyClass._protected_methodc                 S   s
   | j | S r   r   r   r#   r#   r$   Z__private_methodR  s    zCTestJitClass.test_protected_attrs.<locals>.MyClass.__private_methodc                 S   s
   |  |S r   )_MyClass__private_methodr   r#   r#   r$   check_private_methodU  s    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   rs   rr   r   r   rt   d   e   c                 S   s   | j S r   )_TestJitClass__value)instr#   r#   r$   access_dundero  s    z8TestJitClass.test_protected_attrs.<locals>.access_dunderr   )r   r   r   r4   r>   rT   r   r   r   r   r   r   r   r	   r[   r   r   r]   r^   r_   AttributeErrorpy_func)r"   rA   r   rT   r   Zfreeze_inst_valuer   r`   r#   r#   r$   test_protected_attrs%  s>    *
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   rr   rc   N)Zannotation_usecasesr   r   r   r>   r   rj   )r"   r   rA   r   rp   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   s   dS )init docstringNr#   r2   r#   r#   r$   r%     s    z3TestJitClass.test_docstring.<locals>.Apple.__init__c                 S   s   dS )foo method docstringNr#   r2   r#   r#   r$   rx     s    z.TestJitClass.test_docstring.<locals>.Apple.fooc                 S   s   dS )aval property docstringNr#   r2   r#   r#   r$   aval  s    z/TestJitClass.test_docstring.<locals>.Apple.avalN)r'   r(   r)   __doc__r%   rx   r   r   r#   r#   r#   r$   Apple  s
   r   r   r   r   r   )r   r4   r>   r   r%   rx   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}|f ddi|}| |j||  | |j| d S )	Nr   r~   c                   @   s   e Zd Zdd ZdS )z+TestJitClass.test_kwargs.<locals>.TestClassc                 S   s   || | _ || _d S r   r   r"   r   r    r!   r#   r#   r$   r%     s    
z4TestJitClass.test_kwargs.<locals>.TestClass.__init__Nr&   r#   r#   r#   r$   	TestClass  s   r   rr   g?)r    r!   r   )r   r   r   r4   r>   r   r~   )r"   rA   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   s   || _ || _|| _d S r   )r   r    r!   r   r#   r#   r$   r%     s    z:TestJitClass.test_default_args.<locals>.TestClass.__init__N)r   r&   r#   r#   r#   r$   r     s   r   r   rr   rt   r   )r    r!   r   )r   r   r4   r>   r   r    r!   r"   rA   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   rr   rt   r   r   ru   *   r   )r    r   r   r!   )r    r   r   )r    r   )r   r   r   r>   r   r    r!   r   r   r#   r#   r$   test_default_args_keyonly  s4    

z&TestJitClass.test_default_args_keyonlyc              	   C   sf   dt fdt fdt fdtt dfdt fg}| tj}tt| W 5 Q R X d}| |t	|j
 d S )Nr   r    r!   r+   rr   r   z(VAR_POSITIONAL argument type unsupported)r   r   ZUniTupler[   r   ZUnsupportedErrorr   r*   r]   r^   r_   )r"   rA   r`   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 ]0}t||| |D ]\}}| || qFq,d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z5TestJitClass.test_generator_method.<locals>.TestClassc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    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  s    z9TestJitClass.test_generator_method.<locals>.TestClass.genN)r'   r(   r)   r%   r
  r#   r#   r#   r$   r     s   r   c                 s   s   t | D ]}t|V  qd S r   r  )r  r	  r#   r#   r$   expected_gen  s    z8TestJitClass.test_generator_method.<locals>.expected_genry   )r   r4   r  r@   r
  r}   )r"   rA   r   r  r  expectrE   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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z,TestJitClass.test_getitem.<locals>.TestClassc                 S   s   t jdt jd| _d S Nry   rz   r|   Zzerosr   r   r2   r#   r#   r$   r%     s    z5TestJitClass.test_getitem.<locals>.TestClass.__init__c                 S   s   || j |< d S r   r   r"   keyr   r#   r#   r$   __setitem__  s    z8TestJitClass.test_getitem.<locals>.TestClass.__setitem__c                 S   s
   | j | S r   r   r"   r  r#   r#   r$   __getitem__  s    z8TestJitClass.test_getitem.<locals>.TestClass.__getitem__Nr'   r(   r)   r%   r  r  r#   r#   r#   r$   r     s   r   c                     s"     } d| d< d| d< d| d< | S )Nr   rr   rt   r#   tr   r#   r$   create_and_set_indices  s
    z9TestJitClass.test_getitem.<locals>.create_and_set_indicesc                 S   s   | | S r   r#   )r  nr#   r#   r$   	get_index$  s    z,TestJitClass.test_getitem.<locals>.get_indexr   rr   rt   r   r   r4   r	   r>   )r"   rA   r  r  r  r#   r  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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z2TestJitClass.test_getitem_unbox.<locals>.TestClassc                 S   s   t jdt jd| _d S r  r  r2   r#   r#   r$   r%   2  s    z;TestJitClass.test_getitem_unbox.<locals>.TestClass.__init__c                 S   s   || j |< d S r   r   r  r#   r#   r$   r  5  s    z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__setitem__c                 S   s
   | j | S r   r   r  r#   r#   r$   r  8  s    z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__getitem__Nr  r#   r#   r#   r$   r   0  s   r   ry   r   c                 S   s   d| d< | d S )N   rr   r   r#   r  r#   r#   r$   set2return1>  s    z4TestJitClass.test_getitem_unbox.<locals>.set2return1rr   r  r  )r"   rA   r   r  r  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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z8TestJitClass.test_getitem_complex_key.<locals>.TestClassc                 S   s   t jdt jd| _d S N)ry   ry   rz   r  r2   r#   r#   r$   r%   L  s    zATestJitClass.test_getitem_complex_key.<locals>.TestClass.__init__c                 S   s   || j t|jt|jf< d S r   r   rL   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   r"  r  r#   r#   r$   r  R  s    zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__getitem__Nr  r#   r#   r#   r$   r   J  s   r   rt   r   c                 S   s   | t || S r   complex)r  r#  r$  r#   r#   r$   get_keyY  s    z6TestJitClass.test_getitem_complex_key.<locals>.get_keyc                 S   s   || t ||< d S r   r%  )r  r#  r$  r   r#   r#   r$   set_key]  s    z6TestJitClass.test_getitem_complex_key.<locals>.set_keyrr   ru   )r   r   r4   r&  r	   r>   )r"   rA   r   r  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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z6TestJitClass.test_getitem_tuple_key.<locals>.TestClassc                 S   s   t jdt jd| _d S r!  r  r2   r#   r#   r$   r%   j  s    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  s    zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__setitem__c                 S   s   | j |d |d f S r*  r   r  r#   r#   r$   r  p  s    zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__getitem__Nr  r#   r#   r#   r$   r   h  s   r      r   r   c                 S   s   | d S )Nr,  r#   r  r#   r#   r$   get11v  s    z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nrr   rr   r#   r  r   r#   r#   r$   set22z  s    z2TestJitClass.test_getitem_tuple_key.<locals>.set22   r.  r  )r"   rA   r   r  r-  r0  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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z6TestJitClass.test_getitem_slice_key.<locals>.TestClassc                 S   s   t jdt jd| _d S r  r  r2   r#   r#   r$   r%     s    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   r3  )r"   r6  r#   r#   r$   r    s    zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__getitem__Nr  r#   r#   r#   r$   r     s   r   r   r   rr   c                 S   s   | ddd S )Nr      r   r#   r  r#   r#   r$   get5  s    z1TestJitClass.test_getitem_slice_key.<locals>.get5c                 S   s   || ddd< d S )Nrr   r7  r   r#   r/  r#   r#   r$   set26  s    z2TestJitClass.test_getitem_slice_key.<locals>.set26r7  rt   )r   r   r4   r>   r	   )r"   rA   r   r  r8  r9  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>  s     zFTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.<listcomp>   c                 S   s   g | ]}|d  t fqS ry   )r   r=  letterr#   r#   r$   r>    s     c                 S   s   g | ]}|  d  tfqS r@  )upperr   rA  r#   r#   r$   r>    s     c                   @   s$   e Zd Zdd Zdd Zdd ZdS )zJTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabelc                 S   s
   d| _ d S )Ng      $@)
aaaaaaaaaar2   r#   r#   r$   r%     s    zSTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.__init__c                 S   s   t | j| j| _d S r   )randomgaussrD  Z
bbbbbbbbbbr2   r#   r#   r$   meth1  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )rG  r2   r#   r#   r$   meth2  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r'   r(   r)   r%   rG  rH  r#   r#   r#   r$   TruncatedLabel  s   rI  )r  extendr   r4   rH  )r"   alphabetrA   rI  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                   @   s   e Zd Zdd ZdS )z5TestJitClass.test_pickling.<locals>.PickleTestSubjectc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    z>TestJitClass.test_pickling.<locals>.PickleTestSubject.__init__Nr&   r#   r#   r#   r$   PickleTestSubject  s   rM  )
r   r4   r   r   r   ZClassInstanceTypepickledumpsr   loads)r"   rM  r   tyZpickledr#   r#   r$   test_pickling  s    
zTestJitClass.test_picklingc              	      s  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 5 Q R X | dt|j | 	t}|d W 5 Q R X | dt|j t g G  fddd   }| 	tj}|  W 5 Q R X | 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   s
   || _ d S r   r   r   r#   r#   r$   r%     s    z8TestJitClass.test_static_methods.<locals>.Test1.__init__c                 S   s   |  | j|| _| jS r   rj   r   r"   r    r#   r#   r$   increase  s    z8TestJitClass.test_static_methods.<locals>.Test1.increasec                 S   s   | | S r   r#   r   r#   r#   r$   rj     s    z3TestJitClass.test_static_methods.<locals>.Test1.addc                 S   s   | | S r   r#   r   r#   r#   r$   sub  s    z3TestJitClass.test_static_methods.<locals>.Test1.subN)r'   r(   r)   r%   rU  staticmethodrj   rV  r#   r#   r#   r$   rQ     s   
rQ   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   s
   || _ d S r   r   r   r#   r#   r$   r%     s    z8TestJitClass.test_static_methods.<locals>.Test2.__init__c                 S   s   |  | j|| _| jS r   rS  rT  r#   r#   r$   rU    s    z8TestJitClass.test_static_methods.<locals>.Test2.increasec                 S   s   | | S r   r#   r   r#   r#   r$   rj     s    z3TestJitClass.test_static_methods.<locals>.Test2.addN)r'   r(   r)   r%   rU  rW  rj   r#   r#   r#   r$   Test2  s   rX  rt   r   rr   ru   r7  r   y               @y              ?Zfoobarrx   rq   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   s   d S r   r#   r2   r#   r#   r$   r%     s    z8TestJitClass.test_static_methods.<locals>.Test3.__init__c                 S   s   d S r   r#   r   r#   r#   r$   a_static_method  s    z?TestJitClass.test_static_methods.<locals>.Test3.a_static_methodc                    s     ddS r   )rZ  r2   Test3r#   r$   call_static  s    z;TestJitClass.test_static_methods.<locals>.Test3.call_staticN)r'   r(   r)   r%   rW  rZ  r]  r#   r[  r#   r$   r\  
  s   
r\  z#Unknown attribute 'a_static_method')r   r   r   rj   r   rV  ZassertNotEqualr>   rU  r[   r   r]   r^   r_   r\   r   r   r]  )r"   rQ   rX  t1t2r`   invalidr#   r[  r$   test_static_methods  sN    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                   @   s   e Zd ZU eed< dd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test1r   c                 S   s
   d| _ d S Nr   r   r2   r#   r#   r$   r%   $  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test1.__init__NrW   r#   r#   r#   r$   rQ      s   
rQ   rA   c                   @   s   e Zd Zdd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test2c                 S   s
   d| _ d S rb  r   r2   r#   r#   r$   r%   -  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test2.__init__Nr&   r#   r#   r#   r$   rX  *  s   rX  c                   @   s   e Zd ZU eed< dd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test3r   c                 S   s
   d| _ d S rb  r   r2   r#   r#   r$   r%   7  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__NrW   r#   r#   r#   r$   r\  3  s   
r\  c                   @   s   e Zd Zdd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test4c                 S   s
   d| _ d S rb  r   r2   r#   r#   r$   r%   @  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test4.__init__Nr&   r#   r#   r#   r$   Test4=  s   rd  r   r   r   r   r   ZassertDictEqualr5   r8   )r"   rA   rQ   rX  r\  rd  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                   @   s   e Zd ZU eed< dd ZdS )zCTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTestr   c                 S   s
   d| _ d S rb  r   r2   r#   r#   r$   r%   L  s    zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__NrW   r#   r#   r#   r$   AnnotatedTestI  s   
rg  c                   @   s   e Zd Zdd ZdS )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   s
   d| _ d S rb  r   r2   r#   r#   r$   r%   U  s    zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr&   r#   r#   r#   r$   UnannotatedTestS  s   rh  re  )r"   rA   rg  ZJitTest1rh  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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z2TestJitClass.test_jitclass_isinstance.<locals>.Fooc                 S   s
   || _ d S r   r   rV   r#   r#   r$   r%   a  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.__init__c                 S   s   | j S r   r   r2   r#   r#   r$   getValued  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   s
   | j d S r   r   r2   r#   r#   r$   getValueIncrg  s    z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r'   r(   r)   r%   rj  rk  r#   r#   r#   r$   rS   _  s   rS   c                   @   s   e Zd Zdd Zdd ZdS )z2TestJitClass.test_jitclass_isinstance.<locals>.Barc                 S   s
   || _ d S r   r   rV   r#   r#   r$   r%   l  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.__init__c                 S   s   | j S r   r   r2   r#   r#   r$   rj  o  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.getValueN)r'   r(   r)   r%   rj  r#   r#   r#   r$   rX   j  s   rX   c                    sJ   t |  frB|  }t | r0|  | dfS |  | dfS ndS d S )NrS   rX   zno match)r;   rj  rk  )rp   r   rX   rS   r#   r$   test_jitclass_isinstancer  s    
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancert   rs   r   )r   r   r   r4   r	   r   r   r>   )r"   rA   rm  ZpyfuncZcfuncr#   rl  r$   rm  \  s    

z%TestJitClass.test_jitclass_isinstancec              	   C   sF   |  t }tG dd dt}|  W 5 Q R X | dt|j d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z:TestJitClass.test_jitclass_unsupported_dunder.<locals>.Fooc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zCTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__init__c                 S   s   d S r   r#   r2   r#   r#   r$   	__enter__  s    zDTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__enter__N)r'   r(   r)   r%   rn  r#   r#   r#   r$   rS     s   rS   z$Method '__enter__' is not supported.)r[   r\   r   r4   r]   r^   r_   )r"   erS   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                   @   s   e Zd Zdd ZdS )z1TestJitClass.test_modulename.<locals>.TestModnamec                 S   s
   d| _ d S )N   r   r2   r#   r#   r$   r%     s    z:TestJitClass.test_modulename.<locals>.TestModname.__init__Nr&   r#   r#   r#   r$   TestModname  s   rr  )r   r4   r'   r(   r>   )r"   rr  Z
thisModuleZclassModuler#   r#   r$   test_modulename  s
    zTestJitClass.test_modulename)NNN)1r'   r(   r)   rG   rJ   rK   rR   rZ   ra   rd   rl   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r)  r2  r:  rL  rR  ra  rf  ri  rm  rp  rs  r#   r#   r#   r$   r1   0   s\   
6>&X
 %S))r1   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 rb  r   r2   r#   r#   r$   r%     s    z%TestJitClassOverloads.PyList.__init__c                 C   s   | j | d S r   r   appendrT  r#   r#   r$   rv    s    z#TestJitClassOverloads.PyList.appendc                 C   s   | j   d S r   )r   clearr2   r#   r#   r$   rw    s    z"TestJitClassOverloads.PyList.clearc                 C   s   t | jd S rb   r?   r   r2   r#   r#   r$   __abs__  s    z$TestJitClassOverloads.PyList.__abs__c                 C   s   t | jd dkS )Nrt   r   rx  r2   r#   r#   r$   __bool__  s    z%TestJitClassOverloads.PyList.__bool__c                 C   s    t d}| jr|| jd 7 }|S )Nrr   r   )r&  r   )r"   r   r#   r#   r$   __complex__  s    z(TestJitClassOverloads.PyList.__complex__c                 C   s
   || j kS r   r   rT  r#   r#   r$   __contains__  s    z)TestJitClassOverloads.PyList.__contains__c                 C   s   d}| j r|| j d 7 }|S )Nr   r   r   )r"   fr#   r#   r$   	__float__  s    z&TestJitClassOverloads.PyList.__float__c                 C   s   d}| j r|| j d 7 }|S )Nr   r   r   )r"   r	  r#   r#   r$   __int__  s    z$TestJitClassOverloads.PyList.__int__c                 C   s   t | jd S r   rx  r2   r#   r#   r$   __len__  s    z$TestJitClassOverloads.PyList.__len__c                 C   s   t | jdkrdS dS d S )Nr   zPyList emptyzPyList non-emptyrx  r2   r#   r#   r$   __str__  s    z$TestJitClassOverloads.PyList.__str__N)r'   r(   r)   r%   rv  rw  ry  rz  r{  r|  r~  r  r  r  r#   r#   r#   r$   PyList  s   r  c                      s&   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   s
   || _ d S r   r   rV   r#   r#   r$   r%     s    zBTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__init__c                 S   s   | j |j kS r   r   r"   r   r#   r#   r$   __eq__  s    z@TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__eq__c                 S   s   | j S r   r   r2   r#   r#   r$   __hash__  s    zBTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__hash__c                    s    | j |j > S r   r   r  
IntWrapperr#   r$   
__lshift__  s    zDTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__lshift__c                    s    | j |j ? S r   r   r  r  r#   r$   
__rshift__  s    zDTestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__rshift__c                    s    | j |j @ S r   r   r  r  r#   r$   __and__  s    zATestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__and__c                    s    | j |j B S r   r   r  r  r#   r$   __or__  s    z@TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapper.__or__c                    s    | j |j A S r   r   r  r  r#   r$   __xor__  s    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                      s&   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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   s
   || _ d S r   r   rV   r#   r#   r$   r%     s    zFTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__init__c                 S   s   | j |j kS r   r   r  r#   r#   r$   r    s    zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__eq__c                 S   s   | j S r   r   r2   r#   r#   r$   r    s    zFTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__hash__c                 S   s   | j |j kS r   r   r  r#   r#   r$   __ge__  s    zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__ge__c                 S   s   | j |j kS r   r   r  r#   r#   r$   __gt__  s    zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__gt__c                 S   s   | j |j kS r   r   r  r#   r#   r$   __le__  s    zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__le__c                 S   s   | j |j k S r   r   r  r#   r#   r$   __lt__  s    zDTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__lt__c                    s    | j |j  S r   r   r  FloatWrapperr#   r$   __add__  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__add__c                    s    | j |j  S r   r   r  r  r#   r$   __floordiv__  s    zJTestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__floordiv__c                    s    | j |j  S r   r   r  r  r#   r$   __mod__
  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__mod__c                    s    | j |j  S r   r   r  r  r#   r$   __mul__  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__mul__c                    s    | j  S r   r   r  r  r#   r$   __neg__  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__neg__c                    s    | j 
 S r   r   r  r  r#   r$   __pos__  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__pos__c                    s    | j |j  S r   r   r  r  r#   r$   __pow__  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__pow__c                    s    | j |j  S r   r   r  r  r#   r$   __sub__  s    zETestJitClassOverloads.get_float_wrapper.<locals>.FloatWrapper.__sub__c                    s    | j |j  S r   r   r  r  r#   r$   __truediv__  s    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  )r>   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 ]0\}}| |||| | |||| q|d |d t||D ]0\}}| |||| | |||| q|d |d t||D ]2\}}| |||| | |||| qJ|  |  t||D ]2\}}| |||| | |||| qd S )Nr   c                 S   s   t | S r   )absr   r#   r#   r$   <lambda>+      z6TestJitClassOverloads.test_overloads.<locals>.<lambda>c                 S   s   |   S r   )ry  r   r#   r#   r$   r  ,  r  c                 S   s   t | S r   boolr   r#   r#   r$   r  -  r  c                 S   s   |   S r   )rz  r   r#   r#   r$   r  .  r  c                 S   s   t | S r   r%  r   r#   r#   r$   r  /  r  c                 S   s   |   S r   )r{  r   r#   r#   r$   r  0  r  c                 S   s   d| kS rb  r#   r   r#   r#   r$   r  1  r  c                 S   s
   |  dS rb  )r|  r   r#   r#   r$   r  2  r  c                 S   s   t | S r   rP   r   r#   r#   r$   r  3  r  c                 S   s   |   S r   )r~  r   r#   r#   r$   r  4  r  c                 S   s   t | S r   rL   r   r#   r#   r$   r  5  r  c                 S   s   |   S r   )r  r   r#   r#   r$   r  6  r  c                 S   s   t | S r   )r?   r   r#   r#   r$   r  7  r  c                 S   s   |   S r   )r  r   r#   r#   r$   r  8  r  c                 S   s   t | S r   )r^   r   r#   r#   r$   r  9  r  c                 S   s   |   S r   )r  r   r#   r#   r$   r  :  r  c                 S   s   | rdS dS )Nr   r   r#   r   r#   r#   r$   r  ;  r  c                 S   s   g | ]}t |qS r#   )r	   )r=  r}  r#   r#   r$   r>  =  s     z8TestJitClassOverloads.test_overloads.<locals>.<listcomp>rr   )	r   r   rO   r  r  r@   r  rv  rw  )r"   ZJitListZpy_funcsZ	jit_funcsZpy_listZjit_listpy_fjit_fr#   r#   r$   test_overloads%  sP    



z$TestJitClassOverloads.test_overloadsc                 C   s   dd }t |}tdttjfgG dd d}|dddg}| || | || |d	 | || | || |  | || | || td
tj	fgG dd d}|d}| || | || d S )Nc                 S   s   t | S r   r  r   r#   r#   r$   py_bY  s    z6TestJitClassOverloads.test_bool_fallback.<locals>.py_br   c                   @   s,   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   s
   || _ d S r   r   r   r#   r#   r$   r%   `  s    zCTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__init__c                 S   s   t | jd S )Nru   rx  r2   r#   r#   r$   r  c  s    zBTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__len__c                 S   s   | j | d S r   ru  rT  r#   r#   r$   rv  f  s    zATestJitClassOverloads.test_bool_fallback.<locals>.LenClass.appendc                 S   s   | j d d S rb  )r   popr2   r#   r#   r$   r  i  s    z>TestJitClassOverloads.test_bool_fallback.<locals>.LenClass.popN)r'   r(   r)   r%   r  rv  r  r#   r#   r#   r$   LenClass^  s   r  r   rr   rt   ru   r    c                   @   s   e Zd Zdd ZdS )z=TestJitClassOverloads.test_bool_fallback.<locals>.NormalClassc                 S   s
   || _ d S r   )r    rT  r#   r#   r$   r%   z  s    zFTestJitClassOverloads.test_bool_fallback.<locals>.NormalClass.__init__Nr&   r#   r#   r#   r$   NormalClassx  s   r  r   )
r	   r   r   rO   r  r   rv  r   r  r   )r"   r  Zjit_br  rp   r  r#   r#   r$   test_bool_fallbackW  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 5 Q R X | d
t|	j | t	}	|| W 5 Q R X | d
t|	j tg G dd d}
|
 }| ||d | ||d | t}	|| W 5 Q R X | dt|	j | t	}	|| W 5 Q R X | dt|	j | t}	|| W 5 Q R X | dt|	j | t	}	|| W 5 Q R X | 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   s   t | S r   r%  r   r#   r#   r$   py_c  s    z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_cc                 S   s   t | S r   r  r   r#   r#   r$   r    s    z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_fc                 S   s   t | S r   r  r   r#   r#   r$   py_i  s    z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_ic                   @   s   e Zd Zdd Zdd ZdS )z?TestJitClassOverloads.test_numeric_fallback.<locals>.FloatClassc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zHTestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__init__c                 S   s   dS Nr   r#   r2   r#   r#   r$   r~    s    zITestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__float__N)r'   r(   r)   r%   r~  r#   r#   r#   r$   
FloatClass  s   r  r   rL   c                   @   s   e Zd Zdd Zdd ZdS )z=TestJitClassOverloads.test_numeric_fallback.<locals>.IntClassc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zFTestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__init__c                 S   s   dS rb   r#   r2   r#   r#   r$   r    s    zETestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__int__N)r'   r(   r)   r%   r  r#   r#   r#   r$   IntClass  s   r  rc   r&  rP   c                   @   s   e Zd Zdd Zdd ZdS )z?TestJitClassOverloads.test_numeric_fallback.<locals>.IndexClassc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zHTestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__init__c                 S   s   dS r   r#   r2   r#   r#   r$   	__index__  s    zITestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__index__N)r'   r(   r)   r%   r  r#   r#   r#   r$   
IndexClass  s   r  r         ?c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
zGTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClassc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zPTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__init__c                 S   s   dS r  r#   r2   r#   r#   r$   r~    s    zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__float__c                 S   s   dS rb   r#   r2   r#   r#   r$   r    s    zOTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__int__c                 S   s   dS r   r#   r2   r#   r#   r$   r    s    zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__index__N)r'   r(   r)   r%   r~  r  r  r#   r#   r#   r$   FloatIntIndexClass  s   r  )
r	   r   r  r&  r[   r\   r]   r^   r_   r   )r"   r  r  r  Zjit_cr  Zjit_ir  rp   ro  r  r  r  r#   r#   r$   test_numeric_fallback  sl    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}dddg}dd }ttt||D ]|\}\}}	|j}
|
||	}||}||	}t|tk	r| j	n| j
}|||||	 ||||
|| |||||| qttt||D ]~\}\}}	|j}
t|t|	 }}	|
||	}||}||	}| 	||||	 | 	|||
|| | 	||||| qDd S )Nc                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  z?TestJitClassOverloads.test_arithmetic_logical.<locals>.<lambda>c                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |k S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |> S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |? S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |@ S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |B S r   r#   rg   r#   r#   r$   r    r  c                 S   s   | |A S r   r#   rg   r#   r#   r$   r    r  rY          @gX9v?r   g333333*@g)\(?c                 S   s   t | d| S )Nr   )getattrr   r#   r#   r$   unwrap  s    z=TestJitClassOverloads.test_arithmetic_logical.<locals>.unwrap)r  r  	itertoolsproductmapr	   r   r  rP   r>   assertAlmostEqualrL   )r"   r  r  float_py_funcsint_py_funcstest_valuesr  r  r   r    r  rF   Zjit_xZjit_ycheckr#   r#   r$   test_arithmetic_logical  sp     

 
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 }dddg}	tt	t
|||f| fg|	D ]d\}
\}}\}}|
j}|||||j}| ||||||j | ||
||||j qtt	t
|||f|fg|	D ]x\}
\}}\}}t|t| }}|
j}|||||j}| ||||||j | ||
||||j qbd 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   s
   || _ d S r   r   rV   r#   r#   r$   r%   5  s    z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__init__c                    s    | j |j > S r   r   r  JitIntUpdateWrapperr#   r$   __ilshift__8  s    z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ilshift__c                    s    | j |j ? S r   r   r  r  r#   r$   __irshift__;  s    z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__irshift__c                    s    | j |j @ S r   r   r  r  r#   r$   __iand__>  s    z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__iand__c                    s    | j |j B S r   r   r  r  r#   r$   __ior__A  s    zZTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ior__c                    s    | j |j A S r   r   r  r  r#   r$   __ixor__D  s    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   s
   || _ d S r   r   rV   r#   r#   r$   r%   J  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__init__c                    s    | j d|j   S NgX9v@r   r  JitFloatUpdateWrapperr#   r$   __iadd__M  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__iadd__c                    s    | j d |j  S r  r   r  r  r#   r$   __ifloordiv__P  s    zbTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ifloordiv__c                    s    | j |j d  S r   r   r  r  r#   r$   __imod__S  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imod__c                    s    | j |j  d S r   r   r  r  r#   r$   __imul__V  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imul__c                    s    | j |j  d S r   r   r  r  r#   r$   __ipow__Y  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ipow__c                    s    | j d|j   S r  r   r  r  r#   r$   __isub__\  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__isub__c                    s    | j d |j  S r   r   r  r  r#   r$   __itruediv___  s    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                    s   g | ]} |qS r#   r#   r=  r  r  r#   r$   r>  o  s     zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+//%***-/c                    s   g | ]} |qS r#   r#   r  r  r#   r$   r>  r  s     )<<>>&|^r  r  r  )r  r  mror   r   r  r   r  r  r  r	   r   r   r  rL   r>   )r"   ZJitIntWrapperZJitFloatWrapperZPyIntWrapperZPyFloatWrapperZPyIntUpdateWrapperZPyFloatUpdateWrapperr  r  r  r  Zpy_clsjit_clsr   r    r  rF   r#   )r  r  r  r$   test_arithmetic_logical_inplace*  sP    
z5TestJitClassOverloads.test_arithmetic_logical_inplacec                 C   s  G dd d}G dd d|}dd }dd }d	d
 }dd }ddddg}t ||gddgD ]\}}	|	rntn|}
|
|}|
|}|
|}t|}dD ]}| ||||d  q|D ]T\}}| |||||||||k | |||||||||k qq^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   s
   || _ d S r   r   r   r#   r#   r$   r%     s    zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__init__c                 S   s
   | j d S )Nry   r   r2   r#   r#   r$   r    s    zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__hash__c                 S   s   | j |j  d dkS )Nr  r   r   r"   or#   r#   r$   r    s    z@TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqTest.__eq__N)r'   r(   r)   rL   rM   r%   r  r  r#   r#   r#   r$   
HashEqTest  s   
r  c                   @   s   e Zd Zdd ZdS )z;TestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTestc                 S   s   | j |j  d dkS )Nr  r   r   r  r#   r#   r$   __ne__  s    zBTestJitClassOverloads.test_hash_eq_ne.<locals>.HashEqNeTest.__ne__N)r'   r(   r)   r  r#   r#   r#   r$   HashEqNeTest  s   r  c                 S   s   t | S r   )hashr   r#   r#   r$   py_hash  s    z6TestJitClassOverloads.test_hash_eq_ne.<locals>.py_hashc                 S   s   | |kS r   r#   rg   r#   r#   r$   py_eq  s    z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_eqc                 S   s   | |kS r   r#   rg   r#   r#   r$   py_ne  s    z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_nec                 S   s   | S r   r#   )r}  r#   r#   r$   identity_decorator  s    zATestJitClassOverloads.test_hash_eq_ne.<locals>.identity_decorator)r   r   )rr   r1  )rc   ry   )rt   rt   FT)r   rr   ry      iry   )r  r  r	   r   r>   )r"   r  r  r  r  r  r  ZcomparisonsZbase_clsZuse_jit	decoratorZ	hash_funcZeq_funcZne_funcr  r   r   r    r#   r#   r$   test_hash_eq_ne  s>     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                   @   s$   e Zd Zdd Zdd Zdd ZdS )zBTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLenc                 S   s
   || _ d S r   r   rh   r#   r#   r$   r%     s    zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__init__c                 S   s   | j S r   r   r2   r#   r#   r$   r    s    zJTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__len__c                 S   s   t | S r   r  r2   r#   r#   r$   get_bool  s    zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.get_boolN)r'   r(   r)   r%   r  r  r#   r#   r#   r$   NoBoolHasLen  s   r  ri   r   rr   )r   r   Zint64r  r>   r  )r"   r  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                   @   s   e Zd Zdd Zdd ZdS )zETestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLenc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.__init__c                 S   s   t | S r   r  r2   r#   r#   r$   r    s    zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.get_boolN)r'   r(   r)   r%   r  r#   r#   r#   r$   NoBoolNoLen  s   r  )r   r  r>   r  )r"   r  r   r  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   s
   || _ d S r   r   r   r#   r#   r$   r%     s    zQTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__init__c                 S   s   | j |j kS r   r   r  r#   r#   r$   r    s    zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__eq__c                 S   s   | j |j kS r   r   r  r#   r#   r$   r    s    zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__le__c                 S   s   | j |j k S r   r   r  r#   r#   r$   r     s    zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__lt__c                 S   s   | j |j kS r   r   r  r#   r#   r$   r  #  s    zOTestJitClassOverloads.test_operator_reflection.<locals>.OperatorsDefined.__ge__c                 S   s   | j |j kS r   r   r  r#   r#   r$   r  &  s    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                   @   s   e Zd Zdd ZdS )zJTestJitClassOverloads.test_operator_reflection.<locals>.NoOperatorsDefinedc                 S   s
   || _ d S r   r   r   r#   r#   r$   r%   *  s    zSTestJitClassOverloads.test_operator_reflection.<locals>.NoOperatorsDefined.__init__Nr&   r#   r#   r#   r$   NoOperatorsDefined)  s   r  r   rr   rt   )r   r   r   r>   )
r"   r  r  rA   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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||
 t|	|  | t|| t||  | t||
  t||   | || ||	  | t|| t||  | t|
| t||	  | t|
|  t||   ||
 }||
 }|	| }	|| }| t|j t|	j  | t|j t|j  d S )
Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z;TestJitClassOverloads.test_matmul_operator.<locals>.ArrayAtc                 S   s
   || _ d S r   re   r"   r   r#   r#   r$   r%   I  s    zDTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__init__c                 S   s   | j |j  S r   r  r  r#   r#   r$   
__matmul__L  s    zFTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__matmul__c                 S   s   |j | j  S r   r  r  r#   r#   r$   __rmatmul__O  s    zGTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__rmatmul__c                 S   s   | j |j  | _ | S r   r  r  r#   r#   r$   __imatmul__R  s    zGTestJitClassOverloads.test_matmul_operator.<locals>.ArrayAt.__imatmul__N)r'   r(   r)   r%   r  r  r  r#   r#   r#   r$   ArrayAtH  s   r  c                   @   s   e Zd Zdd ZdS )z=TestJitClassOverloads.test_matmul_operator.<locals>.ArrayNoAtc                 S   s
   || _ d S r   r  r  r#   r#   r$   r%   W  s    zFTestJitClassOverloads.test_matmul_operator.<locals>.ArrayNoAt.__init__Nr&   r#   r#   r#   r$   	ArrayNoAtV  s   r  rt   )sizere   r   rc  )	r|   rE  r   r   r>   assertTupleEqualtupleZravelre   )r"   r  r  r  rv   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  sr    &&







z*TestJitClassOverloads.test_matmul_operatorc              
   C   s>  G dd d}G dd d}ddddd	d
dg}|d }t |dft|dftd d d |tdddgtdddgfffD ]\}}}d|i}t||}	t||}
||d }||d }|	|d }|
|d }|D ]d}dt|kr
| td| dtd| d q| t	td| dt	td| d qqxd 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   s
   || _ d S r   r   r   r#   r#   r$   r%     s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__init__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __radd__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__radd__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __rsub__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rsub__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __rmul__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rmul__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __rtruediv__  s    z_TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rtruediv__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __rfloordiv__  s    z`TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rfloordiv__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __rmod__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rmod__c                 S   s   |j | j  S r   r   r  r#   r#   r$   __rpow__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rpow__c                 S   s   |j | j > S r   r   r  r#   r#   r$   __rlshift__  s    z^TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rlshift__c                 S   s   |j | j ? S r   r   r  r#   r#   r$   __rrshift__  s    z^TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rrshift__c                 S   s   |j | j @ S r   r   r  r#   r#   r$   __rand__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rand__c                 S   s   |j | j A S r   r   r  r#   r#   r$   __rxor__  s    z[TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__rxor__c                 S   s   |j | j B S r   r   r  r#   r#   r$   __ror__  s    zZTestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.OperatorsDefined.__ror__N)r'   r(   r)   r%   r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r#   r#   r#   r$   r    s   r  c                   @   s   e Zd Zdd ZdS )zTTestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.NoOperatorsDefinedc                 S   s
   || _ d S r   r   r   r#   r#   r$   r%     s    z]TestJitClassOverloads.test_arithmetic_logical_reflection.<locals>.NoOperatorsDefined.__init__Nr&   r#   r#   r#   r$   r    s   r  r  r  r  r  r  r  r  r  r  r  r  r  )rr   ru   )r        @r   r  r  r&  g      4@g      8r   r   r   zpy_ops_not_defined z py_ops_definedzjit_ops_not_defined z jit_ops_defined)r  r  r  r  r  )
r   r   r|   r   r   r^   r>   evalr  r  )r"   r  r  Zfloat_opZint_opZ	test_typeZtest_opZ
test_valuerA   r  r  r	  r
  r  r  r  r#   r#   r$   "test_arithmetic_logical_reflection  s6    (

z8TestJitClassOverloads.test_arithmetic_logical_reflectionc                 C   s2   G dd d}t g |}| }| ||k d S )Nc                   @   s   e Zd Zdd Zdd ZdS )zGTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHashc                 S   s   d S r   r#   r2   r#   r#   r$   r%     s    zPTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__init__c                 S   s   dS )NFr#   r  r#   r#   r$   r    s    zNTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__eq__N)r'   r(   r)   r%   r  r#   r#   r#   r$   ImplicitHash  s   r)  )r   r   )r"   r)  Zjittedinstancer#   r#   r$   test_implicit_hash_compiles  s    z1TestJitClassOverloads.test_implicit_hash_compiles)N)r'   r(   r)   r  rW  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r(  r+  r#   r#   r#   r$   rt    s&   .

6
2*cFm<+1
SLrt  __main__)2r   r  rN  rE  typingrN   Zunittestcollectionsr   numpyr|   Znumbar   r   r   r   r   r   r	   r
   r   Z
numba.corer   r   Znumba.core.dispatcherr   Znumba.core.errorsr   r   Znumba.core.runtime.nrtr   Znumba.experimentalr   Znumba.experimental.jitclassr   Z numba.experimental.jitclass.baser   Znumba.tests.supportr   r   r   r   r4   r   r*   r0   r1   rt  r'   mainr#   r#   r#   r$   <module>   sL   ,	        t      a
