
    pi                         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*                          yy)z!
Testing object mode specifics.

    N)jittypes)utils)	PYVERSION)TestCasec                     | dz   }|dz   S )N   y              @ )ntmps     ^/opt/services/ai/voice_agent/venv/lib/python3.12/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 = y Nr
   xs    r   delitem_usecaser      s	    	!r   c                     d}t        |       D ]-  }t        |      D ]  }t        | |z         D ]
  }|||z  z  }  / |S Nr   )range)r   yr   ijks         r   loop_nest_3r      sX    	A1X q 	A1q5\ 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
y	)
TestObjectModec                 r    t         } t        dd      |      }| j                   |d       |d             y Nr
   Tforceobj   )r   r   assertPreciseEqualselfpyfunccfuncs      r   test_complex_constantz$TestObjectMode.test_complex_constant,   s2    !&B&v.r
E"I6r   c                 r    t         } t        dd      |      }| j                   |d       |d             y r%   )r   r   r)   r*   s      r   test_long_constantz!TestObjectMode.test_long_constant1   s2    &B&v.r
E"I6r   c                     t          t        dd            | j                   dd       dd             fd}fd}t        j                  |       t        j                  |       y)zm
        Test bug that decref the iterator early.
        If the bug occurs, a segfault should occur
        r
   Tr&      c                        dd       y Nr2   r
   )r,   s   r   	bm_pyfuncz0TestObjectMode.test_loop_nest.<locals>.bm_pyfunc?   s    1aLr   c                        dd       y r4   r
   )r-   s   r   bm_cfuncz/TestObjectMode.test_loop_nest.<locals>.bm_cfuncB   s    !QKr   N)r   r   assertEqualr   	benchmark)r+   r5   r7   r-   r,   s      @@r   test_loop_nestzTestObjectMode.test_loop_nest6   s]    
 &B&v.1uQ{3		 		"!r   c                      t        d      t              }t        j                  t	               gdz        }| j                   ||      |       y )NTr&   
   )r   r!   nparrayobjectassertIs)r+   r-   objarrs      r   test_array_of_objectz#TestObjectMode.test_array_of_objectH   s;    "T"?368*r/*eFmV,r   c                    t        d      d        }| j                   |dddg             | j                   |dddg             | j                   |dddg             | j                  t              5 } |dd       ddd       t
        dv rd	}nt
        d
v rd}nt        t
              | j                  |t        j                               y# 1 sw Y   TxY w)z6
        Test handling of the `in` comparison
        Tr&   c                 
    | |v S r   r
   )r   r   s     r   fooz2TestObjectMode.test_sequence_contains.<locals>.fooQ   s    6Mr      r      N))      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   s     
d		 
	 	A1v'A1v'QA(y) 	VdO	
 #?>>0%i00&F,<,<(=>	 	s   6
CCc                     t         } t        dd      |      }g d} ||       | j                  |g        | j                  t              5   |d       d d d        y # 1 sw Y   y xY w)Nr
   Tr&   )rH   r	   r2   *   )r   r   r)   rN   rO   )r+   r,   r-   ls       r   test_delitemzTestObjectMode.test_delitemg   s`     &B&v.a2&y) 	"I	 	 	s   	AA(c                     d t        d      fd       }d} ||      }|j                  |      }| j                  |t        |             | j                  ||       y )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    Q<r   ijo)r   py_funcr8   tuple)r+   rE   arggotexpectr]   s        @r   test_starargs_non_tuplez&TestObjectMode.test_starargs_non_tupleq   sc    	 
d		  
	  #hS!eCj)f%r   c                 r    t        d      d        }| j                   |       |j                                y )NTr&   c                  ,    dD  cg c]  } |  c} S c c} w )N)rF   rG   r
   r   s    r   rE   z+TestObjectMode.test_expr_undef.<locals>.foo   s      &&!A&&&s   	)r   r8   ra   )r+   rE   s     r   test_expr_undefzTestObjectMode.test_expr_undef   s3    	d		' 
	' 	.r   N)__name__
__module____qualname__r.   r0   r:   rB   rV   rZ   rf   ri   r
   r   r   r#   r#   *   s*    7
7
"$-
?4&/r   r#   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestObjectModeInvalidRewritezM
    Tests to ensure that rewrite passes didn't affect objmode lowering.
    c                 r    | j                  |j                         | j                  |j                         |S r   )rL   
signaturesrM   nopython_signatures)r+   disps     r   _ensure_objmodez,TestObjectModeInvalidRewrite._ensure_objmode   s+    (112r   c                     d fd} t        d      |      }| j                   |d       |d             | j                  |       y)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                 2    | dk(  r
t                |       S r   )
ValueError)r   rv   s    r   test1zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test1   s    Av !l"8Or   Tr&   r<   N)r   r8   rs   )r+   ry   compiledrv   s      @r   %test_static_raise_in_objmode_fallbackzBTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback   sF    
		 &3%e,rHRL1X&r   c                     d fd} t        d      |      }t        j                  dg      t        j                  dg      f}| j                   ||  ||        | j	                  |       y)zo
        Test code based on user submitted issue at
        https://github.com/numba/numba/issues/2169
        c                     | S r   r
   r   s    r   rv   zSTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test0   r^   r   c                     t        j                  |       } d|d<    | j                         |j                         z         S )NrF   r   )r=   asarraysum)a1a2rv   s     r   testzRTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test   s7    BB BqEBFFH,--r   Tr&   rH   r	   N)r   r=   r>   r8   rs   )r+   r   rz   argsrv   s       @r   'test_static_setitem_in_objmode_fallbackzDTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback   sd    		. &3%d+xx}bhhsm+tho6X&r   c                 |    d}|dz  }i }dt         i}t        |||       |d   } t        d      |      } |        y)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   sN     $	..	Y1#d#D)r   c                 B   t        d      d        } |        | j                  |       |j                  |j                  d      j                  d   }| j                  |j                         | j                  |j                  t        j                  d      fg       y )NTr&   c                  <    dD ]  } dD cg c]  }d c}  y c c}w )Nr
   r   r   r
   )_r   s     r   fzFTestObjectModeInvalidRewrite.test_issue_9725_label_renaming.<locals>.f   s"     %#$q$%$s   	r   r
   )
r   rs   	overloadsrp   liftedrM   rq   r8   r   Tuple)r+   r   r   s      r   test_issue_9725_label_renamingz;TestObjectModeInvalidRewrite.test_issue_9725_label_renaming   s     
d		% 
	% 	
QQ\\!_-44Q7334**ekk"o-?,@Ar   N)	rj   rk   rl   __doc__rs   r{   r   r   r   r
   r   r   rn   rn      s!    
'&'*Br   rn   __main__)r   numpyr=   unittestnumbar   r   
numba.corer   numba.core.utilsr   numba.tests.supportr   r   r   r   r   r!   r#   rn   rj   mainr
   r   r   <module>r      sr   
     & (
@[/X [/|JB8 JBZ zHMMO r   