
    J/Phf                         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                     dS dS )    N)jitnjit)types)TestCasec                     | rd }nd}|S Ng333333? )xrets     Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_optional.pyreturn_double_or_noner      s     J    c                     | rd S dS r   r	   r
   s    r   return_different_statementr      s     tsr   c                 4    |rd}nd }| dk    rdS | dk    r|S d S )NF   T   r	   )r
   yzs      r   return_bool_optional_or_noner      s9     Avvt	
a tr   c                 0    | rd }n| }|| dz
  S || dz   S d S Nr   r	   )r
   val_or_nones     r   is_this_a_noner   *   s<     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                   l    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dS )TestOptionalFc                     t           } t          t          j        f          |          }dD ]*}|                      ||           ||                     +d S N)TF)r   r   r   booleanassertPreciseEqualselfpyfunccfuncvs       r   test_return_double_or_nonez'TestOptional.test_return_double_or_noneK   se    &&em%&&v.. 	9 	9A##FF1IIuuQxx8888	9 	9r   c                     t           } t          t          j        f          |          }dD ]*}|                      ||           ||                     +d S r&   )r   r   r   r'   r(   r)   s       r   test_return_different_statementz,TestOptional.test_return_different_statementR   se    +&em%&&v.. 	9 	9A##FF1IIuuQxx8888	9 	9r   c                     t           } t          t          j        t          j        f          |          }t	          j        dd          D ]/\  }}|                      |||           |||                     0d S )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ek5;011&99%i88 	? 	?DAq##FF1aLL%%1++>>>>	? 	?r   c                     t           } t          t          j        f          |          }dD ]*}|                      ||           ||                     +d S )Nr   r   r   )r   r   r   intpr(   r)   s       r   test_is_this_a_nonez TestOptional.test_is_this_a_none`   sd    #ej]##F++ 	9 	9A##FF1IIuuQxx8888	9 	9r   c                    t           } t          t          j        fd          |          }|                     |j        |j        d                  j                   dD ]*}|                      ||           ||                     +d S )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   s    1UZMD111&99(8(;<GHHH 	9 	9A##FF1IIuuQxx8888	9 	9r   c                     t           } t          t          j        t          j        f          |          }|                      |dd                     |                      |dd                     d S Nr   r   )r    r   r   r9   r=   assertFalser*   r+   r,   s      r   test_a_is_b_intpzTestOptional.test_a_is_b_intpn   sg    .ej%*-..v66a$$$q!%%%%%r   c                     t           } t          t          j        t          j        f          |          }|                      |dd                     |                      |dd                     d S rC   )r"   r   r   r9   rD   r=   rE   s      r   test_a_is_not_b_intpz!TestOptional.test_a_is_not_b_intpu   sg    .ej%*-..v66q!%%%a$$$$$r   c                     d } t          d          |          }|                      |dd           |dd                     |                      |dd            |dd                      d S )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|   s    	 	 	 5344V<<vvb$//r4AAAvvb$//r4AAAAAr   c                    d } t          d          |          }t          j        dgt          j                  }|                                }|                      |d|           |d|                     t          j                            ||           |                      |dd            |dd                      d S )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7??XtfBJ///WWYYvvb"~~uuR}}===

&&r2...vvb$//r4AAAAAr   c                    d } t          d          |          }|                     t                    5 } |d            d d d            n# 1 swxY w Y   |                     dt	          |j                             t          j        dgt          j                  }| 	                     ||           ||                     d S )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5y)) 	VE$KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	>&*++	- 	- 	- HfXRX...q66!99-----s   AAAc                     d }t          |          }t          j        d          }|                      ||d           ||d                     dS )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 9Q<r      TN)r   rV   arangerf   )r*   r+   r,   rl   s       r   test_optional_array_attributez*TestOptional.test_optional_array_attribute   s_    	  	  	  VillT**EE#t,<,<=====r   c                     t           d             t           fd            }|                      |dd                     |                      |dd          d           dS )zI
        Check that we can assign to a variable of optional type
        c                     |rd }n| }|S rK   r	   )valget_noner   s      r   make_optionalz;TestOptional.test_assign_to_optional.<locals>.make_optional   s     Jr   c                 <     | d          }|r | d          }|S )NTFr	   )rt   
run_secondr   rv   s      r   fooz1TestOptional.test_assign_to_optional.<locals>.foo   s2    c4((A .!M#u--Hr   {   F   TN)r   assertIsNonerf   )r*   ry   rv   s     @r   test_assign_to_optionalz$TestOptional.test_assign_to_optional   s     
	 	 
	 
	 	 	 	 
	 	##c5//***S$-----r   c                     dd}t          |          }|                      |             |                       |                      |d           |d                     dS )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   sq    
	 	 	 	
 V5577+++EE!HH-----r   c                 N   d }t          j        t           j        gdz            }t          j        |          }|f} t	          |          |          }|                      |d           |d                     |                      |d           |d                     dS )z
        Issue 2171
        c                     | d S | \  }}||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   s    	 	 	 k5:,*++.%%jS		&!!uuT{{333v77777r   c                 F    t           d             fd} |             dS )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                  J    g } t          d          D ]}d} |          }d S )Ni N  F)range)tmp_r   ry   s      r   workz:TestOptional.test_many_optional_none_returns.<locals>.work   s;    C5\\  CJJ r   N)r   )r*   r   ry   s     @r   test_many_optional_none_returnsz,TestOptional.test_many_optional_none_returns   sH     
	 	 
		 	 	 	 	 	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   s       !9 9 99 9 9? ? ?9 9 99 9 9& & &% % %	B 	B 	BB B B. . .> > >. . .,. . .8 8 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 s s s s8 s s sl zHMOOOOO r   