
    xKgf                         d dl 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 Zd Zd Zd Zd	 Zd
 Z G d de
      Zedk(  r ej&                          yy)    N)jitnjit)types)TestCasec                     | rd }|S d}|S Ng333333? )xrets     ]/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_optional.pyreturn_double_or_noner      s     J J    c                 
    | ry yr   r	   r
   s    r   return_different_statementr      s    r   c                 ,    |rd}nd }| dk(  ry| dk(  r|S y )NF   T   r	   )r
   yzs      r   return_bool_optional_or_noner      s*    Av	
a r   c                 .    | rd }n| }|| dz
  S || dz   S y Nr   r	   )r
   val_or_nones     r   is_this_a_noner   *   s2    1u1u r   c                 
    | |u S )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                 
    | |uS )z 
    This is `not (a is b)`
    r	   r   s     r   
a_is_not_br"   @   s     A:r   c                   j    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestOptionalFc                     t         } t        t        j                  f      |      }dD ]   }| j	                   ||       ||             " y N)TF)r   r   r   booleanassertPreciseEqualselfpyfunccfuncvs       r   test_return_double_or_nonez'TestOptional.test_return_double_or_noneK   sA    &&emm%&v.A##F1IuQx8 r   c                     t         } t        t        j                  f      |      }dD ]   }| j	                   ||       ||             " y r&   )r   r   r   r'   r(   r)   s       r   test_return_different_statementz,TestOptional.test_return_different_statementR   sA    +&emm%&v.A##F1IuQx8 r   c                     t         } t        t        j                  t        j                  f      |      }t	        j
                  dd      D ]%  \  }}| j                   |||       |||             ' y )N)r   r   r   )r   r   )r   r   r   int32	itertoolsproductr(   )r*   r+   r,   r
   r   s        r   !test_return_bool_optional_or_nonez.TestOptional.test_return_bool_optional_or_noneY   s\    -1ekk5;;01&9%%i8DAq##F1aL%1+> 9r   c                     t         } t        t        j                  f      |      }dD ]   }| j	                   ||       ||             " y )Nr   r   r   )r   r   r   intpr(   r)   s       r   test_is_this_a_nonez TestOptional.test_is_this_a_none`   s@    #ejj]#F+A##F1IuQx8 r   c                    t         } t        t        j                  fd      |      }| j	                  |j
                  |j                  d      j                         dD ]   }| j                   ||       ||             " y )NT)forceobjr   r7   )	r   r   r   r9   
assertTrue	overloads
signatures
objectmoder(   r)   s       r   test_is_this_a_none_objmodez(TestOptional.test_is_this_a_none_objmodeg   sh    1UZZMD1&9(8(8(;<GGHA##F1IuQx8 r   c                     t         } t        t        j                  t        j                  f      |      }| j	                   |dd             | j                   |dd             y Nr   r   )r    r   r   r9   r=   assertFalser*   r+   r,   s      r   test_a_is_b_intpzTestOptional.test_a_is_b_intpn   sK    .ejj%**-.v6a$q!%r   c                     t         } t        t        j                  t        j                  f      |      }| j	                   |dd             | j                   |dd             y rC   )r"   r   r   r9   rD   r=   rE   s      r   test_a_is_not_b_intpz!TestOptional.test_a_is_not_b_intpu   sK    .ejj%**-.v6q!%a$r   c                     d } t        d      |      }| j                   |dd       |dd             | j                   |dd        |dd              y )Nc                     || S | |z   S Nr	   r
   r   s     r   r+   z0TestOptional.test_optional_float.<locals>.pyfunc}   s    y1ur   z(float64, optional(float64))      ?皙(@)r   assertAlmostEqualrE   s      r   test_optional_floatz TestOptional.test_optional_float|   sU    	 534V<vb$/r4Avb$/r4Ar   c                 X   d } t        d      |      }t        j                  dgt        j                        }|j	                         }| j                   |d|       |d|             t        j                  j                  ||       | j                   |dd        |dd              y )Nc                 .    || S |dxx   | z  cc<   |d   S Nr   r	   rL   s     r   r+   z0TestOptional.test_optional_array.<locals>.pyfunc   s"    y!	tr   z(float32, optional(float32[:]))rN   dtyperM   )r   nparrayfloat32copyrO   testingassert_almost_equal)r*   r+   r,   cypys        r   test_optional_arrayz TestOptional.test_optional_array   s    	 867?XXtfBJJ/WWYvb"~uR}=


&&r2.vb$/r4Ar   c                 b   d } t        d      |      }| j                  t              5 } |d        d d d        | j                  dt	        j
                               t        j                  dgt        j                        }| j                   ||       ||             y # 1 sw Y   sxY w)Nc                     | d   S rS   r	   )r   s    r   r+   z6TestOptional.test_optional_array_error.<locals>.pyfunc   s    Q4Kr   z(optional(int32[:]),)z&expected array(int32, 1d, A), got Noneiͫ  rT   )
r   assertRaises	TypeErrorassertInstr	exceptionrV   rW   r2   assertEqual)r*   r+   r,   raisedr   s        r   test_optional_array_errorz&TestOptional.test_optional_array_error   s    	 .,-f5y)V$K *>&**+	- HHfXRXX.q6!9- *)s   	B%%B.c                     d }t        |      }t        j                  d      }| j                   ||d       ||d             y)zC
        Check that we can access attribute of an optional
        c                 ,    d }|r| }|j                   d   S rS   )shape)arrdo_itopts      r   r+   z:TestOptional.test_optional_array_attribute.<locals>.pyfunc   s    C99Q<r      TN)r   rV   arangerf   )r*   r+   r,   rl   s       r   test_optional_array_attributez*TestOptional.test_optional_array_attribute   s=    	  ViilT*E#t,<=r   c                     t         d        t         fd       }| j                   |dd             | j                   |dd      d       y)zI
        Check that we can assign to a variable of optional type
        c                     |rd }|S | }|S rK   r	   )valget_noner   s      r   make_optionalz;TestOptional.test_assign_to_optional.<locals>.make_optional   s     J Jr   c                 0     | d      }|r	 | d      }|S )NTFr	   )rt   
run_secondr   rv   s      r   fooz1TestOptional.test_assign_to_optional.<locals>.foo   s#    c4(A!#u-Hr   {   F   TN)r   assertIsNonerf   )r*   ry   rv   s     @r   test_assign_to_optionalz$TestOptional.test_assign_to_optional   sW     
	 
	 
	 
	 	#c5/*S$-r   c                     dd}t        |      }| j                   |        |              | j                   |d       |d             y)z
        Issue 1868
        Nc                     | d} | S r   r	   r   s    r   r+   z;TestOptional.test_optional_thru_omitted_arg.<locals>.pyfunc   s    yHr      rK   )r   rf   rE   s      r   test_optional_thru_omitted_argz+TestOptional.test_optional_thru_omitted_arg   s>    
	
 V57+E!H-r   c                 "   d }t        j                  t         j                  gdz        }t        j                  |      }|f} t	        |      |      }| j                   |d       |d             | j                   |d       |d             y)z
        Issue 2171
        c                     | y | \  }}||fS rK   r	   )r
   r   r   s      r   r+   z1TestOptional.test_optional_unpack.<locals>.pyfunc   s    y1!tr   r   N)r   r   )r   Tupler9   Optionalr   rf   )r*   r+   tupopt_tupsigr,   s         r   test_optional_unpackz!TestOptional.test_optional_unpack   sw    	 kk5::,*+..%jS	&!uT{3v7r   c                 6    t         d        fd} |        y)z
        Issue #4058
        c                     d }| rd}d|fS )N
   r   r	   )maybelxs     r   ry   z9TestOptional.test_many_optional_none_returns.<locals>.foo   s    Bb5Lr   c                  >    g } t        d      D ]  }d} |      } y )Ni N  F)range)tmp_r   ry   s      r   workz:TestOptional.test_many_optional_none_returns.<locals>.work   s$    C5\J "r   N)r   )r*   r   ry   s     @r   test_many_optional_none_returnsz,TestOptional.test_many_optional_none_returns   s#     
	 
		 	r   N)__name__
__module____qualname___numba_parallel_test_r.   r0   r5   r:   rA   rF   rH   rP   r^   rh   rq   r}   r   r   r   r	   r   r   r$   r$   G   sU    !99?99&%	BB.>.,.8$r   r$   __main__)r3   numpyrV   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HMMO r   