§
    2@Äjƒ  ã                   óÒ   — d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ d„ Zd„ Zd	„ Zd
„ Zd„ Z G d„ de¦  «        Z G d„ de¦  «        Zedk    r ej        ¦   «          dS dS )z!
Testing object mode specifics.

é    N)ÚjitÚtypes)Úutils)Ú	PYVERSION)ÚTestCasec                 ó   — | dz   }|dz   S )Né   y              @© )ÚnÚtmps     úMC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_object_mode.pyÚcomplex_constantr      s   € Ø
ˆa‰%€CØ�‰8€Oó    c                 ó   — | dz   S )Nl         4LEh›*r-P´3OF r
   ©r   s    r   Úlong_constantr      s   € ØÐ?Ñ?Ð?r   c                 ó   — | d d …= d S ©Nr
   ©Úxs    r   Údelitem_usecaser      s   € Ø	ˆ!ˆ!ˆ!ˆˆˆr   c                 óŒ   — d}t          | ¦  «        D ]1}t          |¦  «        D ]}t          | |z   ¦  «        D ]
}|||z  z  }ŒŒ Œ2|S ©Nr   )Úrange)r   Úyr   ÚiÚjÚks         r   Úloop_nest_3r      sj   € Ø	€AÝ�1‰XŒXð ð ˆÝ�q‘”ð 	ð 	ˆAÝ˜1˜q™5‘\”\ð ð �Ø�Q˜‘U‘
��ðð	ð €Hr   c                 ó   — | S r   r
   r   s    r   Úarray_of_objectr!   &   s   € Ø€Hr   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTestObjectModec                 ó˜   — t           } t          dd¬¦  «        |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d S ©Nr
   T©Úforceobjé   )r   r   ÚassertPreciseEqual©ÚselfÚpyfuncÚcfuncs      r   Útest_complex_constantz$TestObjectMode.test_complex_constant,   sO   € Ý!ˆØ&•�B Ð&Ñ&Ô& vÑ.Ô.ˆØ×Ò   r¡
¤
¨E¨E°"©I¬IÑ6Ô6Ð6Ð6Ð6r   c                 ó˜   — t           } t          dd¬¦  «        |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         d S r%   )r   r   r)   r*   s      r   Útest_long_constantz!TestObjectMode.test_long_constant1   sO   € ÝˆØ&•�B Ð&Ñ&Ô& vÑ.Ô.ˆØ×Ò   r¡
¤
¨E¨E°"©I¬IÑ6Ô6Ð6Ð6Ð6r   c                 ó  ‡‡— t           Š t          dd¬¦  «        ‰¦  «        Š|                       ‰dd¦  «         ‰dd¦  «        ¦  «         ˆfd„}ˆfd„}t          j        |¦  «         t          j        |¦  «         dS )zm
        Test bug that decref the iterator early.
        If the bug occurs, a segfault should occur
        r
   Tr&   é   c                  ó    •—  ‰ dd¦  «         d S ©Nr2   r
   )r,   s   €r   Ú	bm_pyfuncz0TestObjectMode.test_loop_nest.<locals>.bm_pyfunc?   s   ø€ ØˆF�1�a‰LŒLˆLˆLˆLr   c                  ó    •—  ‰ dd¦  «         d S r4   r
   )r-   s   €r   Úbm_cfuncz/TestObjectMode.test_loop_nest.<locals>.bm_cfuncB   s   ø€ ØˆE�!�Q‰KŒKˆKˆKˆKr   N)r   r   ÚassertEqualr   Ú	benchmark)r+   r5   r7   r-   r,   s      @@r   Útest_loop_nestzTestObjectMode.test_loop_nest6   s«   øø€ õ
 ˆØ&•�B Ð&Ñ&Ô& vÑ.Ô.ˆØ×Ò˜˜  1™œ u u¨Q°¡{¤{Ñ3Ô3Ð3ð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	õ 	Œ˜	Ñ"Ô"Ð"ÝŒ˜Ñ!Ô!Ð!Ð!Ð!r   c                 óÈ   —  t          d¬¦  «        t          ¦  «        }t          j        t	          ¦   «         gdz  ¦  «        }|                       ||¦  «        |¦  «         d S )NTr&   é
   )r   r!   ÚnpÚarrayÚobjectÚassertIs)r+   r-   Úobjarrs      r   Útest_array_of_objectz#TestObjectMode.test_array_of_objectH   sW   € Ø"•˜TÐ"Ñ"Ô"¥?Ñ3Ô3ˆÝ”�6™8œ8˜* r™/Ñ*Ô*ˆØ�Š�e�e˜F‘m”m VÑ,Ô,Ð,Ð,Ð,r   c                 ó"  — t          d¬¦  «        d„ ¦   «         }|                       |dddg¦  «        ¦  «         |                       |dddg¦  «        ¦  «         |                       |dddg¦  «        ¦  «         |                      t          ¦  «        5 } |dd¦  «         ddd¦  «         n# 1 swxY w Y   t
          dv rd	}n t
          d
v rd}nt          t
          ¦  «        ‚|                      |t          |j	        ¦  «        ¦  «         dS )z6
        Test handling of the `in` comparison
        Tr&   c                 ó
   — | |v S r   r
   )r   r   s     r   Úfooz2TestObjectMode.test_sequence_contains.<locals>.fooQ   s   € à˜�6ˆMr   é   r   é   N))é   é   )rH   é   zis not a container or iterable))rH   r<   )rH   é   )rH   r(   )rH   é   zis not iterable)
r   Ú
assertTrueÚassertFalseÚassertRaisesÚ	TypeErrorr   ÚNotImplementedErrorÚassertInÚstrÚ	exception)r+   rE   ÚraisesÚexpected_snippets       r   Útest_sequence_containsz%TestObjectMode.test_sequence_containsM   sb  € õ 
�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 	�Š˜˜˜A  1˜v™œÑ'Ô'Ð'Ø�Š˜˜˜A  1˜v™œÑ'Ô'Ð'Ø×Ò˜˜˜Q  A ™œÑ(Ô(Ð(à×Ò�yÑ)Ô)ð 	¨VØˆC��d‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ
 Ð*Ð*Ð*Ø?ÐÐÝÐ>Ð>Ð>Ø0ÐÐå%¥iÑ0Ô0Ð0à�ŠÐ&­¨FÔ,<Ñ(=Ô(=Ñ>Ô>Ð>Ð>Ð>s   ÂB0Â0B4Â7B4c                 ó  — t           } t          dd¬¦  «        |¦  «        }g d¢} ||¦  «         |                      |g ¦  «         |                      t          ¦  «        5   |d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr
   Tr&   )rH   r	   r2   é*   )r   r   r)   rO   rP   )r+   r,   r-   Úls       r   Útest_delitemzTestObjectMode.test_delitemg   sÔ   € Ý ˆØ&•�B Ð&Ñ&Ô& vÑ.Ô.ˆàˆIˆIˆØˆˆa‰ŒˆØ×Ò  2Ñ&Ô&Ð&Ø×Ò�yÑ)Ô)ð 	ð 	ØˆE�"‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á!A:Á:A>ÂA>c                 óú   ‡— d„ Št          d¬¦  «        ˆfd„¦   «         }d} ||¦  «        }|                     |¦  «        }|                      |t          |¦  «        ¦  «         |                      ||¦  «         d S )Nc                  ó   — | S r   r
   r   s    r   Úconsumerz8TestObjectMode.test_starargs_non_tuple.<locals>.consumerr   ó   € ØˆHr   Tr&   c                 ó   •—  ‰| Ž S r   r
   )r   r^   s    €r   rE   z3TestObjectMode.test_starargs_non_tuple.<locals>.foou   s   ø€ à�8˜Q�<Ðr   Úijo)r   Úpy_funcr8   Útuple)r+   rE   ÚargÚgotÚexpectr^   s        @r   Útest_starargs_non_tuplez&TestObjectMode.test_starargs_non_tupleq   s    ø€ ð	ð 	ð 	õ 
�dÐ	Ñ	Ô	ð	 ð 	 ð 	 ð 	 ñ 
Ô	ð	 ð ˆØˆc�#‰hŒhˆØ—’˜SÑ!Ô!ˆØ×Ò˜�e C™jœjÑ)Ô)Ð)Ø×Ò˜˜fÑ%Ô%Ð%Ð%Ð%r   c                 ó˜   — t          d¬¦  «        d„ ¦   «         }|                       |¦   «         |                     ¦   «         ¦  «         d S )NTr&   c                  ó   — d„ dD ¦   «         S )Nc                 ó   — g | ]}|‘ŒS r
   r
   )Ú.0r   s     r   ú
<listcomp>z?TestObjectMode.test_expr_undef.<locals>.foo.<locals>.<listcomp>ƒ   s   € Ð&Ð&Ð&˜!�AÐ&Ð&Ð&r   )rF   rG   r
   r
   r   r   rE   z+TestObjectMode.test_expr_undef.<locals>.foo€   s   € ð 'Ð&˜vÐ&Ñ&Ô&Ð&r   )r   r8   rb   )r+   rE   s     r   Útest_expr_undefzTestObjectMode.test_expr_undef   sS   € Ý	�dÐ	Ñ	Ô	ð	'ð 	'ñ 
Ô	ð	'ð 	×Ò˜˜™œ §¢¡¤Ñ.Ô.Ð.Ð.Ð.r   N)Ú__name__Ú
__module__Ú__qualname__r.   r0   r:   rB   rW   r[   rg   rm   r
   r   r   r#   r#   *   sŒ   € € € € € ð7ð 7ð 7ð
7ð 7ð 7ð
"ð "ð "ð$-ð -ð -ð
?ð ?ð ?ð4ð ð ð&ð &ð &ð/ð /ð /ð /ð /r   r#   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestObjectModeInvalidRewritezM
    Tests to ensure that rewrite passes didn't affect objmode lowering.
    c                 ón   — |                       |j        ¦  «         |                      |j        ¦  «         |S r   )rM   Ú
signaturesrN   Únopython_signatures)r+   Údisps     r   Ú_ensure_objmodez,TestObjectModeInvalidRewrite._ensure_objmode�   s2   € Ø�Š˜œÑ(Ô(Ð(Ø×Ò˜Ô1Ñ2Ô2Ð2Øˆr   c                 óÄ   ‡— d„ Šˆfd„} t          d¬¦  «        |¦  «        }|                       |d¦  «         |d¦  «        ¦  «         |                      |¦  «         dS )zo
        Test code based on user submitted issue at
        https://github.com/numba/numba/issues/2159
        c                 ó   — | S r   r
   r   s    r   Útest0zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test0—   r_   r   c                 óB   •— | dk    rt          ¦   «         ‚ ‰| ¦  «        S r   )Ú
ValueError)r   rz   s    €r   Útest1zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test1š   s%   ø€ Ø�AŠvˆvõ !‘l”lÐ"Ø�5˜‘8”8ˆOr   Tr&   r<   N)r   r8   rw   )r+   r}   Úcompiledrz   s      @r   Ú%test_static_raise_in_objmode_fallbackzBTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback’   s‡   ø€ ð
	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð &•3 Ð%Ñ%Ô% eÑ,Ô,ˆØ×Ò˜˜˜r™œ H H¨R¡L¤LÑ1Ô1Ð1Ø×Ò˜XÑ&Ô&Ð&Ð&Ð&r   c                 ó   ‡— d„ Šˆfd„} t          d¬¦  «        |¦  «        }t          j        dg¦  «        t          j        dg¦  «        f}|                       ||Ž  ||Ž ¦  «         |                      |¦  «         dS )zo
        Test code based on user submitted issue at
        https://github.com/numba/numba/issues/2169
        c                 ó   — | S r   r
   r   s    r   rz   zSTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test0«   r_   r   c                 óš   •— t          j        | ¦  «        } d|d<    ‰|                      ¦   «         |                     ¦   «         z   ¦  «        S )NrF   r   )r=   ÚasarrayÚsum)Úa1Úa2rz   s     €r   ÚtestzRTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test®   s@   ø€ Ý”˜B‘”ˆBð ˆBˆq‰EØ�5˜Ÿš™œ B§F¢F¡H¤HÑ,Ñ-Ô-Ð-r   Tr&   rH   r	   N)r   r=   r>   r8   rw   )r+   r‡   r~   Úargsrz   s       @r   Ú'test_static_setitem_in_objmode_fallbackzDTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback¥   s¡   ø€ ð	ð 	ð 	ð	.ð 	.ð 	.ð 	.ð 	.ð &•3 Ð%Ñ%Ô% dÑ+Ô+ˆÝŒx˜˜‰}Œ}�bœh¨ s™mœmÐ+ˆØ×Ò˜˜˜t˜ h h° oÑ6Ô6Ð6Ø×Ò˜XÑ&Ô&Ð&Ð&Ð&r   c                 ó¢   — d}|dz  }i }dt           i}t          |||¦  «         |d         } t          d¬¦  «        |¦  «        } |¦   «          dS )zG
        Test issue https://github.com/numba/numba/issues/3355
        zdef func():
z    np.array([1,2,3])
r=   ÚfuncTr&   N)r=   Úexecr   )r+   Ú	func_textÚloc_varsÚcustom_globalsr‹   Újitteds         r   Útest_dynamic_func_objmodez6TestObjectModeInvalidRewrite.test_dynamic_func_objmodeº   sg   € ð $ˆ	ØÐ.Ñ.ˆ	ØˆØ¥˜ˆÝˆY˜¨Ñ1Ô1Ð1Ø˜ÔˆØ#•˜dÐ#Ñ#Ô# DÑ)Ô)ˆØˆ‰Œˆˆˆr   c                 óN  — t          d¬¦  «        d„ ¦   «         } |¦   «          |                      |¦  «         |j        |j        d                  j        d         }|                      |j        ¦  «         |                      |j        t          j	        d¦  «        fg¦  «         d S )NTr&   c                  ó(   — dD ]} d„ dD ¦   «          Œd S )Nr
   c                 ó   — g | ]}d ‘ŒS )r   r
   )rk   r   s     r   rl   zZTestObjectModeInvalidRewrite.test_issue_9725_label_renaming.<locals>.f.<locals>.<listcomp>Í   s   € Ð$Ð$Ð$�q�Ð$Ð$Ð$r   r   r
   )Ú_s    r   ÚfzFTestObjectModeInvalidRewrite.test_issue_9725_label_renaming.<locals>.fÊ   s2   € àð %ð %�Ø$Ð$˜GÐ$Ñ$Ô$Ð$Ð$ð%ð %r   r   r
   )
r   rw   Ú	overloadsrt   ÚliftedrN   ru   r8   r   ÚTuple)r+   r–   r˜   s      r   Útest_issue_9725_label_renamingz;TestObjectModeInvalidRewrite.test_issue_9725_label_renamingÇ   s¨   € õ 
�dÐ	Ñ	Ô	ð	%ð 	%ñ 
Ô	ð	%ð 	
ˆ‰ŒˆØ×Ò˜QÑÔÐØ”˜Qœ\¨!œ_Ô-Ô4°QÔ7ˆØ×Ò˜Ô3Ñ4Ô4Ð4Ø×Ò˜Ô*­e¬k¸"©o¬oÐ-?Ð,@ÑAÔAÐAÐAÐAr   N)	rn   ro   rp   Ú__doc__rw   r   r‰   r‘   rš   r
   r   r   rr   rr   ˆ   sn   € € € € € ðð ðð ð ð
'ð 'ð 'ð&'ð 'ð 'ð*ð ð ðBð Bð Bð Bð Br   rr   Ú__main__)r›   Únumpyr=   ÚunittestÚnumbar   r   Ú
numba.corer   Únumba.core.utilsr   Únumba.tests.supportr   r   r   r   r   r!   r#   rr   rn   Úmainr
   r   r   ú<module>r¤      sV  ððð ð
 Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð
@ð @ð @ðð ð ðð ð ðð ð ð[/ð [/ð [/ð [/ð [/�Xñ [/ô [/ð [/ð|JBð JBð JBð JBð JB 8ñ JBô JBð JBðZ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   