U
    iâËdÓ  ã                   @   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 ¡ q˜d 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\}}|  ||ƒ||ƒ¡ |  ||ƒ||ƒ¡ �q˜d 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
}|||||	ƒƒ ||||
||ƒƒƒ ||||||ƒƒƒ q´t 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       @©gX9´Èv¾ó?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¡ qÜt 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 ©NgX9´Èv¾@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¡ q¸q^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   é   iøÿÿÿrx   )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     @
