
    wi                         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     l/root/.openclaw/workspace/chatterbox_venv_py311/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   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1XX  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
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

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

EE"II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    F1aLLLLLr   c                         dd           d S r4   r
   )r-   s   r   bm_cfuncz/TestObjectMode.test_loop_nest.<locals>.bm_cfuncB   s    E!QKKKKKr   N)r   r   assertEqualr   	benchmark)r+   r5   r7   r-   r,   s      @@r   test_loop_nestzTestObjectMode.test_loop_nest6   s    
 &B&&&v..1uuQ{{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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   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    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   sa    
d				 	 
		 	A1v'''A1v'''QA(((y)) 	VCdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ##?>>>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)   rN   rO   )r+   r,   r-   ls       r   test_delitemzTestObjectMode.test_delitemg   s     &B&&&v..IIa2&&&y)) 	 	E"III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	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    8Q<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#hhS!!eCjj)))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   ra   )r+   rE   s     r   test_expr_undefzTestObjectMode.test_expr_undef   sS    	d				' 	' 
		' 	.....r   N)__name__
__module____qualname__r.   r0   r:   rB   rV   rZ   rf   rl   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   )rL   
signaturesrM   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   ry   s    r   test1zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test1   s%    Avv !ll"588Or   Tr&   r<   N)r   r8   rv   )r+   r|   compiledry   s      @r   %test_static_raise_in_objmode_fallbackzBTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback   s    
	 	 		 	 	 	 	 &3%%%e,,rHHRLL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   ry   zSTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test0   r^   r   c                     t          j        |           } d|d<    |                                 |                                z             S )NrF   r   )r=   asarraysum)a1a2ry   s     r   testzRTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test   s@    BB BqE5BFFHH,---r   Tr&   rH   r	   N)r   r=   r>   r8   rv   )r+   r   r}   argsry   s       @r   'test_static_setitem_in_objmode_fallbackzDTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback   s    	 	 		. 	. 	. 	. 	. &3%%%d++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])
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
   )rj   r   s     r   rk   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   rv   	overloadsrs   liftedrM   rt   r8   r   Tuple)r+   r   r   s      r   test_issue_9725_label_renamingz;TestObjectModeInvalidRewrite.test_issue_9725_label_renaming   s     
d				% 	% 
		% 	
QQ\!_-4Q73444*ek"oo-?,@AAAAAr   N)	rm   rn   ro   __doc__rv   r~   r   r   r   r
   r   r   rq   rq      sn           
' ' '&' ' '*  B B B B Br   rq   __main__)r   numpyr=   unittestnumbar   r   
numba.corer   numba.core.utilsr   numba.tests.supportr   r   r   r   r   r!   r#   rq   rm   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HMOOOOO r   