
    shf                         S SK r S SKrS SKrS SKJrJr  S SKJr  S SK	J
r
  S rS rS rS rS	 rS
 r " S S\
5      r\S:X  a  \R&                  " 5         gg)    N)jitnjit)types)TestCasec                      U (       a  S nU$ SnU$ Ng333333? )xrets     m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_optional.pyreturn_double_or_noner      s     J J    c                     U (       a  g gr   r	   r
   s    r   return_different_statementr      s    r   c                 :    U(       a  SnOS nU S:X  a  gU S:X  a  U$ g )NF   T   r	   )r
   yzs      r   return_bool_optional_or_noner      s*    Av	
a r   c                 <    U (       a  S nOU nUc  U S-
  $ Ub  U S-   $ g Nr   r	   )r
   val_or_nones     r   is_this_a_noner   *   s2    1u1u r   c                     XL $ )z
Note in nopython mode, this operation does not make much sense.
Because we don't have objects anymore.
`a is b` is always False if not operating on None and Optional type
r	   abs     r   a_is_br    7   s     6Mr   c                     XL$ )z
This is `not (a is b)`
r	   r   s     r   
a_is_not_br"   @   s     :r   c                   r    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)TestOptionalG   Fc                     [         n[        [        R                  45      " U5      nS H!  nU R	                  U" U5      U" U5      5        M#     g N)TF)r   r   r   booleanassertPreciseEqualselfpyfunccfuncvs       r   test_return_double_or_none'TestOptional.test_return_double_or_noneK   s?    &emm%&v.A##F1IuQx8 r   c                     [         n[        [        R                  45      " U5      nS H!  nU R	                  U" U5      U" U5      5        M#     g r'   )r   r   r   r(   r)   r*   s       r   test_return_different_statement,TestOptional.test_return_different_statementR   s?    +emm%&v.A##F1IuQx8 r   c                     [         n[        [        R                  [        R                  45      " U5      n[        R
                  " SS5       H#  u  p4U R                  U" X45      U" X45      5        M%     g )N)r   r   r   )r   r   )r   r   r   int32	itertoolsproductr)   )r+   r,   r-   r
   r   s        r   !test_return_bool_optional_or_none.TestOptional.test_return_bool_optional_or_noneY   sT    -ekk5;;01&9%%i8DA##F1L%+> 9r   c                     [         n[        [        R                  45      " U5      nS H!  nU R	                  U" U5      U" U5      5        M#     g )Nr   r   r   )r   r   r   intpr)   r*   s       r   test_is_this_a_none TestOptional.test_is_this_a_none`   s>    ejj]#F+A##F1IuQx8 r   c                    [         n[        [        R                  4SS9" U5      nU R	                  UR
                  UR                  S      R                  5        S H!  nU R                  U" U5      U" U5      5        M#     g )NT)forceobjr   r;   )	r   r   r   r=   
assertTrue	overloads
signatures
objectmoder)   r*   s       r   test_is_this_a_none_objmode(TestOptional.test_is_this_a_none_objmodeg   sf    UZZMD1&9(8(8(;<GGHA##F1IuQx8 r   c                     [         n[        [        R                  [        R                  45      " U5      nU R	                  U" SS5      5        U R                  U" SS5      5        g Nr   r   )r    r   r   r=   rB   assertFalser+   r,   r-   s      r   test_a_is_b_intpTestOptional.test_a_is_b_intpn   sI    ejj%**-.v6a$q!%r   c                     [         n[        [        R                  [        R                  45      " U5      nU R	                  U" SS5      5        U R                  U" SS5      5        g rI   )r"   r   r   r=   rJ   rB   rK   s      r   test_a_is_not_b_intp!TestOptional.test_a_is_not_b_intpu   sI    ejj%**-.v6q!%a$r   c                     S n[        S5      " U5      nU R                  U" SS5      U" SS5      5        U R                  U" SS 5      U" SS 5      5        g )Nc                     Uc  U $ X-   $ Nr	   r
   r   s     r   r,   0TestOptional.test_optional_float.<locals>.pyfunc}   s    yur   z(float64, optional(float64))      ?皙(@)r   assertAlmostEqualrK   s      r   test_optional_float TestOptional.test_optional_float|   sS    	 34V<vb$/r4Avb$/r4Ar   c                 R   S n[        S5      " U5      n[        R                  " S/[        R                  S9nUR	                  5       nU R                  U" SU5      U" SU5      5        [        R                  R                  XC5        U R                  U" SS 5      U" SS 5      5        g )Nc                 0    Uc  U $ US==   U -  ss'   US   $ Nr   r	   rT   s     r   r,   0TestOptional.test_optional_array.<locals>.pyfunc   s"    y!	tr   z(float32, optional(float32[:]))rW   dtyperV   )r   nparrayfloat32copyrX   testingassert_almost_equal)r+   r,   r-   cypys        r   test_optional_array TestOptional.test_optional_array   s    	 67?XXtfBJJ/WWYvb"~uR}=


&&r.vb$/r4Ar   c                 h   S n[        S5      " U5      nU R                  [        5       nU" S 5        S S S 5        U R                  S[	        WR
                  5      5        [        R                  " S/[        R                  S9nU R                  U" U5      U" U5      5        g ! , (       d  f       Nv= f)Nc                     U S   $ r]   r	   )r   s    r   r,   6TestOptional.test_optional_array_error.<locals>.pyfunc   s    Q4Kr   z(optional(int32[:]),)z&expected array(int32, 1d, A), got Noneiͫ  r_   )
r   assertRaises	TypeErrorassertInstr	exceptionra   rb   r5   assertEqual)r+   r,   r-   raisedr   s        r   test_optional_array_error&TestOptional.test_optional_array_error   s    	 ,-f5y)V$K *>&**+	- HHfXRXX.q6!9- *)s   	B##
B1c                     S n[        U5      n[        R                  " S5      nU R                  U" US5      U" US5      5        g)z3
Check that we can access attribute of an optional
c                 6    S nU(       a  U nUR                   S   $ r]   )shape)arrdo_itopts      r   r,   :TestOptional.test_optional_array_attribute.<locals>.pyfunc   s    C99Q<r      TN)r   ra   arangers   )r+   r,   r-   rz   s       r   test_optional_array_attribute*TestOptional.test_optional_array_attribute   s=    	  ViilT*E#t,<=r   c                    ^ [         S 5       m[         U4S j5       nU R                  U" SS5      5        U R                  U" SS5      S5        g)z9
Check that we can assign to a variable of optional type
c                      U(       a  S nU$ U nU$ rS   r	   )valget_noner   s      r   make_optional;TestOptional.test_assign_to_optional.<locals>.make_optional   s     J Jr   c                 :   > T" U S5      nU(       a	  T" U S5      nU$ )NTFr	   )r   
run_secondr   r   s      r   foo1TestOptional.test_assign_to_optional.<locals>.foo   s#    c4(A!#u-Hr   {   F   TN)r   assertIsNoners   )r+   r   r   s     @r   test_assign_to_optional$TestOptional.test_assign_to_optional   sW     
	 
	 
	 
	 	#c5/*S$-r   c                     SS jn[        U5      nU R                  U" 5       U" 5       5        U R                  U" S5      U" S5      5        g)z
Issue 1868
Nc                     U c  Sn U $ r   r	   r   s    r   r,   ;TestOptional.test_optional_thru_omitted_arg.<locals>.pyfunc   s    yHr      rS   )r   rs   rK   s      r   test_optional_thru_omitted_arg+TestOptional.test_optional_thru_omitted_arg   s>    
	
 V57+E!H-r   c                 &   S n[         R                  " [         R                  /S-  5      n[         R                  " U5      nU4n[	        U5      " U5      nU R                  U" S5      U" S5      5        U R                  U" S5      U" S5      5        g)z
Issue 2171
c                     U c  g U u  pX4$ rS   r	   )r
   r   r   s      r   r,   1TestOptional.test_optional_unpack.<locals>.pyfunc   s    ytr   r   N)r   r   )r   Tupler=   Optionalr   rs   )r+   r,   tupopt_tupsigr-   s         r   test_optional_unpack!TestOptional.test_optional_unpack   su    	 kk5::,*+..%jS	&!uT{3v7r   c                 8   ^ [         S 5       mU4S jnU" 5         g)z
Issue #4058
c                      S nU (       a  SnSU4$ )N
   r   r	   )maybelxs     r   r   9TestOptional.test_many_optional_none_returns.<locals>.foo   s    Bb5Lr   c                  B   > / n [        S5       H  nSnT" U5      nM     g )Ni N  F)range)tmp_r   r   s      r   work:TestOptional.test_many_optional_none_returns.<locals>.work   s$    C5\J "r   N)r   )r+   r   r   s     @r   test_many_optional_none_returns,TestOptional.test_many_optional_none_returns   s#     
	 
		 	r   r	   N)__name__
__module____qualname____firstlineno___numba_parallel_test_r/   r2   r8   r>   rF   rL   rO   rY   ri   ru   r   r   r   r   r   __static_attributes__r	   r   r   r$   r$   G   sU    !99?99&%	BB.>.,.8$r   r$   __main__)r6   numpyra   unittestnumbar   r   
numba.corer   numba.tests.supportr   r   r   r   r   r    r"   r$   r   mainr	   r   r   <module>r      s\         ( 
s8 sl zMMO r   