a
    
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"   d/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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)Z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 u r$t |G dd dt}|}|jj}t|j }t|j }|d u rht|t	rd|
 }n|}|d ustJ | 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   r1   r   r   )r   object
class_typeinstance_typeliststructkeysvalues
isinstancer   itemsassertEquallenzip)
r!   spectest_clsall_expectedr1   Zclstynamesr8   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   rD   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 rE   )r   r   rD   rF   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"   r0   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   
rN   r   )r   r   r2   rD   r   ZListTyper   )r!   r>   rN   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(   rI   rJ   r"   r"   r"   r#   Fooe   s   
rP   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   )rI   r   r   r!   rQ   r"   r"   r#   r$   l   s    
zCTestJitClass.test_type_annotation_inheritance.<locals>.Bar.__init__r&   r'   r(   rM   rJ   r$   r"   r"   r"   r#   Barh   s   
rU   r   r   r           )r?   r@   )r   rD   r   )r!   rP   rU   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 d    n1 sj0    Y  | dt|j	 | t}t|| W d    n1 s0    Y  | 
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"   r0   r"   r"   r#   r$   z   s    z4TestJitClass.test_spec_errors.<locals>.Test.__init__Nr%   r"   r"   r"   r#   r1   x   s   r1   z*spec values should be Numba type instancesz"spec keys should be strings, got 1)rI   r   r   r2   assertRaises	TypeErrorr   assertInstr	exceptionr;   )r!   Zspec1Zspec2r1   raisesr"   r"   r#   test_spec_errorst   s    ((zTestJitClass.test_spec_errorsc                 C   s^   t g G dd d}| tj}|  W d    n1 s>0    Y  | 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"   r0   r"   r"   r#   r$      s    z4TestJitClass.test_init_errors.<locals>.Test.__init__Nr%   r"   r"   r"   r#   r1      s   r1   z"__init__() should return None, not)r   rX   r   r   rZ   r[   r\   )r!   r1   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   rb   )r!   r   r   rb   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$   rg   r"   r"   r"   r#   Float2AndArray   s   rh   )r   r   r   r2   )r!   r>   rh   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   rd   )r!   r   r   r"   r"   r#   r$      s    z4TestJitClass._make_Vector2.<locals>.Vector2.__init__Nr%   r"   r"   r"   r#   Vector2   s   rj   )r   r   r   r2   )r!   r>   rj   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   rd   objr"   r"   r#   bar   s    z*TestJitClass.test_jit_class_1.<locals>.barc                    s4    dd| }| d dd}|||jfS )Nr      {         )rg   rb   )r   rm   vecrh   rj   rn   r"   r#   foo   s    

z*TestJitClass.test_jit_class_1.<locals>.foo
   Zdtype   r`   )ri   rk   r	   npZonesr   r;   assertPreciseEqual)r!   ru   inpr   bcr"   rt   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"   rl   r"   r"   r#   identity   s    z>TestJitClass.test_jitclass_usage_from_python.<locals>.identityc                 S   s   | j | j| jfS r   rc   rl   r"   r"   r#   retrieve_attributes   s    zITestJitClass.test_jitclass_usage_from_python.<locals>.retrieve_attributesrv   rw   r   ro   rr   rp   |   }   iM  i  r   )ri   r	   ry   aranger   r.   r;   refcountdatar   box_get_dataptrZ_numba_type_r3   assertIsr   r   rb   rg   )r!   rh   r   r   rb   rm   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 )Nrf   c                   @   s   e Zd Zdd ZdS )z2TestJitClass.test_jitclass_datalayout.<locals>.Fooc                 S   s
   || _ d S r   rf   re   r"   r"   r#   r$   
  s    z;TestJitClass.test_jitclass_datalayout.<locals>.Foo.__init__Nr%   r"   r"   r"   r#   rP     s   rP   TF)r   r   r   r2   
assertTruerf   assertFalse)r!   r>   rP   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   r0   r   r"   r#   get_next_data"  s    zATestJitClass.test_deferred_type.<locals>.LinkedNode.get_next_datac                 S   s    | }|j d u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   rp   A  rq   ro   7  i  )r   r   r   r
   r	   r   r2   Zdefiner3   r4   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(   ctypesc_int32c_int16c_double_fields_r"   r"   r"   r#   CStruct^  s   r   r   )r   r   r   r   r   r2   r   	Structurec_void_pr   r   castPOINTERr;   r   r|   r}   )r!   r>   r   str   r,   Zcstructr"   r"   r#   test_c_structureN  s    zTestJitClass.test_c_structurec                 C   sh   |   }|dd}tdd }| t}||| W d    n1 sH0    Y  | dt|j d S )Nr   ro   c                 S   s   | |u S r   r"   r   r|   r"   r"   r#   do_iso  s    z#TestJitClass.test_is.<locals>.do_iszno default `is` implementation)rk   r	   rX   r   rZ   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   ro   )rk   assertIsInstance)r!   rj   rs   r"   r"   r#   test_isinstancex  s    
zTestJitClass.test_isinstancec                 C   sX   |   }| t }G dd d|}W d    n1 s80    Y  | t|jd d S )Nc                   @   s   e Zd ZdS )z+TestJitClass.test_subclassing.<locals>.SubVN)r&   r'   r(   r"   r"   r"   r#   SubV  s   r   zcannot subclass from a jitclass)rk   rX   rY   r;   r[   r\   )r!   rj   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   attrr0   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#   r1     s   r1   rp   )r2   r   r   r;   r   )r!   r   r1   rm   r"   r"   r#   test_base_class  s
    zTestJitClass.test_base_classc                 C   sX   G dd dt }| t}t| W d    n1 s80    Y  | t|jd d S )Nc                   @   s   e Zd ZdZdd ZdS )z'TestJitClass.test_globals.<locals>.Minerp   c                 S   s   d S r   r"   r0   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r2   rX   rY   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   r0   r"   r"   r#   rQ     s    z7TestJitClass.test_user_getter_setter.<locals>.Foo.valuec                 S   s   |d | _ d S r   r   re   r"   r"   r#   rQ     s    N)r&   r'   r(   r$   propertyrQ   setterr"   r"   r"   r#   rP     s
   
rP   rp   r   i  i  c                 S   s"   | j }|| _ | j }| j}|||fS r   )rQ   r   )ru   rf   r   r|   r}   r"   r"   r#   rn     s
    z1TestJitClass.test_user_getter_setter.<locals>.barr   i6  )r   r   r2   r;   r   rQ   r	   )r!   rP   ru   rn   r   r|   r}   r"   r"   r#   test_user_getter_setter  s    
z$TestJitClass.test_user_getter_setterc                 C   sX   G dd dt }| t}t| W d    n1 s80    Y  | 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"   r0   r"   r"   r#   r$     s    z:TestJitClass.test_user_deleter_error.<locals>.Foo.__init__c                 S   s   dS r   r"   r0   r"   r"   r#   rQ     s    z7TestJitClass.test_user_deleter_error.<locals>.Foo.valuec                 S   s   d S r   r"   r0   r"   r"   r#   rQ     s    N)r&   r'   r(   r$   r   rQ   deleterr"   r"   r"   r#   rP     s
   
rP   zdeleter is not supported: valuer   r!   rP   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 d    n1 s@0    Y  | t|jd | t }t|dtfg W d    n1 s0    Y  | t|jd d S )Nc                   @   s(   e Zd Zdd Zedd Zdd ZdS )z3TestJitClass.test_name_shadowing_error.<locals>.Fooc                 S   s   d S r   r"   r0   r"   r"   r#   r$     s    z<TestJitClass.test_name_shadowing_error.<locals>.Foo.__init__c                 S   s   d S r   r"   r0   r"   r"   r#   my_property  s    z?TestJitClass.test_name_shadowing_error.<locals>.Foo.my_propertyc                 S   s   d S r   r"   r0   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#   rP     s   
rP   r   zname shadowing: my_propertyr   zname shadowing: my_method)r2   rX   	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 Nro   r   r!   r   r"   r"   r#   r$     s    8TestJitClass.test_distinct_classes.<locals>.Foo.__init__c                 S   s
   | j d S r   r   r0   r"   r"   r#   run  s    3TestJitClass.test_distinct_classes.<locals>.Foo.runNr&   r'   r(   r$   r   r"   r"   r"   r#   rP     s   rP   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   r0   r"   r"   r#   r     s    r   Nr   r"   r"   r"   r#   rP     s   r   r`      rq   ro   )r   r   r2   r;   r   r   )r!   rP   ZFirstFooZ	SecondFooru   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   rQ   rS   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 )NrQ   )r   r   )rQ   clsr   r"   r#   create_my_class  s    z8TestJitClass.test_parameterized.<locals>.create_my_classrp   g(@)r2   r;   rQ   ry   arrayZtestingZassert_equal)r!   r   r   r|   r}   dr"   r   r#   test_parameterized  s    zTestJitClass.test_parameterizedc                 C   s  t tt t d}t|G dd dt}d}||}| |j| | |j|d  | |j|d  | |j|j |j}| jd8  _| |j|d  | |	d|d  | |	|d d | |
d|jd  | |d|jd  | |j|d  | jd	8  _| |j|d
  tdd }| tj}|| W d    n1 s`0    Y  | dt|j | t}|| W d    n1 s0    Y  | dt|j d S )N)rQ   _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 )Nro   r   )rQ   r   _MyClass__valuer   rS   r"   r"   r#   r$   /  s    

z;TestJitClass.test_protected_attrs.<locals>.MyClass.__init__c                 S   s   | j S r   r   r0   r"   r"   r#   private_value5  s    z@TestJitClass.test_protected_attrs.<locals>.MyClass.private_valuec                 S   s   | j S r   r   r0   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   r0   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!   Z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   rp   ro   r   r   rq   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   r2   r;   rQ   r   r   r   r   r   r   r   r	   rX   r   r   rZ   r[   r\   AttributeErrorpy_func)r!   r>   r   rQ   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   ro   r`   N)Zannotation_usecasesr   r   r   r;   r   rg   )r!   r   r>   r   rm   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"   r0   r"   r"   r#   r$     s    z3TestJitClass.test_docstring.<locals>.Apple.__init__c                 S   s   dS )foo method docstringNr"   r0   r"   r"   r#   ru     s    z.TestJitClass.test_docstring.<locals>.Apple.fooc                 S   s   dS )aval property docstringNr"   r0   r"   r"   r#   aval  s    z/TestJitClass.test_docstring.<locals>.Apple.avalN)r&   r'   r(   __doc__r$   ru   r   r   r"   r"   r"   r#   Apple  s
   r   r   r   r   r   )r   r2   r;   r   r$   ru   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   ro   g?)r   r    r   )r   r   r   r2   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   ro   rq   r   )r   r    r   )r   r   r2   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   ro   rq   r   r   rr   *   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   sz   dt fdt fdt fdtt dfdt fg}| tj}tt| W d    n1 sV0    Y  d}| |t	|j
 d S )Nr   r   r    r*   ro   r   z(VAR_POSITIONAL argument type unsupported)r   r   ZUniTuplerX   r   ZUnsupportedErrorr   r)   rZ   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"   r0   r"   r"   r#   r$     s    z>TestJitClass.test_generator_method.<locals>.TestClass.__init__c                 s   s   t |D ]}t|V  qd S r   rangery   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_genrv   )r   r2   r
  r=   r  rz   )r!   r>   r   r  r  expectrB   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 Nrv   rw   ry   zerosr   r   r0   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   ro   rq   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   ro   rq   r   r   r2   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  r0   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   rv   r   c                 S   s   d| d< | d S )N   ro   r   r"   r  r"   r"   r#   set2return1=  s    z4TestJitClass.test_getitem_unbox.<locals>.set2return1ro   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)rv   rv   rw   r  r0   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   rI   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   rq   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_keyro   rr   )r   r   r2   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  r0   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 )Nr0  r"   r  r"   r"   r#   get11u  s    z2TestJitClass.test_getitem_tuple_key.<locals>.get11c                 S   s   || d< d S )Nro   ro   r"   r  r   r"   r"   r#   set22y  s    z2TestJitClass.test_getitem_tuple_key.<locals>.set22   r2  r   )r!   r>   r   r  r1  r4  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  r0   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   r7  )r!   r:  r"   r"   r#   r    s    zBTestJitClass.test_getitem_slice_key.<locals>.TestClass.__getitem__Nr  r"   r"   r"   r#   r     s   r   r   r   ro   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 )Nro   r;  r   r"   r3  r"   r"   r#   set26  s    z2TestJitClass.test_getitem_slice_key.<locals>.set26r;  rq   )r   r   r2   r;   r	   )r!   r>   r   r  r<  r=  r"   r"   r#   test_getitem_slice_key  s    


z#TestJitClass.test_getitem_slice_keyc                 C   sZ   dd t dD }dd |D }|dd |D  t|G dd dt}|   d S )Nc                 S   s   g | ]}t td | qS r   )chrord).0r   r"   r"   r#   
<listcomp>      zFTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.<listcomp>   c                 S   s   g | ]}|d  t fqS rv   )r   rA  letterr"   r"   r#   rB    rC  c                 S   s   g | ]}|  d  tfqS rE  )upperr   rF  r"   r"   r#   rB    rC  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      $@)
aaaaaaaaaar0   r"   r"   r#   r$     s    zSTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.__init__c                 S   s   t | j| j| _d S r   )randomgaussrI  Z
bbbbbbbbbbr0   r"   r"   r#   meth1  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth1c                 S   s   |    d S r   )rL  r0   r"   r"   r#   meth2  s    zPTestJitClass.test_jitclass_longlabel_not_truncated.<locals>.TruncatedLabel.meth2N)r&   r'   r(   r$   rL  rM  r"   r"   r"   r#   TruncatedLabel  s   rN  )r
  extendr   r2   rM  )r!   alphabetr>   rN  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"   r0   r"   r"   r#   r$     s    z>TestJitClass.test_pickling.<locals>.PickleTestSubject.__init__Nr%   r"   r"   r"   r#   PickleTestSubject  s   rR  )
r   r2   r   r   r   ZClassInstanceTypepickledumpsr   loads)r!   rR  r   tyZpickledr"   r"   r#   test_pickling  s    
zTestJitClass.test_picklingc                    sX  t dtfgG dd d}t dtfgG dd d}| |jt | |jt | |jt | |j|j | d|dd | d	|dd | d
|dd |d}|d}| d|d | d	|d | d|dd | d|dd | d|dd | d|dd | d|dd | d|dd | 	t
}|dd W d    n1 s0    Y  | dt|j | 	t}|d W d    n1 s0    Y  | dt|j t g G  fddd   }| 	tj}|  W d    n1 s80    Y  | dt|j d S )Nr   c                   @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
z/TestJitClass.test_static_methods.<locals>.Test1c                 S   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   rg   r   r!   r   r"   r"   r#   increase  s    z8TestJitClass.test_static_methods.<locals>.Test1.increasec                 S   s   | | S r   r"   r   r"   r"   r#   rg     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$   rZ  staticmethodrg   r[  r"   r"   r"   r#   rN     s   
rN   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   rX  rY  r"   r"   r#   rZ    s    z8TestJitClass.test_static_methods.<locals>.Test2.increasec                 S   s   | | S r   r"   r   r"   r"   r#   rg     s    z3TestJitClass.test_static_methods.<locals>.Test2.addN)r&   r'   r(   r$   rZ  r\  rg   r"   r"   r"   r#   Test2  s   r]  rq   r   ro   rr   r;  r   y               @y              ?Zfoobarru   rn   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"   r0   r"   r"   r#   r$     s    z8TestJitClass.test_static_methods.<locals>.Test3.__init__c                 S   s   d S r   r"   r   r"   r"   r#   a_static_method  s    z?TestJitClass.test_static_methods.<locals>.Test3.a_static_methodc                    s     ddS r   )r_  r0   Test3r"   r#   call_static  s    z;TestJitClass.test_static_methods.<locals>.Test3.call_staticN)r&   r'   r(   r$   r\  r_  rb  r"   r`  r"   r#   ra  	  s   
ra  z#Unknown attribute 'a_static_method')r   r   r   rg   r   r[  ZassertNotEqualr;   rZ  rX   r   rZ   r[   r\   rY   r   r   rb  )r!   rN   r]  t1t2r]   invalidr"   r`  r#   test_static_methods  sN    ,*(z TestJitClass.test_static_methodsc                 C   s   t td}t G dd d}| |t | |jj| t|dG dd d}| |t | |jj| tG dd d}| |t | |jj| t|G d	d
 d
}| |t | |jj| d S )Nr   c                   @   s   e Zd ZU eed< dd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test1r   c                 S   s
   d| _ d S Nr   r   r0   r"   r"   r#   r$   #  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test1.__init__NrT   r"   r"   r"   r#   rN     s   
rN   )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 rg  r   r0   r"   r"   r#   r$   ,  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test2.__init__Nr%   r"   r"   r"   r#   r]  )  s   r]  c                   @   s   e Zd ZU eed< dd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test3r   c                 S   s
   d| _ d S rg  r   r0   r"   r"   r#   r$   6  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test3.__init__NrT   r"   r"   r"   r#   ra  2  s   
ra  c                   @   s   e Zd Zdd ZdS )z<TestJitClass.test_jitclass_decorator_usecases.<locals>.Test4c                 S   s
   d| _ d S rg  r   r0   r"   r"   r#   r$   ?  s    zETestJitClass.test_jitclass_decorator_usecases.<locals>.Test4.__init__Nr%   r"   r"   r"   r#   Test4<  s   rh  r   r   r   r   r   ZassertDictEqualr3   r6   )r!   r>   rN   r]  ra  rh  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 rg  r   r0   r"   r"   r#   r$   K  s    zLTestJitClass.test_jitclass_function_usecases.<locals>.AnnotatedTest.__init__NrT   r"   r"   r"   r#   AnnotatedTestH  s   
rk  c                   @   s   e Zd Zdd ZdS )zETestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTestc                 S   s
   d| _ d S rg  r   r0   r"   r"   r#   r$   T  s    zNTestJitClass.test_jitclass_function_usecases.<locals>.UnannotatedTest.__init__Nr%   r"   r"   r"   r#   UnannotatedTestR  s   rl  ri  )r!   r>   rk  ZJitTest1rl  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   rS   r"   r"   r#   r$   `  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.__init__c                 S   s   | j S r   r   r0   r"   r"   r#   getValuec  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValuec                 S   s
   | j d S r   r   r0   r"   r"   r#   getValueIncrf  s    z?TestJitClass.test_jitclass_isinstance.<locals>.Foo.getValueIncrN)r&   r'   r(   r$   rn  ro  r"   r"   r"   r#   rP   ^  s   rP   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   rS   r"   r"   r#   r$   k  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.__init__c                 S   s   | j S r   r   r0   r"   r"   r#   rn  n  s    z;TestJitClass.test_jitclass_isinstance.<locals>.Bar.getValueN)r&   r'   r(   r$   rn  r"   r"   r"   r#   rU   i  s   rU   c                    sJ   t |  frB|  }t | r0|  | dfS |  | dfS ndS d S )NrP   rU   zno match)r9   rn  ro  )rm   r   rU   rP   r"   r#   test_jitclass_isinstanceq  s    
zGTestJitClass.test_jitclass_isinstance.<locals>.test_jitclass_isinstancerq   rp   r   )r   r   r   r2   r	   r   r   r;   )r!   r>   rq  ZpyfuncZcfuncr"   rp  r#   rq  [  s    

z%TestJitClass.test_jitclass_isinstancec                 C   sZ   |  t*}tG dd dt}|  W d    n1 s:0    Y  | 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"   r0   r"   r"   r#   r$     s    zCTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__init__c                 S   s   d S r   r"   r0   r"   r"   r#   	__enter__  s    zDTestJitClass.test_jitclass_unsupported_dunder.<locals>.Foo.__enter__N)r&   r'   r(   r$   rr  r"   r"   r"   r#   rP     s   rP   z$Method '__enter__' is not supported.)rX   rY   r   r2   rZ   r[   r\   )r!   erP   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   r0   r"   r"   r#   r$     s    z:TestJitClass.test_modulename.<locals>.TestModname.__init__Nr%   r"   r"   r"   r#   TestModname  s   rv  )r   r2   r&   r'   r;   )r!   rv  Z
thisModuleZclassModuler"   r"   r#   test_modulename  s
    zTestJitClass.test_modulename)NNN)1r&   r'   r(   rD   rG   rH   rO   rW   r^   ra   ri   rk   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-  r6  r>  rQ  rW  rf  rj  rm  rq  rt  rw  r"   r"   r"   r#   r/   /   s\   
6>&X
 %S))r/   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 rg  r   r0   r"   r"   r#   r$     s    z%TestJitClassOverloads.PyList.__init__c                 C   s   | j | d S r   r   appendrY  r"   r"   r#   rz    s    z#TestJitClassOverloads.PyList.appendc                 C   s   | j   d S r   )r   clearr0   r"   r"   r#   r{    s    z"TestJitClassOverloads.PyList.clearc                 C   s   t | jd S r_   r<   r   r0   r"   r"   r#   __abs__  s    z$TestJitClassOverloads.PyList.__abs__c                 C   s   t | jd dkS )Nrq   r   r|  r0   r"   r"   r#   __bool__  s    z%TestJitClassOverloads.PyList.__bool__c                 C   s    t d}| jr|| jd 7 }|S )Nro   r   )r*  r   )r!   r}   r"   r"   r#   __complex__  s    z(TestJitClassOverloads.PyList.__complex__c                 C   s
   || j v S r   r   rY  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   r|  r0   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-emptyr|  r0   r"   r"   r#   __str__  s    z$TestJitClassOverloads.PyList.__str__N)r&   r'   r(   r$   rz  r{  r}  r~  r  r  r  r  r  r  r"   r"   r"   r#   PyList  s   r  c                      s&   t dtjfgG  fddd  S )Nr   c                       s`   e Zd Zdd Zdd Zdd Z fddZ fd	d
Z fddZ fddZ	 fddZ
dS )z9TestJitClassOverloads.get_int_wrapper.<locals>.IntWrapperc                 S   s
   || _ d S r   r   rS   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   r0   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   rS   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   r0   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>*  rC  z6TestJitClassOverloads.test_overloads.<locals>.<lambda>c                 S   s   |   S r   )r}  r   r"   r"   r#   r  +  rC  c                 S   s   t | S r   boolr   r"   r"   r#   r  ,  rC  c                 S   s   |   S r   )r~  r   r"   r"   r#   r  -  rC  c                 S   s   t | S r   r)  r   r"   r"   r#   r  .  rC  c                 S   s   |   S r   )r  r   r"   r"   r#   r  /  rC  c                 S   s   d| v S rg  r"   r   r"   r"   r#   r  0  rC  c                 S   s
   |  dS rg  )r  r   r"   r"   r#   r  1  rC  c                 S   s   t | S r   rM   r   r"   r"   r#   r  2  rC  c                 S   s   |   S r   )r  r   r"   r"   r#   r  3  rC  c                 S   s   t | S r   rI   r   r"   r"   r#   r  4  rC  c                 S   s   |   S r   )r  r   r"   r"   r#   r  5  rC  c                 S   s   t | S r   )r<   r   r"   r"   r#   r  6  rC  c                 S   s   |   S r   )r  r   r"   r"   r#   r  7  rC  c                 S   s   t | S r   )r[   r   r"   r"   r#   r  8  rC  c                 S   s   |   S r   )r  r   r"   r"   r#   r  9  rC  c                 S   s   | rdS dS )Nr   r   r"   r   r"   r"   r#   r  :  rC  c                 S   s   g | ]}t |qS r"   )r	   )rA  r  r"   r"   r#   rB  <  rC  z8TestJitClassOverloads.test_overloads.<locals>.<listcomp>ro   )	r   r   rL   r  r  r=   r  rz  r{  )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}|g d}| || | || |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 )Nrr   r|  r0   r"   r"   r#   r  b  s    zBTestJitClassOverloads.test_bool_fallback.<locals>.LenClass.__len__c                 S   s   | j | d S r   ry  rY  r"   r"   r#   rz  e  s    zATestJitClassOverloads.test_bool_fallback.<locals>.LenClass.appendc                 S   s   | j d d S rg  )r   popr0   r"   r"   r#   r  h  s    z>TestJitClassOverloads.test_bool_fallback.<locals>.LenClass.popN)r&   r'   r(   r$   r  rz  r  r"   r"   r"   r#   LenClass]  s   r  )r   ro   rq   rr   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   rY  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   rL   r  r   rz  r   r  r   )r!   r  Zjit_br  rm   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 d    n1 s0    Y  | d
t|	j | t	}	|| W d    n1 s0    Y  | d
t|	j tg G dd d}
|
 }| ||d | ||d | t}	|| W d    n1 s0    Y  | dt|	j | t	}	|| W d    n1 s0    Y  | dt|	j | t}	|| W d    n1 s0    Y  | dt|	j | t	}	|| W d    n1 sV0    Y  | 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"   r0   r"   r"   r#   r$     s    zHTestJitClassOverloads.test_numeric_fallback.<locals>.FloatClass.__init__c                 S   s   dS Nr   r"   r0   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   rI   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"   r0   r"   r"   r#   r$     s    zFTestJitClassOverloads.test_numeric_fallback.<locals>.IntClass.__init__c                 S   s   dS r_   r"   r0   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  r`   r*  rM   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"   r0   r"   r"   r#   r$     s    zHTestJitClassOverloads.test_numeric_fallback.<locals>.IndexClass.__init__c                 S   s   dS r   r"   r0   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"   r0   r"   r"   r#   r$     s    zPTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__init__c                 S   s   dS r  r"   r0   r"   r"   r#   r    s    zQTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__float__c                 S   s   dS r_   r"   r0   r"   r"   r#   r    s    zOTestJitClassOverloads.test_numeric_fallback.<locals>.FloatIntIndexClass.__int__c                 S   s   dS r   r"   r0   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*  rX   rY   rZ   r[   r\   r   )r!   r  r  r  Zjit_cr  Zjit_ir  rm   rs  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}g d}dd }ttt||D ]|\}\}}	|j}
|
||	}||}||	}t|tur| j	n| j
}|||||	 ||||
|| |||||| qttt||D ]~\}\}}	|j}
t|t|	 }}	|
||	}||}||	}| 	||||	 | 	|||
|| | 	||||| qBd S )Nc                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  z?TestJitClassOverloads.test_arithmetic_logical.<locals>.<lambda>c                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |k S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | | S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |kS r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |> S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |? S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |@ S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |B S r   r"   rd   r"   r"   r#   r    rC  c                 S   s   | |A S r   r"   rd   r"   r"   r#   r    rC  )rV   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  rM   r;   assertAlmostEqualrI   )r!   r  r  float_py_funcsint_py_funcstest_valuesr  r  r   r   r  rC   Zjit_xZjit_ycheckr"   r"   r#   test_arithmetic_logical  sf    





z-TestJitClassOverloads.test_arithmetic_logicalc                    s  |   }|  }| d }| d }tdtjfgG fddd|tdtjiG  fddd|  d }  d }dd fd	d
dD }fdd
dD }g d}	tt	t
|||f| fg|	D ]d\}
\}}\}}|
j}|||||j}| ||||||j | ||
||||j qtt	t
|||f|fg|	D ]x\}
\}}\}}t|t| }}|
j}|||||j}| ||||||j | ||
||||j q`d 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   rS   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   rS   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"   rA  r  r  r"   r#   rB  n  rC  zITestJitClassOverloads.test_arithmetic_logical_inplace.<locals>.<listcomp>)+z//%*z**-/c                    s   g | ]} |qS r"   r"   r  r  r"   r#   rB  q  rC  )z<<z>>&|^r  )r  r  mror   r   r  r   r  r  r  r	   r   r   r  rI   r;   )r!   ZJitIntWrapperZJitFloatWrapperZPyIntWrapperZPyFloatWrapperZPyIntUpdateWrapperZPyFloatUpdateWrapperr  r  r  r  Zpy_clsjit_clsr   r   r  rC   r"   )r  r  r  r#   test_arithmetic_logical_inplace)  sJ    
z5TestJitClassOverloads.test_arithmetic_logical_inplacec                 C   s  G dd d}G dd d|}dd }dd }d	d
 }dd }g d}t ||gddgD ]\}}	|	rjtn|}
|
|}|
|}|
|}t|}dD ]}| ||||d  q|D ]T\}}| |||||||||k | |||||||||k qqZd 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 )Nrv   r   r0   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(   rI   rJ   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"   rd   r"   r"   r#   py_eq  s    z4TestJitClassOverloads.test_hash_eq_ne.<locals>.py_eqc                 S   s   | |kS r   r"   rd   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   )ro   r5  )r`   rv   )rq   rq   FT)r   ro   rv      irv   )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  s4    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   re   r"   r"   r#   r$     s    zKTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__init__c                 S   s   | j S r   r   r0   r"   r"   r#   r    s    zJTestJitClassOverloads.test_bool_fallback_len.<locals>.NoBoolHasLen.__len__c                 S   s   t | S r   r  r0   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  rf   r   ro   )r   r   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"   r0   r"   r"   r#   r$     s    zNTestJitClassOverloads.test_bool_fallback_default.<locals>.NoBoolNoLen.__init__c                 S   s   t | S r   r  r0   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   ro   rq   )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"   r0   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  r\  r  r  r  r  r  r  r  r  r  r  r   r  r  r"   r"   r"   r#   rx    s    .

6
2*cFm<+1rx  __main__)1r   r  rS  rJ  typingrK   Zunittestcollectionsr   numpyry   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   r2   r   r)   r.   r/   rx  r&   mainr"   r"   r"   r#   <module>   sH   ,	        t     @
