U
    id                     @   sB  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( 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.e/dkr>e0  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_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"   T/home/sam/Atlas/atlas_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    
r/   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$   6   s    z/TestJitClass._check_spec.<locals>.Test.__init__Nr%   r"   r"   r"   r#   Test3   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_spec1   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_specK   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_specQ   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#   Test1Y   s   
rP   r   )r   r   r3   rF   r   ZListTyper   )r!   r@   rP   r"   r"   r#   test_type_annotationsV   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#   Fooe   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$   l   s    
zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r&   r'   r(   rO   rL   r$   r"   r"   r"   r#   Barh   s   
rW   r   r   r           )rA   rB   )r   rF   r   )r!   rR   rW   r"   r"   r#    test_type_annotation_inheritancec   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$   z   s    z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr%   r"   r"   r"   r#   r2   x   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_errorst   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   Z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$   W  s    z6TestJitClass.test_c_structure.<locals>.Struct.__init__Nr%   r"   r"   r"   r#   StructT  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   r3   r   Z	StructureZc_void_pr   r   castZPOINTERr=   r   r}   r~   )r!   r@   r   str   r-   Zcstructr"   r"   r#   test_c_structureN  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_iso  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_isk  s    

zTestJitClass.test_isc                 C   s"   |   }|dd}| || d S Nr   rq   )rm   assertIsInstance)r!   rl   ru   r"   r"   r#   test_isinstancex  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{   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)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$   /  s    

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   s   | j S r   r   r1   r"   r"   r#   private_value5  s    z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   s   | j S r   r   r1   r"   r"   r#   _inner_value9  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_valueA  s    zBTestJitClass.test_protected_attrs.<locals>.MyClass.__private_valuec                 S   s
   || _ d S r   r   r   r"   r"   r#   r   E  s    c                 S   s   | j }|| _ |S r   )_MyClass__private_value)r!   newoldr"   r"   r#   swap_private_valueI  s    zETestJitClass.test_protected_attrs.<locals>.MyClass.swap_private_valuec                 S   s
   | j | S r   r   r!   factorr"   r"   r#   _protected_methodN  s    zDTestJitClass.test_protected_attrs.<locals>.MyClass._protected_methodc                 S   s
   | j | S r   r   r   r"   r"   r#   Z__private_methodQ  s    zCTestJitClass.test_protected_attrs.<locals>.MyClass.__private_methodc                 S   s
   |  |S r   )_MyClass__private_methodr   r"   r"   r#   check_private_methodT  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_dundern  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{   Z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$   1  s    z;TestJitClass.test_getitem_unbox.<locals>.TestClass.__init__c                 S   s   || j |< d S r   r   r  r"   r"   r#   r  4  s    z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__setitem__c                 S   s
   | j | S r   r   r  r"   r"   r#   r  7  s    z>TestJitClass.test_getitem_unbox.<locals>.TestClass.__getitem__Nr  r"   r"   r"   r#   r   /  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$   K  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  N  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  Q  s    zDTestJitClass.test_getitem_complex_key.<locals>.TestClass.__getitem__Nr  r"   r"   r"   r#   r   I  s   r   rs   r   c                 S   s   | t || S r   complex)r  r"  r#  r"   r"   r#   get_keyX  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_keyF  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$   i  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  l  s    zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__setitem__c                 S   s   | j |d |d f S r)  r   r  r"   r"   r#   r  o  s    zBTestJitClass.test_getitem_tuple_key.<locals>.TestClass.__getitem__Nr  r"   r"   r"   r#   r   g  s   r      r   r   c                 S   s   | d S )Nr+  r"   r  r"   r"   r#   get11u  s    z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nrq   rq   r"   r  r   r"   r"   r#   set22y  s    z2TestJitClass.test_getitem_tuple_key.<locals>.set22   r-  r  )r!   r@   r   r  r,  r/  r"   r"   r#   test_getitem_tuple_keyd  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   r2  )r!   r5  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   r6  r   r"   r.  r"   r"   r#   set26  s    z2TestJitClass.test_getitem_slice_key.<locals>.set26r6  rs   )r   r   r3   r=   r	   )r!   r@   r   r  r7  r8  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   r<  letterr"   r"   r#   r=    s     c                 S   s   g | ]}|  d  tfqS r?  )upperr   r@  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      $@)
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gaussrC  Z
bbbbbbbbbbr1   r"   r"   r#   meth1  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )rF  r1   r"   r"   r#   meth2  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r&   r'   r(   r$   rF  rG  r"   r"   r"   r#   TruncatedLabel  s   rH  )r  extendr   r3   rG  )r!   alphabetr@   rH  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   rL  )
r   r3   r   r   r   ZClassInstanceTypepickledumpsr   loads)r!   rL  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$   rT  staticmethodri   rU  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   rR  rS  r"   r"   r#   rT    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$   rT  rV  ri   r"   r"   r"   r#   Test2  s   rW  rs   r   rq   rt   r6  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   )rY  r1   Test3r"   r#   call_static  s    z;TestJitClass.test_static_methods.<locals>.Test3.call_staticN)r&   r'   r(   r$   rV  rY  r\  r"   rZ  r"   r#   r[  	  s   
r[  z#Unknown attribute 'a_static_method')r   r   r   ri   r   rU  ZassertNotEqualr=   rT  rZ   r   r\   r]   r^   r[   r   r   r\  )r!   rP   rW  t1t2r_   invalidr"   rZ  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 ra  r   r1   r"   r"   r#   r$   ,  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test2.__init__Nr%   r"   r"   r"   r#   rW  )  s   rW  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 ra  r   r1   r"   r"   r#   r$   6  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__NrV   r"   r"   r"   r#   r[  2  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 ra  r   r1   r"   r"   r#   r$   ?  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test4.__init__Nr%   r"   r"   r"   r#   Test4<  s   rb  r   r   r   r   r   ZassertDictEqualr4   r7   )r!   r@   rP   rW  r[  rb  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 ra  r   r1   r"   r"   r#   r$   K  s    zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__NrV   r"   r"   r"   r#   AnnotatedTestH  s   
re  c                   @   s   e Zd Zdd ZdS )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   s
   d| _ d S ra  r   r1   r"   r"   r#   r$   T  s    zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr%   r"   r"   r"   r#   UnannotatedTestR  s   rf  rc  )r!   r@   re  ZJitTest1rf  ZJitTest2r"   r"   r#   test_jitclass_function_usecasesE  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$   `  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.__init__c                 S   s   | j S r   r   r1   r"   r"   r#   getValuec  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   s
   | j d S r   r   r1   r"   r"   r#   getValueIncrf  s    z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r&   r'   r(   r$   rh  ri  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$   k  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.__init__c                 S   s   | j S r   r   r1   r"   r"   r#   rh  n  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.getValueN)r&   r'   r(   r$   rh  r"   r"   r"   r#   rW   i  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:   rh  ri  )ro   r   rW   rR   r"   r#   test_jitclass_isinstanceq  s    
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancers   rr   r   )r   r   r   r3   r	   r   r   r=   )r!   r@   rk  ZpyfuncZcfuncr"   rj  r#   rk  [  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"   r1   r"   r"   r#   r$     s    zCTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__init__c                 S   s   d S r   r"   r1   r"   r"   r#   	__enter__  s    zDTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__enter__N)r&   r'   r(   r$   rl  r"   r"   r"   r#   rR     s   rR   z$Method '__enter__' is not supported.)rZ   r[   r   r3   r\   r]   r^   )r!   erR   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   r1   r"   r"   r#   r$     s    z:TestJitClass.test_modulename.<locals>.TestModname.__init__Nr%   r"   r"   r"   r#   TestModname  s   rp  )r   r3   r&   r'   r=   )r!   rp  Z
thisModuleZclassModuler"   r"   r#   test_modulename  s
    zTestJitClass.test_modulename)NNN)1r&   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(  r1  r9  rK  rQ  r`  rd  rg  rk  rn  rq  r"   r"   r"   r#   r0   /   s\   
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 ra  r   r1   r"   r"   r#   r$     s    z%TestJitClassOverloads.PyList.__init__c                 C   s   | j | d S r   r   appendrS  r"   r"   r#   rt    s    z#TestJitClassOverloads.PyList.appendc                 C   s   | j   d S r   )r   clearr1   r"   r"   r#   ru    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   rv  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   rS  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   rv  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-emptyrv  r1   r"   r"   r#   __str__  s    z$TestJitClassOverloads.PyList.__str__N)r&   r'   r(   r$   rt  ru  rw  rx  ry  rz  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   )rw  r   r"   r"   r#   r  +  r  c                 S   s   t | S r   boolr   r"   r"   r#   r  ,  r  c                 S   s   |   S r   )rx  r   r"   r"   r#   r  -  r  c                 S   s   t | S r   r$  r   r"   r"   r#   r  .  r  c                 S   s   |   S r   )ry  r   r"   r"   r#   r  /  r  c                 S   s   d| kS ra  r"   r   r"   r"   r#   r  0  r  c                 S   s
   |  dS ra  )rz  r   r"   r"   r#   r  1  r  c                 S   s   t | S r   rO   r   r"   r"   r#   r  2  r  c                 S   s   |   S r   )r|  r   r"   r"   r#   r  3  r  c                 S   s   t | S r   rK   r   r"   r"   r#   r  4  r  c                 S   s   |   S r   )r}  r   r"   r"   r#   r  5  r  c                 S   s   t | S r   )r>   r   r"   r"   r#   r  6  r  c                 S   s   |   S r   )r~  r   r"   r"   r#   r  7  r  c                 S   s   t | S r   )r]   r   r"   r"   r#   r  8  r  c                 S   s   |   S r   )r  r   r"   r"   r#   r  9  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>rq   )	r   r   rN   r  r  r?   r  rt  ru  )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_bX  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 )Nrt   rv  r1   r"   r"   r#   r~  b  s    zBTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__len__c                 S   s   | j | d S r   rs  rS  r"   r"   r#   rt  e  s    zATestJitClassOverloads.test_bool_fallback.<locals>.LenClass.appendc                 S   s   | j d d S ra  )r   popr1   r"   r"   r#   r  h  s    z>TestJitClassOverloads.test_bool_fallback.<locals>.LenClass.popN)r&   r'   r(   r$   r~  rt  r  r"   r"   r"   r#   LenClass]  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   rS  r"   r"   r#   r$   y  s    zFTestJitClassOverloads.test_bool_fallback.<locals>.NormalClass.__init__Nr%   r"   r"   r"   r#   NormalClassw  s   r  r   )
r	   r   r   rN   r  r   rt  r   r  r   )r!   r  Zjit_br  ro   r  r"   r"   r#   test_bool_fallbackV  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"   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#   
FloatClass  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  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  Zjit_cr  Zjit_ir  ro   rm  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"   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$   4  s    z[TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__init__c                    s    | j |j > S r   r   r  JitIntUpdateWrapperr"   r#   __ilshift__7  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__@  s    zZTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitIntUpdateWrapper.__ior__c                    s    | j |j A S r   r   r  r  r"   r#   __ixor__C  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  2  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$   I  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__init__c                    s    | j d|j   S NgX9v@r   r  JitFloatUpdateWrapperr"   r#   __iadd__L  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__iadd__c                    s    | j d |j  S r  r   r  r  r"   r#   __ifloordiv__O  s    zbTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__ifloordiv__c                    s    | j |j d  S r   r   r  r  r"   r#   __imod__R  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imod__c                    s    | j |j  d S r   r   r  r  r"   r#   __imul__U  s    z]TestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.JitFloatUpdateWrapper.__imul__c                    s    | j |j  d S r   r   r  r  r"   r#   __ipow__X  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  F  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_funcd  s    
zNTestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.get_update_funcc                    s   g | ]} |qS r"   r"   r<  r  r  r"   r#   r=  n  s     zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+z//%*z**-/c                    s   g | ]} |qS r"   r"   r  r  r"   r#   r=  q  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   r0  )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$   J  s    zPTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__init__c                 S   s   dS )NFr"   r  r"   r"   r#   r  M  s    zNTestJitClassOverloads.test_implicit_hash_compiles.<locals>.ImplicitHash.__eq__N)r&   r'   r(   r$   r  r"   r"   r"   r#   ImplicitHashI  s   r   )r   r   )r!   r   Zjittedinstancer"   r"   r#   test_implicit_hash_compilesE  s    z1TestJitClassOverloads.test_implicit_hash_compiles)N)r&   r'   r(   r  rV  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r"   r"   r#   rr    s    .

6
2*cFm<+1rr  __main__)1r   r  rM  rD  typingrM   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   r3   r   r)   r/   r0   rr  r&   mainr"   r"   r"   r#   <module>   sH   ,	        t     @
