§
    ƒÛgõ  ã                   óÈ   — d dl Z d dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZ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)Úcompile_isolatedÚFlags)ÚtypeofÚnjit)ÚtypesÚlowering)ÚTestCasec                 ó   — | rd }nd}|S ©Ng333333ó?© )ÚxÚrets     úO/granary/edev/quantum/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   € Øð ØˆˆàˆØˆ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#   8   s   € ð �ˆ6€Mr   c                 ó
   — | |uS )z 
    This is `not (a is b)`
    r   r    s     r   Ú
a_is_not_br%   A   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        g¦  «        }|j        }dD ]*}|                       ||¦  «         ||¦  «        ¦  «         Œ+d S ©N)TF)r   r   r   ÚbooleanÚentry_pointÚassertPreciseEqual©ÚselfÚpyfuncÚcresÚcfuncÚvs        r   Útest_return_double_or_nonez'TestOptional.test_return_double_or_noneL   sd   € Ý&ˆÝ ­¬¨Ñ8Ô8ˆØÔ ˆàð 	9ð 	9ˆAØ×#Ò# F F¨1¡I¤I¨u¨u°Q©x¬xÑ8Ô8Ð8Ð8ð	9ð 	9r   c                 ó²   — t           }t          |t          j        g¦  «        }|j        }dD ]*}|                       ||¦  «         ||¦  «        ¦  «         Œ+d S r)   )r   r   r   r*   r+   r,   r-   s        r   Útest_return_different_statementz,TestOptional.test_return_different_statementT   sd   € Ý+ˆÝ ­¬¨Ñ8Ô8ˆØÔ ˆàð 	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        g¦  «        }|j        }t          j        dd¦  «        D ]/\  }}|                       |||¦  «         |||¦  «        ¦  «         Œ0d S )N)r   r   r   )r   r   )r   r   r   Úint32r+   Ú	itertoolsÚproductr,   )r.   r/   r0   r1   r   r   s         r   Ú!test_return_bool_optional_or_nonez.TestOptional.test_return_bool_optional_or_none\   s~   € Ý-ˆÝ ­¬µe´kÐ(BÑCÔCˆØÔ ˆåÔ% i°Ñ8Ô8ð 	?ð 	?‰DˆAˆqØ×#Ò# F F¨1¨a¡L¤L°%°%¸¸1±+´+Ñ>Ô>Ð>Ð>ð	?ð 	?r   c                 ó²   — t           }t          |t          j        g¦  «        }|j        }dD ]*}|                       ||¦  «         ||¦  «        ¦  «         Œ+d S )N©éÿÿÿÿr   r   r   )r   r   r   Úintpr+   r,   r-   s        r   Útest_is_this_a_nonez TestOptional.test_is_this_a_noned   sd   € ÝˆÝ ­¬¨Ñ5Ô5ˆØÔ ˆàð 	9ð 	9ˆAØ×#Ò# F F¨1¡I¤I¨u¨u°Q©x¬xÑ8Ô8Ð8Ð8ð	9ð 	9r   c                 ó  — t           }t          ¦   «         }d|_        t          |t          j        g|¬¦  «        }|j        }|                      |j        ¦  «         dD ]*}|  	                     ||¦  «         ||¦  «        ¦  «         Œ+d S )NT)Úflagsr<   )
r   r   Úforce_pyobjectr   r   r>   r+   Ú
assertTrueÚ
objectmoder,   )r.   r/   rA   r0   r1   r2   s         r   Útest_is_this_a_none_objmodez(TestOptional.test_is_this_a_none_objmodel   sŽ   € ÝˆÝ‘”ˆØ#ˆÔÝ ­¬¨¸EÐBÑBÔBˆØÔ ˆØ�Š˜œÑ(Ô(Ð(Øð 	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        g¦  «        }|j        }|                       |dd¦  «        ¦  «         |                       |dd¦  «        ¦  «         d S ©Nr   r   )r#   r   r   r>   r+   rC   ÚassertFalse©r.   r/   r0   r1   s       r   Útest_a_is_b_intpzTestOptional.test_a_is_b_intpv   sg   € ÝˆÝ ­¬µU´ZÐ(@ÑAÔAˆØÔ ˆà�Š˜˜˜a ™œÑ$Ô$Ð$Ø×Ò˜˜˜q !™œÑ%Ô%Ð%Ð%Ð%r   c                 óê   — t           }t          |t          j        t          j        g¦  «        }|j        }|                       |dd¦  «        ¦  «         |                       |dd¦  «        ¦  «         d S rG   )r%   r   r   r>   r+   rH   rC   rI   s       r   Útest_a_is_not_b_intpz!TestOptional.test_a_is_not_b_intp~   sg   € ÝˆÝ ­¬µU´ZÐ(@ÑAÔAˆØÔ ˆà×Ò˜˜˜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   ÚassertAlmostEqual©r.   r/   r1   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   rP   s     r   r/   z0TestOptional.test_optional_array.<locals>.pyfunc’   s*   € ØˆyØ�à�!��”˜‘	��‘Ø˜”t�r   z(float32, optional(float32[:]))rR   ©ÚdtyperQ   )r   ÚnpÚarrayÚfloat32ÚcopyrS   ÚtestingÚassert_almost_equal)r.   r/   r1   Ú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 rX   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Í«  rY   )
r   ÚassertRaisesÚ	TypeErrorÚassertInÚstrÚ	exceptionr[   r\   r7   ÚassertEqual)r.   r/   r1   Ú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 rX   )Úshape)ÚarrÚdo_itÚopts      r   r/   z:TestOptional.test_optional_array_attribute.<locals>.pyfunc±   s    € ØˆCØð Ø�Ø”9˜Q”<Ðr   é   TN)r   r[   Úarangerk   )r.   r/   r1   rq   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 rO   r   )ÚvalÚget_noner   s      r   Úmake_optionalz;TestOptional.test_assign_to_optional.<locals>.make_optional¿   s   € àð Ø��à�ØˆJr   c                 ó<   •—  ‰| d¦  «        }|r ‰| d¦  «        }|S )NTFr   )ry   Ú
run_secondr!   r{   s      €r   Úfooz1TestOptional.test_assign_to_optional.<locals>.fooÇ   s2   ø€ à�˜c 4Ñ(Ô(ˆAØð .Ø!�M # uÑ-Ô-�ØˆHr   é{   Féç   TN)r   ÚassertIsNonerk   )r.   r~   r{   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   é   rO   )r   rk   rT   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 rO   r   )r   r!   r"   s      r   r/   z1TestOptional.test_optional_unpack.<locals>.pyfuncã   s   € ØˆyØ�à‘��1Ø˜!�t�r   r   N)r   r   )r   ÚTupler>   ÚOptionalr   rk   )r.   r/   ÚtupÚopt_tupÚsigr1   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   r~   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’   r~   s      €r   Úworkz:TestOptional.test_many_optional_none_returns.<locals>.workü   s;   ø€ ØˆCÝ˜5‘\”\ð ð �Ø�Ø�C˜‘J”J��ðð r   N)r   )r.   r˜   r~   s     @r   Útest_many_optional_none_returnsz,TestOptional.test_many_optional_none_returnsñ   sH   ø€ õ 
ð	ð 	ñ 
Œð	ð	ð 	ð 	ð 	ð 	ð 	ˆ‰Œˆˆˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú_numba_parallel_test_r3   r5   r:   r?   rE   rJ   rL   rU   rc   rm   rv   r‚   r†   rŽ   r™   r   r   r   r'   r'   H   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__)r8   Únumpyr[   ÚunittestÚnumba.core.compilerr   r   Únumbar   r   Ú
numba.corer   r   Únumba.tests.supportr	   r   r   r   r   r#   r%   r'   rš   Úmainr   r   r   ú<module>r¦      s3  ðØ Ð Ð Ð à Ð Ð Ð à €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ðð ð ðð ð ð 
ð 
ð 
ðð ð ðð ð ð|ð |ð |ð |ð |�8ñ |ô |ð |ð~ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   