U
    ,d                     @   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& 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rJe2  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                   @   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#   ?/tmp/pip-unpacked-wheel-eu7e0c37/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)Zboxptrmir#   r#   r$   _get_meminfo)   s    
r/   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 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   r2   r   r   )r   object
class_typeinstance_typeliststructkeysvalues
isinstancer   itemsAssertionErrorassertEquallenzip)
r"   spectest_clsall_expectedr2   Zclstynamesr9   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   rF   r"   r@   r#   r#   r$   test_ordereddict_specL   s    z"TestJitClass.test_ordereddict_specc                 C   s   dt fdtfg}| | d S rG   )r   r   rF   rH   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#   r1   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   
rP   r    )r   r   r3   rF   r   ZListTyper   )r"   r@   rP   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)   rK   rL   r#   r#   r#   r$   Foof   s   
rR   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   )rK   r   r    r"   rS   r#   r#   r$   r%   m   s    
zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r'   r(   r)   rO   rL   r%   r#   r#   r#   r$   Bari   s   
rW   r   r   r            )rA   rB   )r   rF   r   )r"   rR   rW   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#   r1   r#   r#   r$   r%   {   s    z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr&   r#   r#   r#   r$   r2   y   s   r2   z*spec values should be Numba type instancesz"spec keys should be strings, got 1)rK   r   r   r3   assertRaises	TypeErrorr   assertInstr	exceptionr=   )r"   Zspec1Zspec2r2   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#   r1   r#   r#   r$   r%      s    z4TestJitClass.test_init_errors.<locals>.Test.__init__Nr&   r#   r#   r#   r$   r2      s   r2   z"__init__() should return None, not)r   rZ   r   r   r\   r]   r^   )r"   r2   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    rd   )r"   r   r    rd   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%   ri   r#   r#   r#   r$   Float2AndArray   s   rj   )r   r   r   r3   )r"   r@   rj   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   rf   )r"   r   r    r#   r#   r$   r%      s    z4TestJitClass._make_Vector2.<locals>.Vector2.__init__Nr&   r#   r#   r#   r$   Vector2   s   rl   )r   r   r   r3   )r"   r@   rl   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   rf   objr#   r#   r$   bar   s    z*TestJitClass.test_jit_class_1.<locals>.barc                    s4    dd| }| d dd}|||jfS )Nr      {         )ri   rd   )r   ro   vecrj   rl   rp   r#   r$   foo   s    

z*TestJitClass.test_jit_class_1.<locals>.foo
   Zdtype   rb   )rk   rm   r	   npZonesr   r=   assertPreciseEqual)r"   rw   inpr   bcr#   rv   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#   rn   r#   r#   r$   identity   s    z>TestJitClass.test_jitclass_usage_from_python.<locals>.identityc                 S   s   | j | j| jfS r   re   rn   r#   r#   r$   retrieve_attributes   s    zITestJitClass.test_jitclass_usage_from_python.<locals>.retrieve_attributesrx   ry   r   rq   rt   rr   |   }   iM  i  r   )rk   r	   r{   aranger   r/   r=   refcountdatar   box_get_dataptrZ_numba_type_r4   assertIsr   r    rd   ri   )r"   rj   r   r   rd   ro   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 )Nrh   c                   @   s   e Zd Zdd ZdS )z2TestJitClass.test_jitclass_datalayout.<locals>.Fooc                 S   s
   || _ d S r   rh   rg   r#   r#   r$   r%     s    z;TestJitClass.test_jitclass_datalayout.<locals>.Foo.__init__Nr&   r#   r#   r#   r$   rR     s   rR   TF)r   r   r   r3   
assertTruerh   assertFalse)r"   r@   rR   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   r1   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   rr   A  rs   rq   7  i  )r   r   r   r
   r	   r   r3   Zdefiner4   r5   r=   r   ZassertIsNoner   r/   r   r   r   ZassertIsNotNone)	r"   Z	node_typer@   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)   ctypesc_int32c_int16c_double_fields_r#   r#   r#   r$   CStruct_  s   r   r   )r   r   r   r   r   r3   r   	Structurec_void_pr   r   castPOINTERr=   r   r~   r   )r"   r@   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   rq   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)rm   r	   rZ   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   rq   )rm   assertIsInstance)r"   rl   ru   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)rm   rZ   r[   r=   r]   r^   )r"   rl   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   attrr1   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$   r2     s   r2   rr   )r3   r   r   r=   r   )r"   r   r2   ro   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>.Minerr   c                 S   s   d S r   r#   r1   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r3   rZ   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   r1   r#   r#   r$   rS     s    z7TestJitClass.test_user_getter_setter.<locals>.Foo.valuec                 S   s   |d | _ d S r   r   rg   r#   r#   r$   rS     s    N)r'   r(   r)   r%   propertyrS   setterr#   r#   r#   r$   rR     s
   
rR   rr   r   i  i  c                 S   s"   | j }|| _ | j }| j}|||fS r   )rS   r   )rw   rh   r   r~   r   r#   r#   r$   rp     s
    z1TestJitClass.test_user_getter_setter.<locals>.barr   i6  )r   r   r3   r=   r   rS   r	   )r"   rR   rw   rp   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#   r1   r#   r#   r$   r%     s    z:TestJitClass.test_user_deleter_error.<locals>.Foo.__init__c                 S   s   dS r   r#   r1   r#   r#   r$   rS     s    z7TestJitClass.test_user_deleter_error.<locals>.Foo.valuec                 S   s   d S r   r#   r1   r#   r#   r$   rS     s    N)r'   r(   r)   r%   r   rS   deleterr#   r#   r#   r$   rR     s
   
rR   zdeleter is not supported: valuer   r"   rR   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#   r1   r#   r#   r$   r%     s    z<TestJitClass.test_name_shadowing_error.<locals>.Foo.__init__c                 S   s   d S r   r#   r1   r#   r#   r$   my_property  s    z?TestJitClass.test_name_shadowing_error.<locals>.Foo.my_propertyc                 S   s   d S r   r#   r1   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$   rR     s   
rR   r   zname shadowing: my_propertyr   zname shadowing: my_method)r3   rZ   	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 Nrq   r   r"   r   r#   r#   r$   r%     s    8TestJitClass.test_distinct_classes.<locals>.Foo.__init__c                 S   s
   | j d S r   r   r1   r#   r#   r$   run  s    3TestJitClass.test_distinct_classes.<locals>.Foo.runNr'   r(   r)   r%   r   r#   r#   r#   r$   rR     s   rR   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   r1   r#   r#   r$   r     s    r   Nr   r#   r#   r#   r$   rR     s   r   rb      rs   rq   )r   r   r3   r=   r   r   )r"   rR   ZFirstFooZ	SecondFoorw   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   rS   rU   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 )NrS   )r   r   )rS   clsr   r#   r$   create_my_class  s    z8TestJitClass.test_parameterized.<locals>.create_my_classrr   g(@)r3   r=   rS   r{   arrayZ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)rS   _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 )Nrq   r   )rS   r   _MyClass__valuer   rU   r#   r#   r$   r%   0  s    

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   s   | j S r   r   r1   r#   r#   r$   private_value6  s    z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   s   | j S r   r   r1   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   r1   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"   Z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   rr   rq   r   r   rs   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   r3   r=   rS   r   r   r   r   r   r   r   r	   rZ   r   r   r\   r]   r^   AttributeErrorpy_func)r"   r@   r   rS   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   rq   rb   N)Zannotation_usecasesr   r   r   r=   r   ri   )r"   r   r@   r   ro   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#   r1   r#   r#   r$   r%     s    z3TestJitClass.test_docstring.<locals>.Apple.__init__c                 S   s   dS )foo method docstringNr#   r1   r#   r#   r$   rw     s    z.TestJitClass.test_docstring.<locals>.Apple.fooc                 S   s   dS )aval property docstringNr#   r1   r#   r#   r$   aval  s    z/TestJitClass.test_docstring.<locals>.Apple.avalN)r'   r(   r)   __doc__r%   rw   r   r   r#   r#   r#   r$   Apple  s
   r   r   r   r   r   )r   r3   r=   r   r%   rw   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  rq   g?)r    r!   r   )r   r   r   r3   r=   r   r~   )r"   r@   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   rq   rs   r   )r    r!   r   )r   r   r3   r=   r   r    r!   r"   r@   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   rq   rs   r   r   rt   *   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+   rq   r   z(VAR_POSITIONAL argument type unsupported)r   r   ZUniTuplerZ   r   ZUnsupportedErrorr   r*   r\   r]   r^   )r"   r@   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#   r1   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_genrx   )r   r3   r  r?   r  r|   )r"   r@   r  r  r  expectrD   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 Nrx   ry   r{   zerosr   r   r1   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   rq   rs   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   rq   rs   r   r   r3   r	   r=   )r"   r@   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  r1   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  rx   r   c                 S   s   d| d< | d S )N   rq   r   r#   r  r#   r#   r$   set2return1>  s    z4TestJitClass.test_getitem_unbox.<locals>.set2return1rq   r$  r"  )r"   r@   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)rx   rx   ry   r  r1   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   rK   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  rs   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_keyrq   rt   )r   r   r3   r,  r	   r=   )r"   r@   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  r1   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 r0  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 )Nr2  r#   r  r#   r#   r$   get11v  s    z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nrq   rq   r#   r  r   r#   r#   r$   set22z  s    z2TestJitClass.test_getitem_tuple_key.<locals>.set22   r4  r"  )r"   r@   r  r  r3  r6  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  r1   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   r9  )r"   r<  r#   r#   r$   r    s    zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__getitem__Nr  r#   r#   r#   r$   r    s   r  r   r   rq   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 )Nrq   r=  r   r#   r5  r#   r#   r$   set26  s    z2TestJitClass.test_getitem_slice_key.<locals>.set26r=  rs   )r   r   r3   r=   r	   )r"   r@   r  r  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>  s     zFTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.<listcomp>   c                 S   s   g | ]}|d  t fqS rx   )r   rC  letterr#   r#   r$   rD    s     c                 S   s   g | ]}|  d  tfqS rF  )upperr   rG  r#   r#   r$   rD    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      $@)
aaaaaaaaaar1   r#   r#   r$   r%     s    zSTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.__init__c                 S   s   t | j| j| _d S r   )randomgaussrJ  Z
bbbbbbbbbbr1   r#   r#   r$   meth1  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )rM  r1   r#   r#   r$   meth2  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r'   r(   r)   r%   rM  rN  r#   r#   r#   r$   TruncatedLabel  s   rO  )r  extendr   r3   rN  )r"   alphabetr@   rO  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#   r1   r#   r#   r$   r%     s    z>TestJitClass.test_pickling.<locals>.PickleTestSubject.__init__Nr&   r#   r#   r#   r$   PickleTestSubject  s   rS  )
r   r3   r   r   r   ZClassInstanceTypepickledumpsr   loads)r"   rS  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   ri   r   r"   r    r#   r#   r$   increase  s    z8TestJitClass.test_static_methods.<locals>.Test1.increasec                 S   s   | | S r   r#   r   r#   r#   r$   ri     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%   r[  staticmethodri   r\  r#   r#   r#   r$   rP     s   
rP   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   rY  rZ  r#   r#   r$   r[    s    z8TestJitClass.test_static_methods.<locals>.Test2.increasec                 S   s   | | S r   r#   r   r#   r#   r$   ri     s    z3TestJitClass.test_static_methods.<locals>.Test2.addN)r'   r(   r)   r%   r[  r]  ri   r#   r#   r#   r$   Test2  s   r^  rs   r   rq   rt   r=  r   y               @y              ?Zfoobarrw   rp   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#   r1   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   )r`  r1   Test3r#   r$   call_static  s    z;TestJitClass.test_static_methods.<locals>.Test3.call_staticN)r'   r(   r)   r%   r]  r`  rc  r#   ra  r#   r$   rb  
  s   
rb  z#Unknown attribute 'a_static_method')r   r   r   ri   r   r\  ZassertNotEqualr=   r[  rZ   r   r\   r]   r^   r[   r   r   rc  )r"   rP   r^  t1t2r_   invalidr#   ra  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   r1   r#   r#   r$   r%   $  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test1.__init__NrV   r#   r#   r#   r$   rP      s   
rP   )r@   c                   @   s   e Zd Zdd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test2c                 S   s
   d| _ d S rh  r   r1   r#   r#   r$   r%   -  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test2.__init__Nr&   r#   r#   r#   r$   r^  *  s   r^  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 rh  r   r1   r#   r#   r$   r%   7  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__NrV   r#   r#   r#   r$   rb  3  s   
rb  c                   @   s   e Zd Zdd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test4c                 S   s
   d| _ d S rh  r   r1   r#   r#   r$   r%   @  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test4.__init__Nr&   r#   r#   r#   r$   Test4=  s   ri  r   r   r   r   r   ZassertDictEqualr4   r7   )r"   r@   rP   r^  rb  ri  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 rh  r   r1   r#   r#   r$   r%   L  s    zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__NrV   r#   r#   r#   r$   AnnotatedTestI  s   
rl  c                   @   s   e Zd Zdd ZdS )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   s
   d| _ d S rh  r   r1   r#   r#   r$   r%   U  s    zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr&   r#   r#   r#   r$   UnannotatedTestS  s   rm  rj  )r"   r@   rl  ZJitTest1rm  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   rU   r#   r#   r$   r%   a  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.__init__c                 S   s   | j S r   r   r1   r#   r#   r$   getValued  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   s
   | j d S r   r   r1   r#   r#   r$   getValueIncrg  s    z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r'   r(   r)   r%   ro  rp  r#   r#   r#   r$   rR   _  s   rR   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   rU   r#   r#   r$   r%   l  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.__init__c                 S   s   | j S r   r   r1   r#   r#   r$   ro  o  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.getValueN)r'   r(   r)   r%   ro  r#   r#   r#   r$   rW   j  s   rW   c                    sJ   t |  frB|  }t | r0|  | dfS |  | dfS ndS d S )NrR   rW   zno match)r:   ro  rp  )ro   r   rW   rR   r#   r$   test_jitclass_isinstancer  s    
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancers   rr   r   )r   r   r   r3   r	   r   r   r=   )r"   r@   rr  ZpyfuncZcfuncr#   rq  r$   rr  \  s    

z%TestJitClass.test_jitclass_isinstance)NNN)/r'   r(   r)   rF   rI   rJ   rQ   rY   r`   rc   rk   rm   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/  r8  r@  rR  rX  rg  rk  rn  rr  r#   r#   r#   r$   r0   0   sX   
6>&X
 %S)r0   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 rh  r   r1   r#   r#   r$   r%     s    z%TestJitClassOverloads.PyList.__init__c                 C   s   | j | d S r   r   appendrZ  r#   r#   r$   ru    s    z#TestJitClassOverloads.PyList.appendc                 C   s   | j   d S r   )r   clearr1   r#   r#   r$   rv    s    z"TestJitClassOverloads.PyList.clearc                 C   s   t | jd S ra   r>   r   r1   r#   r#   r$   __abs__  s    z$TestJitClassOverloads.PyList.__abs__c                 C   s   t | jd dkS )Nrs   r   rw  r1   r#   r#   r$   __bool__  s    z%TestJitClassOverloads.PyList.__bool__c                 C   s    t d}| jr|| jd 7 }|S )Nrq   r   )r,  r   )r"   r   r#   r#   r$   __complex__  s    z(TestJitClassOverloads.PyList.__complex__c                 C   s
   || j kS r   r   rZ  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   rw  r1   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-emptyrw  r1   r#   r#   r$   __str__  s    z$TestJitClassOverloads.PyList.__str__N)r'   r(   r)   r%   ru  rv  rx  ry  rz  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   rU   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   r1   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   rU   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   r1   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   )rx  r   r#   r#   r$   r    r  c                 S   s   t | S r   boolr   r#   r#   r$   r    r  c                 S   s   |   S r   )ry  r   r#   r#   r$   r    r  c                 S   s   t | S r   r+  r   r#   r#   r$   r    r  c                 S   s   |   S r   )rz  r   r#   r#   r$   r    r  c                 S   s   d| kS rh  r#   r   r#   r#   r$   r    r  c                 S   s
   |  dS rh  )r{  r   r#   r#   r$   r    r  c                 S   s   t | S r   rO   r   r#   r#   r$   r    r  c                 S   s   |   S r   )r}  r   r#   r#   r$   r    r  c                 S   s   t | S r   rK   r   r#   r#   r$   r    r  c                 S   s   |   S r   )r~  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  "  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  $  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	   )rC  r|  r#   r#   r$   rD  '  s     z8TestJitClassOverloads.test_overloads.<locals>.<listcomp>rq   )	r   r   rN   r  r  r?   r  ru  rv  )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_bC  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%   J  s    zCTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__init__c                 S   s   t | jd S )Nrt   rw  r1   r#   r#   r$   r  M  s    zBTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__len__c                 S   s   | j | d S r   rt  rZ  r#   r#   r$   ru  P  s    zATestJitClassOverloads.test_bool_fallback.<locals>.LenClass.appendc                 S   s   | j d d S rh  )r   popr1   r#   r#   r$   r  S  s    z>TestJitClassOverloads.test_bool_fallback.<locals>.LenClass.popN)r'   r(   r)   r%   r  ru  r  r#   r#   r#   r$   LenClassH  s   r  r   rq   rs   rt   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    rZ  r#   r#   r$   r%   d  s    zFTestJitClassOverloads.test_bool_fallback.<locals>.NormalClass.__init__Nr&   r#   r#   r#   r$   NormalClassb  s   r  r   )
r	   r   r   rN   r  r   ru  r   r  r   )r"   r  Zjit_br  ro   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 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kr| ||td | ||td | ||d | ||d | ||d | ||d n | 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}	|| 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 d S )Nc                 S   s   t | S r   r+  r   r#   r#   r$   py_cl  s    z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_cc                 S   s   t | S r   r  r   r#   r#   r$   r  o  s    z9TestJitClassOverloads.test_numeric_fallback.<locals>.py_fc                 S   s   t | S r   r  r   r#   r#   r$   py_ir  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#   r1   r#   r#   r$   r%   {  s    zHTestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__init__c                 S   s   dS Nr   r#   r1   r#   r#   r$   r}  ~  s    zITestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__float__N)r'   r(   r)   r%   r}  r#   r#   r#   r$   
FloatClassy  s   r  r   rK   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#   r1   r#   r#   r$   r%     s    zFTestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__init__c                 S   s   dS ra   r#   r1   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  rb   r,  rO   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#   r1   r#   r#   r$   r%     s    zHTestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__init__c                 S   s   dS r   r#   r1   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  )rs   r   r   g      ?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#   r1   r#   r#   r$   r%     s    zPTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__init__c                 S   s   dS r  r#   r1   r#   r#   r$   r}    s    zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__float__c                 S   s   dS ra   r#   r1   r#   r#   r$   r~    s    zOTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__int__c                 S   s   dS r   r#   r1   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,  rZ   r[   r\   r]   r^   r   r   )r"   r  r  r  Zjit_cr  Zjit_ir  ro   er  r  r  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}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#   rf   r#   r#   r$   r    r  z?TestJitClassOverloads.test_arithmetic_logical.<locals>.<lambda>c                 S   s   | |kS r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |k S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | | S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |kS r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |> S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |? S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |@ S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |B S r   r#   rf   r#   r#   r$   r    r  c                 S   s   | |A S r   r#   rf   r#   r#   r$   r    r  rX   g       @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  rO   r=   assertAlmostEqualrK   )r"   r  r  float_py_funcsint_py_funcstest_valuesr  r  r   r    r  rE   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   rU   r#   r#   r$   r%   3  s    z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__init__c                    s    | j |j > S r   r   r  JitIntUpdateWrapperr#   r$   __ilshift__6  s    z^TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ilshift__c                    s    | j |j ? S r   r   r  r  r#   r$   __irshift__9  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__?  s    zZTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ior__c                    s    | j |j A S r   r   r  r  r#   r$   __ixor__B  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  1  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   rU   r#   r#   r$   r%   H  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__init__c                    s    | j d|j   S NgX9v@r   r  JitFloatUpdateWrapperr#   r$   __iadd__K  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__iadd__c                    s    | j d |j  S r  r   r  r  r#   r$   __ifloordiv__N  s    zbTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ifloordiv__c                    s    | j |j d  S r   r   r  r  r#   r$   __imod__Q  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imod__c                    s    | j |j  d S r   r   r  r  r#   r$   __imul__T  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imul__c                    s    | j |j  d S r   r   r  r  r#   r$   __ipow__W  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ipow__c                    s    | j d|j   S r  r   r  r  r#   r$   __isub__Z  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  E  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_funcc  s    
zNTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.get_update_funcc                    s   g | ]} |qS r#   r#   rC  r  r  r#   r$   rD  m  s     zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+z//%*z**-/c                    s   g | ]} |qS r#   r#   r  r  r#   r$   rD  p  s     )z<<z>>&|^r  r  r  )r  r  mror   r   r  r   r  r  r  r	   r   r   r  rK   r=   )r"   ZJitIntWrapperZJitFloatWrapperZPyIntWrapperZPyFloatWrapperZPyIntUpdateWrapperZPyFloatUpdateWrapperr  r  r  r  Zpy_clsjit_clsr   r    r  rE   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 )Nrx   r   r1   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)   rK   rL   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#   rf   r#   r#   r$   py_eq  s    z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_eqc                 S   s   | |kS r   r#   rf   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   )rq   r7  )rb   rx   )rs   rs   FT)r   rq   rx      irx   )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   rg   r#   r#   r$   r%     s    zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__init__c                 S   s   | j S r   r   r1   r#   r#   r$   r    s    zJTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__len__c                 S   s   t | S r   r  r1   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  rh   r   rq   )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#   r1   r#   r#   r$   r%     s    zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.__init__c                 S   s   t | S r   r  r1   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   rq   rs   )r   r   r   r=   )
r"   r  r   r@   ZJitOperatorsDefinedZJitNoOperatorsDefinedZpy_ops_definedZpy_ops_not_definedZjit_ops_definedZ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                   @   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#   r1   r#   r#   r$   r%   I  s    zPTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__init__c                 S   s   dS )NFr#   r  r#   r#   r$   r  L  s    zNTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__eq__N)r'   r(   r)   r%   r  r#   r#   r#   r$   ImplicitHashH  s   r  )r   r   )r"   r  Zjittedinstancer#   r#   r$   test_implicit_hash_compilesD  s    z1TestJitClassOverloads.test_implicit_hash_compiles)N)r'   r(   r)   r  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r#   r#   r#   r$   rs    s    .

6
2*wFm<+1rs  __main__)3r   r  rT  rK  typingrM   Zunittestcollectionsr   Znumpyr{   Znumbar   r   r   r   r   r   r	   r
   r   Z
numba.corer   r   Znumba.core.dispatcherr   Znumba.core.errorsr   r   Znumba.core.runtime.nrtr   Znumba.core.utilsr   Znumba.experimentalr   Znumba.experimental.jitclassr   Z numba.experimental.jitclass.baser   Znumba.tests.supportr   r   r   r3   r   r*   r/   r0   rs  r'   mainr#   r#   r#   r$   <module>   sJ   ,	        ^     T
