§
    ƒÛg  ã                   óô   — 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 e¦   «         Zd
e_        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)Úcompile_isolatedÚFlags)Újit)Úutils)ÚTestCasec                 ó   — | dz   }|dz   S )Né   y              @© )ÚnÚtmps     úR/granary/edev/quantum/lib/python3.11/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   Tc                 óŒ   — 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                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestObjectModec                 ó    — t           }t          |dt          ¬¦  «        }|j        }|                       |d¦  «         |d¦  «        ¦  «         d S ©Nr
   ©Úflagsé   )r   r   ÚforceobjÚentry_pointÚassertPreciseEqual©ÚselfÚpyfuncÚcresÚcfuncs       r   Útest_complex_constantz$TestObjectMode.test_complex_constant0   sO   € Ý!ˆÝ ¨µ(Ð;Ñ;Ô;ˆØÔ ˆØ×Ò   r¡
¤
¨E¨E°"©I¬IÑ6Ô6Ð6Ð6Ð6r   c                 ó    — t           }t          |dt          ¬¦  «        }|j        }|                       |d¦  «         |d¦  «        ¦  «         d S r%   )r   r   r)   r*   r+   r,   s       r   Útest_long_constantz!TestObjectMode.test_long_constant6   sO   € ÝˆÝ ¨µ(Ð;Ñ;Ô;ˆØÔ ˆØ×Ò   r¡
¤
¨E¨E°"©I¬IÑ6Ô6Ð6Ð6Ð6r   c                 ó@  ‡‡— t           Št          ‰dt          ¬¦  «        }|j        Š|                       ‰dd¦  «         ‰dd¦  «        ¦  «         ˆfd„}ˆfd„}t          t          j        |¦  «        ¦  «         t          t          j        |¦  «        ¦  «         dS )zm
        Test bug that decref the iterator early.
        If the bug occurs, a segfault should occur
        r
   r&   é   c                  ó    •—  ‰ dd¦  «         d S ©Nr5   r
   )r.   s   €r   Ú	bm_pyfuncz0TestObjectMode.test_loop_nest.<locals>.bm_pyfuncF   s   ø€ ØˆF�1�a‰LŒLˆLˆLˆLr   c                  ó    •—  ‰ dd¦  «         d S r7   r
   )r0   s   €r   Úbm_cfuncz/TestObjectMode.test_loop_nest.<locals>.bm_cfuncI   s   ø€ ØˆE�!�Q‰KŒKˆKˆKˆKr   N)r   r   r)   r*   ÚassertEqualÚprintr   Ú	benchmark)r-   r/   r8   r:   r0   r.   s       @@r   Útest_loop_nestzTestObjectMode.test_loop_nest<   s»   øø€ õ
 ˆÝ ¨µ(Ð;Ñ;Ô;ˆØÔ ˆØ×Ò˜˜  1™œ u u¨Q°¡{¤{Ñ3Ô3Ð3ð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	õ 	�eŒo˜iÑ(Ô(Ñ)Ô)Ð)Ý�eŒo˜hÑ'Ô'Ñ(Ô(Ð(Ð(Ð(r   c                 ó´   — t          t          ¦  «        }t          j        t	          ¦   «         gdz  ¦  «        }|                       ||¦  «        |¦  «         d S )Né
   )r   r!   ÚnpÚarrayÚobjectÚassertIs)r-   r0   Úobjarrs      r   Útest_array_of_objectz#TestObjectMode.test_array_of_objectO   sJ   € Ý•OÑ$Ô$ˆÝ”�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   |                      dt          |j        ¦  «        ¦  «         dS )	z6
        Test handling of the `in` comparison
        T©r)   c                 ó
   — | |v S r   r
   )r   r   s     r   Úfooz2TestObjectMode.test_sequence_contains.<locals>.fooX   s   € à˜�6ˆMr   é   r   é   Nzis not iterable)r   Ú
assertTrueÚassertFalseÚassertRaisesÚ	TypeErrorÚassertInÚstrÚ	exception)r-   rJ   Úraisess      r   Útest_sequence_containsz%TestObjectMode.test_sequence_containsT   s*  € õ 
�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 	�Š˜˜˜A  1˜v™œÑ'Ô'Ð'Ø�Š˜˜˜A  1˜v™œÑ'Ô'Ð'Ø×Ò˜˜˜Q  A ™œÑ(Ô(Ð(à×Ò�yÑ)Ô)ð 	¨VØˆC��d‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ'­¨VÔ-=Ñ)>Ô)>Ñ?Ô?Ð?Ð?Ð?s   ÂB0Â0B4Â7B4c                 ó  — t           }t          |dt          ¬¦  «        }|j        }g d¢} ||¦  «         |                      |g ¦  «         |                      t          ¦  «        5   |d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr
   r&   )é   r	   r5   é*   )r   r   r)   r*   r+   rO   rP   )r-   r.   r/   r0   Úls        r   Útest_delitemzTestObjectMode.test_deliteme   sÔ   € Ý ˆÝ ¨µ(Ð;Ñ;Ô;ˆØÔ ˆàˆIˆIˆØˆˆa‰ŒˆØ×Ò  2Ñ&Ô&Ð&Ø×Ò�yÑ)Ô)ð 	ð 	ØˆE�"‰IŒIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á%A>Á>BÂBc                 óú   ‡— d„ Št          d¬¦  «        ˆfd„¦   «         }d} ||¦  «        }|                     |¦  «        }|                      |t          |¦  «        ¦  «         |                      ||¦  «         d S )Nc                  ó   — | S r   r
   r   s    r   Úconsumerz8TestObjectMode.test_starargs_non_tuple.<locals>.consumerq   ó   € ØˆHr   TrH   c                 ó   •—  ‰| Ž S r   r
   )r   r]   s    €r   rJ   z3TestObjectMode.test_starargs_non_tuple.<locals>.foot   s   ø€ à�8˜Q�<Ðr   Úijo)r   Úpy_funcr;   Útuple)r-   rJ   ÚargÚgotÚexpectr]   s        @r   Útest_starargs_non_tuplez&TestObjectMode.test_starargs_non_tuplep   s    ø€ ð	ð 	ð 	õ 
�dÐ	Ñ	Ô	ð	 ð 	 ð 	 ð 	 ñ 
Ô	ð	 ð ˆØˆc�#‰hŒhˆØ—’˜SÑ!Ô!ˆØ×Ò˜�e C™jœjÑ)Ô)Ð)Ø×Ò˜˜fÑ%Ô%Ð%Ð%Ð%r   N)
Ú__name__Ú
__module__Ú__qualname__r1   r3   r>   rF   rU   rZ   rf   r
   r   r   r#   r#   .   s€   € € € € € ð7ð 7ð 7ð7ð 7ð 7ð)ð )ð )ð&-ð -ð -ð
@ð @ð @ð"	ð 	ð 	ð&ð &ð &ð &ð &r   r#   c                   ó*   — e 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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   rs   s    €r   Útest1zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test1‘   s%   ø€ Ø�AŠvˆvõ !‘l”lÐ"Ø�5˜‘8”8ˆOr   r@   N)r   r;   rp   )r-   rv   Úcompiledrs   s      @r   Ú%test_static_raise_in_objmode_fallbackzBTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback‰   sx   ø€ ð
	ð 	ð 	ð	ð 	ð 	ð 	ð 	õ �u‘:”:ˆØ×Ò˜˜˜r™œ H H¨R¡L¤LÑ1Ô1Ð1Ø×Ò˜XÑ&Ô&Ð&Ð&Ð&r   c                 óì   ‡— d„ Šˆfd„}t          |¦  «        }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   rs   zSTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test0¢   r^   r   c                 óš   •— t          j        | ¦  «        } d|d<    ‰|                      ¦   «         |                     ¦   «         z   ¦  «        S )NrK   r   )rA   ÚasarrayÚsum)Úa1Úa2rs   s     €r   ÚtestzRTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test¥   s@   ø€ Ý”˜B‘”ˆBð ˆBˆq‰EØ�5˜Ÿš™œ B§F¢F¡H¤HÑ,Ñ-Ô-Ð-r   rW   r	   N)r   rA   rB   r;   rp   )r-   r€   rw   Úargsrs   s       @r   Ú'test_static_setitem_in_objmode_fallbackzDTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallbackœ   s’   ø€ ð	ð 	ð 	ð	.ð 	.ð 	.ð 	.ð 	.õ �t‘9”9ˆÝŒ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])
rA   ÚfuncTrH   N)rA   Ú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   N)rg   rh   ri   Ú__doc__rp   rx   r‚   rŠ   r
   r   r   rk   rk      sZ   € € € € € ðð ðð ð ð
'ð 'ð 'ð&'ð 'ð 'ð*ð ð ð ð r   rk   Ú__main__)r‹   ÚnumpyrA   ÚunittestÚnumba.core.compilerr   r   Únumbar   Ú
numba.corer   Únumba.tests.supportr   r   r   r   r)   Úforce_pyobjectr   r!   r#   rk   rg   Úmainr
   r   r   ú<module>r•      s[  ððð ð
 Ð Ð Ð à €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð
@ð @ð @ðð ð ð ˆ5‰7Œ7€Ø€Ô ðð ð ðð ð ðN&ð N&ð N&ð N&ð N&�Xñ N&ô N&ð N&ðb=ð =ð =ð =ð = 8ñ =ô =ð =ð@ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   