§
    2@Äjd  ã                   ó´   — 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     úJC:\Projects\Historical\venv\Lib\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   € Øð ØˆˆàˆØˆA‚v€vàˆ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<   € Øð ØˆˆàˆàÐØ�1‰uˆàÐØ�1‰uˆð Ð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   € ð �ˆ6€Mr   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   € Ý&ˆØ&••e”mÐ%Ñ&Ô& vÑ.Ô.ˆàð 	9ð 	9ˆAØ×#Ò# F F¨1¡I¤I¨u¨u°Q©x¬xÑ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   € Ý+ˆØ&••e”mÐ%Ñ&Ô& vÑ.Ô.ˆàð 	9ð 	9ˆAØ×#Ò# F F¨1¡I¤I¨u¨u°Q©x¬xÑ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••e”k¥5¤;Ð0Ñ1Ô1°&Ñ9Ô9ˆåÔ% i°Ñ8Ô8ð 	?ð 	?‰DˆAˆqØ×#Ò# F F¨1¨a¡L¤L°%°%¸¸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   € ÝˆØ#••e”j�]Ñ#Ô# FÑ+Ô+ˆàð 	9ð 	9ˆAØ×#Ò# F F¨1¡I¤I¨u¨u°Q©x¬xÑ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••U”Z�M¨DÐ1Ñ1Ô1°&Ñ9Ô9ˆØ�Š˜œ¨Ô(8¸Ô(;Ô<ÔGÑHÔHÐHØð 	9ð 	9ˆAØ×#Ò# F F¨1¡I¤I¨u¨u°Q©x¬xÑ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   € ÝˆØ.••e”j¥%¤*Ð-Ñ.Ô.¨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   € ÝˆØ.••e”j¥%¤*Ð-Ñ.Ô.¨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Ø�à˜1‘u�r   z(float64, optional(float64))ç      ð?çš™™™™™(@)r   ÚassertAlmostEqualrE   s      r   Útest_optional_floatz TestOptional.test_optional_float|   s‰   € ð	ð 	ð 	ð 5•Ð3Ñ4Ô4°VÑ<Ô<ˆØ×Ò˜v˜v b¨$Ñ/Ô/°°°r¸4±´ÑAÔAÐAØ×Ò˜v˜v b¨$Ñ/Ô/°°°r¸4±´Ñ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¸Ñ?Ô?ˆÝŒX�t�f¥B¤JÐ/Ñ/Ô/ˆØ�WŠW‰YŒYˆØ×Ò˜v˜v b¨"™~œ~¨u¨u°R¸©}¬}Ñ=Ô=Ð=Ý
Œ
×&Ò& r¨2Ñ.Ô.Ð.Ø×Ò˜v˜v b¨$Ñ/Ô/°°°r¸4±´Ñ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   € Ø�Q”4ˆKr   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�$‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�ŠÐ>Ý˜&Ô*Ñ+Ô+ñ	-ô 	-ð 	-õ ŒH�f�X¥R¤XÐ.Ñ.Ô.ˆØ×Ò˜˜˜q™œ 6 6¨!¡9¤9Ñ-Ô-Ð-Ð-Ð-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Øð Ø�Ø”9˜Q”<Ðr   é   TN)r   rV   Úarangerf   )r*   r+   r,   rl   s       r   Útest_optional_array_attributez*TestOptional.test_optional_array_attribute£   s_   € ð	 ð 	 ð 	 õ �V‘”ˆÝŒi˜‰lŒlˆØ×Ò˜˜  TÑ*Ô*¨E¨E°#°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   ø€ à�˜c 4Ñ(Ô(ˆAØð .Ø!�M # uÑ-Ô-�ØˆHr   é{   Féç   TN)r   ÚassertIsNonerf   )r*   ry   rv   s     @r   Útest_assign_to_optionalz$TestOptional.test_assign_to_optional±   s‰   ø€ õ 
ð	ð 	ñ 
Œð	õ 
ð	ð 	ð 	ð 	ñ 
Œð	ð 	×Ò˜#˜#˜c 5™/œ/Ñ*Ô*Ð*Ø×Ò˜˜˜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‘”ˆØ×Ò˜˜™œ 5 5¡7¤7Ñ+Ô+Ð+Ø×Ò˜˜ ™œ E E¨!¡H¤HÑ-Ô-Ð-Ð-Ð-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¨   € ð	ð 	ð 	õ Œk�5œ:˜,¨Ñ*Ñ+Ô+ˆÝ”. Ñ%Ô%ˆØˆjˆØ•�S‘	”	˜&Ñ!Ô!ˆØ×Ò˜˜ ™œ u u¨T¡{¤{Ñ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Øð Ø�Ø�b�5ˆLr   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˜‘J”J��ðð 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ÒÐØ€H„M�O„O€O€O€Oð Ðr   