
    ܙd                         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     <lib/python3.11/site-packages/numba/tests/test_object_mode.pycomplex_constantr      s    
a%C8O    c                     | dz   S )Nl         4LEh*r-P3O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1XX  q 	 	A1q5\\  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

EE"II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

EE"II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    F1aLLLLLr   c                         dd           d S r7   r
   )r0   s   r   bm_cfuncz/TestObjectMode.test_loop_nest.<locals>.bm_cfuncI   s    E!QKKKKKr   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uuQ{{333	 	 	 	 		 	 	 	 	 	eoi(()))eoh''(((((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$$688*r/**eeFmmV,,,,,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    6Mr      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1v'''A1v'''QA(((y)) 	VCdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'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     (;;; IIa2&&&y)) 	 	E"III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	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    8Q<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#hhS!!eCjj)))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%    Avv !ll"588Or   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HHRLL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 BqE5BFFHH,---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    	 	 		. 	. 	. 	. 	. t99x}}bhsmm+thh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             ( ( ( ( ( (  
@ @ @   577     N& N& N& N& N&X N& N& N&b= = = = =8 = = =@ zHMOOOOO r   