§
    ƒÛg;^  ã                   ór  — d dl Z d dlmZ d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d d	lmZmZmZmZm Z m!Z!m"Z" d dl#Z#d dl$Z$d dl%Z% G d
„ de&¦  «        Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z, ee(¦  «        Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4 G d„ de¦  «        Z5 G d„ dee¦  «        Z6 G d„ dee¦  «        Z7 G d„ dee%j        ¦  «        Z8 G d „ d!ee%j        ¦  «        Z9 G d"„ d#ee%j        ¦  «        Z: G d$„ d%ee%j        ¦  «        Z;e<d&k    r e%j=        ¦   «          dS dS )'é    N)ÚStringIO)ÚnjitÚ	vectorize©Útypeof)ÚutilsÚtypesÚtypingÚirÚcompilerÚcpuÚcgutils)ÚCompilerÚFlags)Ú
cpu_target)ÚMemoryLeakMixinÚTestCaseÚtemp_directoryÚcreate_temp_module)ÚoverloadÚmodelsÚlower_builtinÚregister_modelÚmake_attribute_wrapperÚtype_callableÚtypeof_implc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú	Namespacec                 ól   •— || v r| |         n't          t          | ¦  «                             |¦  «        S ©N)Úsuperr   Ú__getattr__)ÚsÚkÚ	__class__s     €úR/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_array_exprs.pyr"   zNamespace.__getattr__   s1   ø€ Ø˜A�v�vˆq�Œtˆt¥5­°AÑ#6Ô#6×#BÒ#BÀ1Ñ#EÔ#EÐEó    )Ú__name__Ú
__module__Ú__qualname__r"   Ú__classcell__)r%   s   @r&   r   r      sA   ø€ € € € € ðFð Fð Fð Fð Fð Fð Fð Fð Fr'   r   c                 ó   — | |z  |z   S r    © ©ÚaÚxÚys      r&   Úaxyr2       ó   € Øˆq‰5�1‰9Ðr'   c                 ó   — | |z  |z   S r    r-   r.   s      r&   Úax2r5   #   r3   r'   c                 ó8   — | |dz  d| z  |z  z
  dz  z   d| z  z  S )Nç       @g      @ç      à?r-   ©ÚAsÚBsÚCss      r&   Úpos_rootr=   &   s.   € ØˆC�R˜2‘X " r¡'¨B¡,Ñ/°CÑ7Ñ8¸RÀ"¹WÑEÐEr'   c                 óD   — d| z  }d|z  |z  }|dz  |z
  }| |dz  z
  |z  S )Nr7   r8   r-   ©r:   r;   r<   Ú_2AsÚ_4AsCsÚ
_Bs2_4AsCss         r&   Úneg_root_common_subexprrC   )   s=   € Ø�‰7€DØ�$‰Y˜‰^€FØ˜‘(˜VÑ#€JØˆC�: Ñ$Ñ%¨Ñ-Ð-r'   c                 óJ   — d| z  }d|z  |z  }|dz  |z
  dz   }| |dz  z
  |z  S )Nr7   y                r8   r-   r?   s         r&   Úneg_root_complex_subexprrE   /   sB   € Ø�‰7€DØ�$‰Y˜‰^€FØ˜‘(˜VÑ# rÑ)€JØˆC�: Ñ$Ñ%¨Ñ-Ð-r'   c                 ór   — t          j        t          | t          j        |¦  «        dz
  d¦  «        ¦  «        S )Nç      ð?)ÚnpÚcosÚvaxyÚsin)Úa0Úa1s     r&   Ú
call_stuffrN   7   s*   € ÝŒ6•$�r�2œ6 "™:œ:¨™?¨BÑ/Ô/Ñ0Ô0Ð0r'   c                 ó&   — |dz  d| z  |z  z
  dk     S )Né   é   r   r-   r9   s      r&   Úare_roots_imaginaryrR   :   s   € Ø�!‰G�a˜"‘f˜r‘kÑ! QÒ&Ð&r'   c                 ó   — | |z  |z   S r    r-   r9   s      r&   Údiv_addrT   =   s   € Ø�‰7�R‰<Ðr'   c                 ó   — | dz  S )Né   r-   )r:   s    r&   ÚcuberW   @   s   € Ø�‰7€Nr'   c                 óX   — t          j        | |¦  «         t          j        |||¦  «        S r    )rH   rI   Úadd)r/   ÚbÚouts      r&   Úexplicit_outputr\   C   s%   € Ý„Fˆ1ˆc�N„N€NÝŒ6�#�q˜#ÑÔÐr'   c                 ó0   — | |z   }|| |z  z
  }||z  |z   }|S r    r-   )r/   rZ   ÚcÚdÚus        r&   Úvariable_name_reusera   G   s*   € Ø	ˆA‰€AØ	ˆA�‰E‰	€AØ	ˆA‰�‰	€AØ€Hr'   c                 ó  — | j         d         }t          j        ||ft          j        ¬¦  «        }t	          |¦  «        D ]J}t	          ||¦  «        D ]7}t          j        | |         | |         z
  dz  ¦  «        dz  x|||f<   |||f<   Œ8ŒK|S )Nr   ©ÚdtyperP   r8   )ÚshaperH   ÚemptyÚfloat64ÚrangeÚsum)ÚvectorsÚ	n_vectorsÚresultÚiÚjs        r&   Údistance_matrixro   O   s¬   € Ø”˜aÔ €IÝŒX�y )Ð,µB´JÐ?Ñ?Ô?€Få�9ÑÔð 7ð 7ˆÝ�q˜)Ñ$Ô$ð 	7ð 	7ˆAÝ(*¬Ø˜”˜g aœjÑ(¨QÑ.ñ)0ô )0Ø36ñ)7ð 7ˆF�1�Q�3‰K˜&  1 ™+˜+ð	7ð €Mr'   c                   óR   — e Zd Zeddi dddfd„¦   «         Zeddi dfd„¦   «         ZdS )ÚRewritesTesterNc           	      óŠ   — |st          ¦   «         }d|_        |€t          j        }|€t          j        } | |||||||¦  «        S ©NT)r   Únrtr   Útyping_contextÚtarget_context)ÚclsÚargsÚreturn_typeÚflagsÚlocalsÚlibraryru   rv   s           r&   Úmk_pipelinezRewritesTester.mk_pipeline\   s[   € ð ð 	Ý‘G”GˆEØˆŒ	ØÐ!Ý'Ô6ˆNØÐ!Ý'Ô6ˆNØˆs�> >°7¸DÀ+Ø˜&ñ"ô "ð 	"r'   c                 óT   — |st          ¦   «         }d|_         | j        |||||fi |¤ŽS rs   )r   Úno_rewritesr}   )rw   rx   ry   rz   r{   r|   Úkwss          r&   Úmk_no_rw_pipelinez RewritesTester.mk_no_rw_pipelinei   s?   € ð ð 	Ý‘G”GˆEØ ˆÔØˆsŒ˜t [°%¸ÀÐPÐPÈCÐPÐPÐPr'   )r(   r)   r*   Úclassmethodr}   r�   r-   r'   r&   rq   rq   [   sp   € € € € € ØØ+/°tÀBØ °Àdð
"ð 
"ð 
"ñ „[ð
"ð Ø15¸TÈ"Ø"&ðQð Qð Qñ „[ðQð Qð Qr'   rq   c                   ó„   — e Zd Zd„ Zd„ Zd„ Zdd„Zefd„Ze	fd„Z
d„ Zd	„ Zdd„Zd„ Zd„ Zd„ Zefd„Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestArrayExpressionsc                 óæ   — t                                |¦  «        }|                     |¦  «        }|j        }t                                |¦  «        }|                     |¦  «        }|j        }||||fS )zT
        Compile the given function both without and with rewrites enabled.
        )rq   r�   Úcompile_extraÚentry_pointr}   )	ÚselfÚfnÚarg_tysÚcontrol_pipelineÚcres_0Úcontrol_cfuncÚtest_pipelineÚcres_1Ú
test_cfuncs	            r&   Ú_compile_functionz&TestArrayExpressions._compile_functiont   sp   € õ *×;Ò;¸GÑDÔDÐØ!×/Ò/°Ñ3Ô3ˆØÔ*ˆå&×2Ò2°7Ñ;Ô;ˆØ×,Ò,¨RÑ0Ô0ˆØÔ'ˆ
à °¸zÐIÐIr'   c                 ój  — t          j        ddd¦  «        }t          j        ddd¦  «        }t          j        ddd¦  «        }d„ |||fD ¦   «         }|                      t          |¦  «        \  }}}}t                               |¦  «        }	|	                     t          ¦  «        }
|
j        } ||||¦  «        } ||||¦  «        } ||||¦  «        }t           j	         
                    ||¦  «         t           j	         
                    ||¦  «         |j        j        j        }|j        j        j        }|	j        j        j        }|                      t          |¦  «        t          |¦  «        ¦  «         |                      t          |¦  «        t          |¦  «        ¦  «         |                      t          |d         j        ¦  «        t          |d         j        ¦  «        ¦  «         |                      t          |d         j        ¦  «        t          |d         j        ¦  «        ¦  «         dS )zv
        Using a simple array expression, verify that rewriting is taking
        place, and is fusing loops.
        r   é   é
   rP   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r-   r   ©Ú.0Úargs     r&   ú
<listcomp>z9TestArrayExpressions.test_simple_expr.<locals>.<listcomp>Š   ó   € Ð4Ð4Ð4 3•6˜#‘;”;Ð4Ð4Ð4r'   N)rH   Úlinspacer‘   r2   rq   r�   r†   r5   r‡   ÚtestingÚassert_array_equalÚstateÚfunc_irÚblocksÚassertEqualÚlenÚassertGreaterÚbody)rˆ   ÚAÚXÚYrŠ   r‹   Únb_axy_0rŽ   Únb_axy_1Úcontrol_pipeline2Úcres_2Únb_ctlÚexpectedÚactualÚcontrolÚir0Úir1Úir2s                     r&   Útest_simple_exprz%TestArrayExpressions.test_simple_expr‚   sé  € õ
 ŒK˜˜!˜BÑÔˆÝŒK˜˜!˜BÑÔˆÝŒK˜˜!˜BÑÔˆØ4Ð4¨1¨a°¨)Ð4Ñ4Ô4ˆð ×"Ò"¥3¨Ñ0Ô0ñ 	<Ð˜( M°8õ +×<Ò<¸WÑEÔEÐØ"×0Ò0µÑ5Ô5ˆØÔ#ˆà�8˜A˜q !Ñ$Ô$ˆØ�˜!˜Q Ñ"Ô"ˆØ�&˜˜A˜q‘/”/ˆÝ
Œ
×%Ò% h°Ñ7Ô7Ð7Ý
Œ
×%Ò% g¨vÑ6Ô6Ð6àÔ$Ô,Ô3ˆØÔ!Ô)Ô0ˆØÔ%Ô-Ô4ˆØ×Ò�˜S™œ¥3 s¡8¤8Ñ,Ô,Ð,Ø×Ò�˜S™œ¥3 s¡8¤8Ñ,Ô,Ð,à×Ò�3˜s 1œvœ{Ñ+Ô+­S°°Q´´Ñ-=Ô-=Ñ>Ô>Ð>Ø×Ò�˜S œVœ[Ñ)Ô)­3¨s°1¬v¬{Ñ+;Ô+;Ñ<Ô<Ð<Ð<Ð<r'   c              #   ó®   K  — |D ]O}t          |t          j        ¦  «        r3t          |j        t          j        ¦  «        r|j        j        dk    r|V — ŒPd S )NÚ	arrayexpr)Ú
isinstancer   ÚAssignÚvalueÚExprÚop)rˆ   ÚblockÚinstrs      r&   Ú_get_array_exprsz%TestArrayExpressions._get_array_exprs¢   sb   è è € Øð 	$ð 	$ˆEÝ˜%¥¤Ñ+Ô+ð $Ý˜eœk­2¬7Ñ3Ô3ð $Ø”{”~¨Ò4Ð4Ø#˜˜˜øð		$ð 	$r'   Nc                 ó‚  — |€t          ¦   «         }t          |t          ¦  «        s"t          d                     |¦  «        ¦  «        ‚|\  }}g }|D ]E}t          |t          ¦  «        r|                      ||¦  «        \  }}|                     |¦  «         ŒF|t          |¦  «        f}|                     |¦  «         ||fS )zK
        Convert an array expression tree into a set of operators.
        Nz{0} not a tuple)Úsetr¶   ÚtupleÚ
ValueErrorÚformatÚ_array_expr_to_setÚappendrY   )	rˆ   Úexprr[   Ú	operationÚoperandsÚprocessed_operandsÚoperandÚ_Úprocessed_exprs	            r&   rÃ   z'TestArrayExpressions._array_expr_to_set©   sÓ   € ð ˆ;Ý‘%”%ˆCÝ˜$¥Ñ&Ô&ð 	=ÝÐ.×5Ò5°dÑ;Ô;Ñ<Ô<Ð<Ø"Ñˆ	�8ØÐØð 	/ð 	/ˆGÝ˜'¥5Ñ)Ô)ð CØ!×4Ò4°W¸cÑBÔB‘
�˜Ø×%Ò% gÑ.Ô.Ð.Ð.Ø"¥EÐ*<Ñ$=Ô$=Ð=ˆØ�Š�ÑÔÐØ˜sÐ"Ð"r'   c                 ó¼  — t           j                             d¦  «        }t           j                             d¦  «        dz   }t           j                             d¦  «        }d„ |||fD ¦   «         }t                               |¦  «        }|                     |¦  «        }|j        }t                               |¦  «        }	|	                     |¦  «        }
|
j        } ||||¦  «        } ||||¦  «        } ||||¦  «        }t           j                             ||¦  «         t           j                             ||¦  «         t          t          ¦   «         ¦  «        S )Nr”   rG   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r-   r   r–   s     r&   r™   z<TestArrayExpressions._test_root_function.<locals>.<listcomp>Á   rš   r'   )rH   Úrandomrq   r�   r†   r‡   r}   rœ   Úassert_array_almost_equalr   r{   )rˆ   r‰   r¥   ÚBÚCrŠ   r‹   Úcontrol_cresÚnb_fn_0rŽ   Ú	test_cresÚnb_fn_1Ú	np_resultÚnb_result_0Únb_result_1s                  r&   Ú_test_root_functionz(TestArrayExpressions._test_root_function»   s7  € ÝŒI×Ò˜RÑ Ô ˆÝŒI×Ò˜RÑ Ô  2Ñ%ˆõ ŒI×Ò˜RÑ Ô ˆØ4Ð4¨1¨a°¨)Ð4Ñ4Ô4ˆå)×;Ò;¸GÑDÔDÐØ'×5Ò5°bÑ9Ô9ˆØÔ*ˆå&×2Ò2°7Ñ;Ô;ˆØ!×/Ò/°Ñ3Ô3ˆ	ØÔ'ˆà�B�q˜!˜Q‘K”Kˆ	Ø�g˜a  AÑ&Ô&ˆØ�g˜a  AÑ&Ô&ˆÝ
Œ
×,Ò,¨Y¸ÑDÔDÐDÝ
Œ
×,Ò,¨[¸+ÑFÔFÐFå�™œÑ"Ô"Ð"r'   c                 óö  — t          j        dt           j        ¬¦  «        }t          |¦  «        f}t                               |¦  «        }|                     |¦  «        }|j        }t                               |¦  «        }|                     |¦  «        }|j        }	|dz  }
|  	                    |
 ||¦  «        ¦  «         |  	                    |
 |	|¦  «        ¦  «         t          t          ¦   «         ¦  «        S )Nr”   rc   rV   )rH   Úarangerg   r   rq   r�   r†   r‡   r}   ÚassertPreciseEqualr   r{   )rˆ   r‰   r¥   rŠ   r‹   rÒ   rÓ   rŽ   rÔ   rÕ   r­   s              r&   Ú_test_cube_functionz(TestArrayExpressions._test_cube_functionÓ   sÙ   € ÝŒI�b¥¤
Ð+Ñ+Ô+ˆÝ˜!‘9”9�,ˆå)×;Ò;¸GÑDÔDÐØ'×5Ò5°bÑ9Ô9ˆØÔ*ˆå&×2Ò2°7Ñ;Ô;ˆØ!×/Ò/°Ñ3Ô3ˆ	ØÔ'ˆà˜‘6ˆØ×Ò ¨'¨'°!©*¬*Ñ5Ô5Ð5Ø×Ò ¨'¨'°!©*¬*Ñ5Ô5Ð5å�™œÑ"Ô"Ð"r'   c                 ó€  ‡	‡
— t          j        dt           j        ¬¦  «        Š	‰	dz   Š
t          ‰	¦  «        fdz  }|                      ||¦  «        \  }}}}ˆ	ˆ
fd„} ||¦  «        }|                      | ||¦  «        ¦  «         |                      | ||¦  «        ¦  «         t          t          ¦   «         ¦  «        S )z
        Test function having a (a, b, out) signature where *out* is
        an output array the function writes into.
        r”   rc   r“   rV   c                 óJ   •— t          j        ‰¦  «        } | ‰‰|¦  «         |S r    )rH   Ú
zeros_like)r‰   r[   r¥   rÐ   s     €€r&   Úrun_funczETestArrayExpressions._test_explicit_output_function.<locals>.run_funcñ   s(   ø€ Ý”- Ñ"Ô"ˆCØˆBˆq�!�S‰MŒMˆMØˆJr'   )rH   rÛ   rg   r   r‘   rÜ   r   r{   )rˆ   r‰   rŠ   r‹   r�   rŽ   r�   rá   r­   r¥   rÐ   s            @@r&   Ú_test_explicit_output_functionz3TestArrayExpressions._test_explicit_output_functionå   sÚ   øø€ õ
 ŒI�b¥¤
Ð+Ñ+Ô+ˆØ�‰EˆÝ˜!‘9”9�, Ñ"ˆð ×"Ò" 2 wÑ/Ô/ñ 	CÐ˜-¨¸
ð	ð 	ð 	ð 	ð 	ð 	ð
 �8˜B‘<”<ˆØ×Ò ¨(¨(°=Ñ*AÔ*AÑBÔBÐBØ×Ò ¨(¨(°:Ñ*>Ô*>Ñ?Ô?Ð?å�™œÑ"Ô"Ð"r'   c                 ó�   — t          t          |                      |¦  «        ¦  «        ¦  «        }|                      ||¦  «         dS )z`
        Assert the *block* has the expected number of array expressions
        in it.
        N)r¢   Úlistr½   r¡   )rˆ   r»   Úexpected_countÚrewrite_counts       r&   Ú_assert_array_exprsz(TestArrayExpressions._assert_array_exprsü   sC   € õ
 �D ×!6Ò!6°uÑ!=Ô!=Ñ>Ô>Ñ?Ô?ˆØ×Ò˜¨Ñ7Ô7Ð7Ð7Ð7r'   Fc                 óZ  — |                       t          |¦  «        t          |¦  «        ¦  «         |d         j        }|d         j        }|                      |d¦  «         |                      |d¦  «         |s2|                      t          |¦  «        t          |¦  «        ¦  «         dS dS )zµ
        Given two dictionaries of Numba IR blocks, check to make sure the
        control IR has no array expressions, while the test IR
        contains one and only one.
        r   r“   N)r¡   r¢   r¤   rç   r£   )rˆ   Ú
control_irÚtest_irÚtrivialÚcontrol_blockÚ
test_blocks         r&   Ú_assert_total_rewritez*TestArrayExpressions._assert_total_rewrite  sª   € ð 	×Ò�˜Z™œ­#¨g©,¬,Ñ7Ô7Ð7Ø" 1œÔ*ˆØ˜Q”Z”_ˆ
Ø× Ò  °Ñ2Ô2Ð2Ø× Ò  ¨QÑ/Ô/Ð/Øð 	Dð ×Ò�s =Ñ1Ô1µ3°z±?´?ÑCÔCÐCÐCÐCð		Dð 	Dr'   c                 óz  — |                       t          |¦  «        t          |¦  «        ¦  «         |                     ¦   «         D ]u\  }}|j        }||         j        }|                       t          |¦  «        t          |¦  «        ¦  «         |                      |d¦  «         |                      |d¦  «         ŒvdS )z–
        Given two dictionaries of Numba IR blocks, check to make sure
        the control IR and the test IR both have no array expressions.
        r   N)r¡   r¢   Úitemsr¤   rç   )rˆ   ré   rê   r$   Úvrì   rí   s          r&   Ú_assert_no_rewritez'TestArrayExpressions._assert_no_rewrite  s´   € ð
 	×Ò�˜Z™œ­#¨g©,¬,Ñ7Ô7Ð7à×$Ò$Ñ&Ô&ð 	4ð 	4‰DˆAˆqØœFˆMØ  œœˆJØ×Ò�S Ñ/Ô/µ°Z±´ÑAÔAÐAØ×$Ò$ ]°AÑ6Ô6Ð6Ø×$Ò$ Z°Ñ3Ô3Ð3Ð3ð	4ð 	4r'   c                 ó®   — |                       ¦   «         }|                      |j        j        j        j        |j        j        j        j        d¬¦  «         dS )z�
        Ensure even a non-nested expression is rewritten, as it can enable
        scalar optimizations such as rewriting `x ** 2`.
        T)rë   N)rÝ   rî   r‹   rž   rŸ   r    rŽ   ©rˆ   Únss     r&   Útest_trivial_exprz&TestArrayExpressions.test_trivial_expr$  s\   € ð
 ×%Ò%Ñ'Ô'ˆØ×"Ò" 2Ô#6Ô#<Ô#DÔ#KØ#%Ô#3Ô#9Ô#AÔ#HØ+/ð 	#ñ 	1ô 	1ð 	1ð 	1ð 	1r'   c                 óª   — |                       ¦   «         }|                      |j        j        j        j        |j        j        j        j        ¦  «         dS )z´
        Using the polynomial root function, ensure the full expression is
        being put in the same kernel with no remnants of intermediate
        array expressions.
        N)rÙ   rî   r‹   rž   rŸ   r    rŽ   rô   s     r&   Útest_complicated_exprz*TestArrayExpressions.test_complicated_expr.  sY   € ð ×%Ò%Ñ'Ô'ˆØ×"Ò" 2Ô#6Ô#<Ô#DÔ#KØ#%Ô#3Ô#9Ô#AÔ#Hñ	Jô 	Jð 	Jð 	Jð 	Jr'   c           
      ó²  ‡ — ‰                       |¦  «        }|j        j        j        j        }|j        j        j        j        }‰                      t          |¦  «        t          |¦  «        ¦  «         ‰                      t          |d         j	        ¦  «        t          |d         j	        ¦  «        ¦  «         ‰                      t          t          ‰                      |d         j	        ¦  «        ¦  «        ¦  «        d¦  «         t          ‰                      |d         j	        ¦  «        ¦  «        }‰                      t          |¦  «        d¦  «         t          ˆ fd„|D ¦   «         ¦  «        }t          |dd…         |dd…         ¦  «        D ]D\  }}|                     |¦  «        }	|	r(‰                      d                     |	¦  «        ¦  «         ŒEdS )zp
        Attempt to verify that rewriting will incorporate user common
        subexpressions properly.
        r   r“   c              3   ób   •K  — | ])}‰                      |j        j        ¦  «        d          V — Œ*dS )r“   N)rÃ   r¸   rÅ   )r—   r¼   rˆ   s     €r&   ú	<genexpr>zBTestArrayExpressions.test_common_subexpressions.<locals>.<genexpr>K  sO   øè è € ð :ð :Ø#ð ×1Ò1°%´+Ô2BÑCÔCÀAÔFð :ð :ð :ð :ð :ð :r'   Néÿÿÿÿz9Common subexpressions detected in array expressions ({0}))rÙ   r‹   rž   rŸ   r    rŽ   r¡   r¢   r£   r¤   rä   r½   ÚzipÚintersectionÚfailrÂ   )
rˆ   r‰   rõ   r°   r±   Úarray_expr_instrsÚ
array_setsÚ
expr_set_0Ú
expr_set_1Úintersectionss
   `         r&   Útest_common_subexpressionsz/TestArrayExpressions.test_common_subexpressions8  sÆ  ø€ ð
 ×%Ò% bÑ)Ô)ˆØÔ!Ô'Ô/Ô6ˆØÔÔ$Ô,Ô3ˆØ×Ò�˜S™œ¥3 s¡8¤8Ñ,Ô,Ð,Ø×Ò�3˜s 1œvœ{Ñ+Ô+­S°°Q´´Ñ-=Ô-=Ñ>Ô>Ð>Ø×Ò��T $×"7Ò"7¸¸A¼¼Ñ"DÔ"DÑEÔEÑFÔFÈÑJÔJÐJõ
 ! ×!6Ò!6°s¸1´v´{Ñ!CÔ!CÑDÔDÐØ×Ò�3Ð0Ñ1Ô1°1Ñ5Ô5Ð5õ ð :ð :ð :ð :Ø'8ð:ñ :ô :ñ :ô :ˆ
å&)¨*°S°b°S¬/¸:ÀaÀbÀb¼>Ñ&JÔ&Jð 	Eð 	EÑ"ˆJ˜
Ø&×3Ò3°JÑ?Ô?ˆMØð EØ—	’	ð .ß.4ªf°]Ñ.CÔ.CñEô Eð Eøð	Eð 	Er'   c                 ó6   — |                       t          ¦  «        S r    )r  rE   )rˆ   s    r&   Útest_complex_subexpressionz/TestArrayExpressions.test_complex_subexpressionS  s   € Ø×.Ò.Õ/GÑHÔHÐHr'   c                 ó  — t           j                             d¦  «        }t           j                             d¦  «        }d„ ||fD ¦   «         }t          j        j        }t
                               ||j        |j        ¬¦  «        }| 	                    t          ¦  «        }|j        }t
                               ||j        |j        ¬¦  «        }| 	                    t          ¦  «        }	|	j        }
t          ||¦  «        } |||¦  «        } |
||¦  «        }t           j                             ||¦  «         t           j                             ||¦  «         |                      |j        j        j        |j        j        j        ¦  «         dS )zn
        Verify that ufunc and DUFunc calls are being properly included in
        array expressions.
        r”   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r-   r   r–   s     r&   r™   zDTestArrayExpressions.test_ufunc_and_dufunc_calls.<locals>.<listcomp>]  s   € Ð1Ð1Ð1 3•6˜#‘;”;Ð1Ð1Ð1r'   )ru   rv   N)rH   rÎ   rJ   Ú_dispatcherÚtargetdescrrq   r�   ru   rv   r†   rN   r‡   r}   rœ   rÏ   rî   rž   rŸ   r    )rˆ   r¥   rÐ   rŠ   Ú
vaxy_descrr‹   rŒ   Únb_call_stuff_0rŽ   r�   Únb_call_stuff_1r­   r¯   r®   s                 r&   Útest_ufunc_and_dufunc_callsz0TestArrayExpressions.test_ufunc_and_dufunc_callsV  s}  € õ
 ŒI×Ò˜RÑ Ô ˆÝŒI×Ò˜RÑ Ô ˆØ1Ð1¨1¨a¨&Ð1Ñ1Ô1ˆåÔ%Ô1ˆ
Ý)×;Ò;ØØ%Ô4Ø%Ô4ð <ñ 6ô 6Ðð "×/Ò/µ
Ñ;Ô;ˆØ Ô,ˆå&×2Ò2ØØ%Ô4Ø%Ô4ð 3ñ 6ô 6ˆð ×,Ò,­ZÑ8Ô8ˆØ Ô,ˆå˜a Ñ#Ô#ˆØ!�/ ! QÑ'Ô'ˆØ �  AÑ&Ô&ˆÝ
Œ
×,Ò,¨X°wÑ?Ô?Ð?Ý
Œ
×,Ò,¨X°vÑ>Ô>Ð>à×"Ò"Ð#3Ô#9Ô#AÔ#HØ#0Ô#6Ô#>Ô#Eñ	Gô 	Gð 	Gð 	Gð 	Gr'   c                 ó¶   — |                       t          ¦  «        }|                      |j        j        j        j        |j        j        j        j        ¦  «         dS )zQ
        Verify that comparison operators are supported by the rewriter.
        N)rÙ   rR   rî   r‹   rž   rŸ   r    rŽ   rô   s     r&   Útest_cmp_opz TestArrayExpressions.test_cmp_opw  s\   € ð ×%Ò%Õ&9Ñ:Ô:ˆØ×"Ò" 2Ô#6Ô#<Ô#DÔ#KØ#%Ô#3Ô#9Ô#AÔ#Hñ	Jô 	Jð 	Jð 	Jð 	Jr'   c                 ó¶   — |                       t          ¦  «        }|                      |j        j        j        j        |j        j        j        j        ¦  «         dS )zQ
        Check that ufunc calls with explicit outputs are not rewritten.
        N)râ   r\   rò   r‹   rž   rŸ   r    rŽ   rô   s     r&   Útest_explicit_outputz)TestArrayExpressions.test_explicit_output  s[   € ð ×0Ò0µÑAÔAˆØ×Ò Ô 3Ô 9Ô AÔ HØ "Ô 0Ô 6Ô >Ô Eñ	Gô 	Gð 	Gð 	Gð 	Gr'   r    )F)r(   r)   r*   r‘   r³   r½   rÃ   r=   rÙ   rW   rÝ   râ   rç   rî   rò   rö   rø   rC   r  r  r  r  r  r-   r'   r&   r„   r„   r   sZ  € € € € € ðJð Jð Jð=ð =ð =ð@$ð $ð $ð#ð #ð #ð #ð$ &.ð #ð #ð #ð #ð0 &*ð #ð #ð #ð #ð$#ð #ð #ð.8ð 8ð 8ðDð Dð Dð Dð$4ð 4ð 4ð1ð 1ð 1ðJð Jð Jð -Dð Eð Eð Eð Eð6Ið Ið IðGð Gð GðBJð Jð JðGð Gð Gð Gð Gr'   r„   c                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestRewriteIssuesc                 ó  ‡— ddl m} dd l} |d¬¦  «        d„ ¦   «         Š |d¬¦  «        ˆfd„¦   «         } |j        d¦  «        } ||¦  «        \  }}|                      ||¦  «         |                      ||¦  «         d S )Nr   )ÚjitT)Únopythonc                 ó   — | S r    r-   )Úarrs    r&   Úfooz.TestRewriteIssues.test_issue_1184.<locals>.fooŽ  s   € àˆJr'   c                 ó8   •—  ‰| ¦  «        } ‰| ¦  «        }||fS r    r-   )r  r^   r_   r  s      €r&   Úbarz.TestRewriteIssues.test_issue_1184.<locals>.bar’  s&   ø€ à��C‘”ˆAØ��C‘”ˆAØ�a�4ˆKr'   r”   )Únumbar  ÚnumpyrÛ   ÚassertIs)rˆ   r  rH   r  r  Úout_cÚout_dr  s          @r&   Útest_issue_1184z!TestRewriteIssues.test_issue_1184Š  sË   ø€ ØÐÐÐÐÐØÐÐÐà	ˆ�dÐ	Ñ	Ô	ð	ð 	ñ 
Ô	ð	ð 
ˆ�dÐ	Ñ	Ô	ð	ð 	ð 	ð 	ñ 
Ô	ð	ð
 ˆbŒi˜‰mŒmˆØ�s˜3‘x”x‰ˆˆuØ�Š�e˜UÑ#Ô#Ð#Ø�Š�e˜SÑ!Ô!Ð!Ð!Ð!r'   c                 ó8  — d}t           j                             |dz  ¬¦  «                             |df¦  «        }t	          |¦  «        } t          t          ¦  «        |¦  «        }t           j                             ||¦  «         t          j	        ¦   «          d S )Néd   rV   )Úsize)
rH   rÎ   ÚuniformÚreshapero   r   rœ   rÏ   ÚgcÚcollect)rˆ   Únr0   r­   r®   s        r&   Útest_issue_1264z!TestRewriteIssues.test_issue_1264�  s€   € ØˆÝŒI×Ò 1 Q¡3ÐÑ'Ô'×/Ò/°°1°Ñ6Ô6ˆÝ" 1Ñ%Ô%ˆØ&••oÑ&Ô& qÑ)Ô)ˆÝ
Œ
×,Ò,¨X°vÑ>Ô>Ð>å
Œ
‰Œˆˆˆr'   c                 ó(  — ddl m} |d„ ¦   «         }t          j                             d¦  «        }t          j                             d¦  «        }|                     ||¦  «        } |||¦  «        }t          j                             ||¦  «         dS )z*Test array expression with duplicated termr   )r   c                 ó:   — t          j        |¦  «        }||z   | z   S r    )rH   rK   ©r/   rZ   s     r&   r  z.TestRewriteIssues.test_issue_1372.<locals>.fooª  s   € å”�q‘	”	ˆAØ�q‘5˜1‘9Ðr'   r”   N)r  r   rH   rÎ   r'  Úpy_funcrœ   Úassert_allclose)rˆ   r   r  r/   rZ   ÚexpectÚgots          r&   Útest_issue_1372z!TestRewriteIssues.test_issue_1372¦  s™   € àÐÐÐÐÐà	ð	ð 	ñ 
Œð	õ ŒI×Ò˜bÑ!Ô!ˆÝŒI×Ò˜bÑ!Ô!ˆØ—’˜Q Ñ"Ô"ˆØˆc�!�Q‰iŒiˆÝ
Œ
×"Ò" 3¨Ñ/Ô/Ð/Ð/Ð/r'   c                 óÚ   — t           d„ ¦   «         }d}t          j        dt          j        ¬¦  «        }|                     ||¦  «        } |||¦  «        }|                      ||¦  «         dS )zP
        Typing of unary array expression (np.negate) can be incorrect.
        c                 ó   — || z
  |  z   S r    r-   r/  s     r&   r  z3TestRewriteIssues.test_unary_arrayexpr.<locals>.foo¹  s   € à�q‘5˜A˜2‘:Ðr'   g      ø?r”   rc   N)r   rH   rÛ   Úint32r0  rÜ   )rˆ   r  rZ   r/   r2  r3  s         r&   Útest_unary_arrayexprz&TestRewriteIssues.test_unary_arrayexprµ  sx   € õ 
ð	ð 	ñ 
Œð	ð ˆÝŒI�b¥¤Ð)Ñ)Ô)ˆà—’˜Q Ñ"Ô"ˆØˆc�!�Q‰iŒiˆØ×Ò  VÑ,Ô,Ð,Ð,Ð,r'   c                 óî   — t           d„ ¦   «         }t          j        g d¢¦  «        }t          j        g d¢¦  «        }|                     ||¦  «        } |||¦  «        }|                      ||¦  «         dS )zd
        Typing of bitwise boolean array expression can be incorrect
        (issue #1813).
        c                 ó   — | | z   S r    r-   r/  s     r&   r  z5TestRewriteIssues.test_bitwise_arrayexpr.<locals>.fooÉ  s   € à˜1˜"‘X�;Ðr'   )TTFF)FTFTN)r   rH   Úarrayr0  rÜ   )rˆ   r  r/   rZ   r2  r3  s         r&   Útest_bitwise_arrayexprz(TestRewriteIssues.test_bitwise_arrayexprÄ  s‰   € õ
 
ð	ð 	ñ 
Œð	õ ŒHÐ/Ð/Ð/Ñ0Ô0ˆÝŒHÐ/Ð/Ð/Ñ0Ô0ˆà—’˜Q Ñ"Ô"ˆØˆc�!�Q‰iŒiˆØ×Ò  VÑ,Ô,Ð,Ð,Ð,r'   c                 ó<  — t          t          ¦  «        }t          j        ddd¦  «        } |||||¦  «         t	          ¦   «         }|                     |¦  «         |                     ¦   «         }|                      d|¦  «         |                      d|¦  «         dS )zo
        Type annotation of array expressions with disambiguated
        variable names (issue #1466).
        r   r“   r”   z
#   u.1 = z
#   u.2 = N)r   ra   rH   r›   r   Úinspect_typesÚgetvalueÚassertIn)rˆ   Úcfuncr/   ÚbufÚress        r&   Útest_annotationsz"TestRewriteIssues.test_annotationsÔ  s“   € õ
 Õ(Ñ)Ô)ˆåŒK˜˜1˜bÑ!Ô!ˆØˆˆa��A�qÑÔÐå‰jŒjˆØ×Ò˜CÑ Ô Ð Ø�lŠl‰nŒnˆØ�Š�l CÑ(Ô(Ð(Ø�Š�l CÑ(Ô(Ð(Ð(Ð(r'   c                 ó¦   — t           d„ ¦   «         } |d¦  «        }|                     d¦  «        }t          j                             ||¦  «         d S )Nc                 ó„   — t          j        | ¦  «        }t          d¦  «        D ]}||z  }|                     ¦   «         }Œ|S )NrP   )rH   Úonesrh   Úcopy)r0   r  rÊ   Úvals       r&   Úfz;TestRewriteIssues.test_issue_5599_name_collision.<locals>.fæ  sA   € å”'˜!‘*”*ˆCå˜1‘X”Xð !ð !�Ø˜S‘y�Ø—h’h‘j”j��ØˆJr'   é   )r   r0  rH   rœ   r�   )rˆ   rJ  r3  r2  s       r&   Útest_issue_5599_name_collisionz0TestRewriteIssues.test_issue_5599_name_collisionä  sW   € å	ð	ð 	ñ 
Œð	ð ˆa�‰dŒdˆØ—’˜1‘”ˆÝ
Œ
×%Ò% c¨6Ñ2Ô2Ð2Ð2Ð2r'   N)
r(   r)   r*   r#  r,  r4  r8  r<  rD  rL  r-   r'   r&   r  r  ˆ  s}   € € € € € ð"ð "ð "ð&ð ð ð0ð 0ð 0ð-ð -ð -ð-ð -ð -ð )ð )ð )ð 3ð 3ð 3ð 3ð 3r'   r  c                   ó   — e Zd Zd„ ZdS )ÚTestSemanticsc                 óB  — t           }t          |¦  «        }t          j        ddt	          d¦  «        g¦  «        }t          j        g d¢¦  «        }t          j        |¦  «        } ||||¦  «        } ||||¦  «        }t          j                             ||¦  «         d S )Nç        rG   Úinf)rP  rP  rG   )rT   r   rH   rg   ÚfloatÚ	ones_likerœ   r�   )rˆ   ÚpyfuncrA  r/   rZ   r^   r2  r3  s           r&   Útest_division_by_zeroz#TestSemantics.test_division_by_zeroö  s�   € õ ˆÝ�V‘”ˆåŒJ˜˜S¥%¨¡,¤,Ð/Ñ0Ô0ˆÝŒJ���Ñ'Ô'ˆÝŒL˜‰OŒOˆà�˜˜1˜a‘”ˆØˆe�A�q˜!‰nŒnˆÝ
Œ
×%Ò% f¨cÑ2Ô2Ð2Ð2Ð2r'   N)r(   r)   r*   rU  r-   r'   r&   rN  rN  ô  s#   € € € € € ð3ð 3ð 3ð 3ð 3r'   rN  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestOptionalsze Tests the arrival and correct lowering of Optional types at a arrayexpr
    derived ufunc, see #3972c                 ó¾  ‡— t           d„ ¦   «         Št           ˆfd„¦   «         }t          j        d¦  «        df} ||Ž } |j        |Ž }t          j                             ||¦  «         ‰j        }|d         d         }|                      t          |t          j
        ¦  «        ¦  «         |                      t          |j        t          j        ¦  «        ¦  «         d S )Nc                 ó   — | |z   S r    r-   ©r0   r1   s     r&   Úarr_exprz9TestOptionals.test_optional_scalar_type.<locals>.arr_expr  ó   € à�q‘5ˆLr'   c                 ó2   •— |dk    rd }n|} ‰| |¦  «        S ©Nr   r-   ©r0   r1   Úzr[  s      €r&   Údo_callz8TestOptionals.test_optional_scalar_type.<locals>.do_call  ó(   ø€ à�1ŠuˆuØ��à�Ø�8˜A˜q‘>”>Ð!r'   rK  g333333ó¿r   r“   )r   rH   rÛ   r0  rœ   r1  Ú
signaturesÚ
assertTruer¶   r	   ÚOptionalÚtypeÚFloat©rˆ   ra  rx   rC  r­   r#   Úotyr[  s          @r&   Útest_optional_scalar_typez'TestOptionals.test_optional_scalar_type	  sã   ø€ å	ð	ð 	ñ 
Œð	õ 
ð	"ð 	"ð 	"ð 	"ñ 
Œð	"õ ”	˜!‘”˜dÐ#ˆð ˆg�tˆnˆØ"�7”? DÐ)ˆÝ
Œ
×"Ò" 3¨Ñ1Ô1Ð1ð ÔˆØ�Œd�1ŒgˆØ�Š�
 3­¬Ñ7Ô7Ñ8Ô8Ð8Ø�Š�
 3¤8­U¬[Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r'   c                 óP  ‡— t           d„ ¦   «         Št           ˆfd„¦   «         }t          j        d¦  «        t          j        d¦  «        f} ||Ž } |j        |Ž }t          j                             ||¦  «         ‰j        }|d         d         }|                      t          |t          j
        ¦  «        ¦  «         |                      t          |j        t          j        ¦  «        ¦  «         |                      t          |j        j        t          j        ¦  «        ¦  «         d S )Nc                 ó   — | |z   S r    r-   rZ  s     r&   r[  z8TestOptionals.test_optional_array_type.<locals>.arr_expr&  r\  r'   c                 ó>   •— |d         dk    rd }n|} ‰| |¦  «        S r^  r-   r_  s      €r&   ra  z7TestOptionals.test_optional_array_type.<locals>.do_call*  ó,   ø€ à�Œt�aŠxˆxØ��à�Ø�8˜A˜q‘>”>Ð!r'   rK  ç      @r   r“   )r   rH   rÛ   r0  rœ   r1  rc  rd  r¶   r	   re  rf  ÚArrayrd   rg  rh  s          @r&   Útest_optional_array_typez&TestOptionals.test_optional_array_type$  s  ø€ å	ð	ð 	ñ 
Œð	õ 
ð	"ð 	"ð 	"ð 	"ñ 
Œð	"õ ”	˜!‘”�bœi¨™mœmÐ,ˆð ˆg�tˆnˆØ"�7”? DÐ)ˆÝ
Œ
×"Ò" 3¨Ñ1Ô1Ð1ð ÔˆØ�Œd�1ŒgˆØ�Š�
 3­¬Ñ7Ô7Ñ8Ô8Ð8Ø�Š�
 3¤8­U¬[Ñ9Ô9Ñ:Ô:Ð:Ø�Š�
 3¤8¤>µ5´;Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@r'   N)r(   r)   r*   Ú__doc__rj  rq  r-   r'   r&   rW  rW    sA   € € € € € ð ð  ð;ð ;ð ;ð6Að Að Að Að Ar'   rW  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestOptionalsExceptionsc                 óF  ‡— |                       ¦   «          t          d„ ¦   «         Št          ˆfd„¦   «         }t          j        d¦  «        df}|                      t
          ¦  «        5 } ||Ž  d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         ‰j	        }|d         d         }|  
                    t          |t          j        ¦  «        ¦  «         |  
                    t          |j        t          j        ¦  «        ¦  «         d S )Nc                 ó   — | |z   S r    r-   rZ  s     r&   r[  zUTestOptionalsExceptions.test_optional_scalar_type_exception_on_none.<locals>.arr_exprH  r\  r'   c                 ó2   •— |dk    rd }n|} ‰| |¦  «        S r^  r-   r_  s      €r&   ra  zTTestOptionalsExceptions.test_optional_scalar_type_exception_on_none.<locals>.do_callL  rb  r'   rK  rG   zexpected float64, got Noner   r“   )Údisable_leak_checkr   rH   rÛ   ÚassertRaisesÚ	TypeErrorr@  ÚstrÚ	exceptionrc  rd  r¶   r	   re  rf  rg  )rˆ   ra  rx   Úraisesr#   ri  r[  s         @r&   Ú+test_optional_scalar_type_exception_on_nonezCTestOptionalsExceptions.test_optional_scalar_type_exception_on_noneD  sW  ø€ à×ÒÑ!Ô!Ð!å	ð	ð 	ñ 
Œð	õ 
ð	"ð 	"ð 	"ð 	"ñ 
Œð	"õ ”	˜!‘”˜cÐ"ˆð ×Ò�yÑ)Ô)ð 	¨VØˆG�TˆNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ2µC¸Ô8HÑ4IÔ4IÑJÔJÐJð ÔˆØ�Œd�1ŒgˆØ�Š�
 3­¬Ñ7Ô7Ñ8Ô8Ð8Ø�Š�
 3¤8­U¬[Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:s   Á(A:Á:A>ÂA>c                 ó
  ‡— |                       ¦   «          t          d„ ¦   «         Št          ˆfd„¦   «         }t          j        d¦  «        t          j        dd¦  «        f}|                      t
          ¦  «        5 } ||Ž  d d d ¦  «         n# 1 swxY w Y   t          |j        ¦  «        }|                      d|¦  «         |                      d|¦  «         ‰j	        }|d         d	         }|  
                    t          |t          j        ¦  «        ¦  «         |  
                    t          |j        t          j        ¦  «        ¦  «         |  
                    t          |j        j        t          j        ¦  «        ¦  «         d S )
Nc                 ó   — | |z   S r    r-   rZ  s     r&   r[  zTTestOptionalsExceptions.test_optional_array_type_exception_on_none.<locals>.arr_exprf  r\  r'   c                 ó>   •— |d         dk    rd }n|} ‰| |¦  «        S r^  r-   r_  s      €r&   ra  zSTestOptionalsExceptions.test_optional_array_type_exception_on_none.<locals>.do_callj  rn  r'   rK  rG   ro  zexpected array(float64,zgot Noner   r“   )rx  r   rH   rÛ   ry  rz  r{  r|  r@  rc  rd  r¶   r	   re  rf  rp  rd   rg  )rˆ   ra  rx   r}  Úexcstrr#   ri  r[  s          @r&   Ú*test_optional_array_type_exception_on_nonezBTestOptionalsExceptions.test_optional_array_type_exception_on_noneb  sž  ø€ à×ÒÑ!Ô!Ð!å	ð	ð 	ñ 
Œð	õ 
ð	"ð 	"ð 	"ð 	"ñ 
Œð	"õ ”	˜!‘”�bœi¨¨BÑ/Ô/Ð0ˆð ×Ò�yÑ)Ô)ð 	¨VØˆG�TˆNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ �VÔ%Ñ&Ô&ˆØ�ŠÐ/°Ñ8Ô8Ð8Ø�Š�j &Ñ)Ô)Ð)ð ÔˆØ�Œd�1ŒgˆØ�Š�
 3­¬Ñ7Ô7Ñ8Ô8Ð8Ø�Š�
 3¤8­U¬[Ñ9Ô9Ñ:Ô:Ð:Ø�Š�
 3¤8¤>µ5´;Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@s   Á;BÂBÂBN)r(   r)   r*   r~  rƒ  r-   r'   r&   rt  rt  A  s7   € € € € € ð;ð ;ð ;ð<Að Að Að Að Ar'   rt  c                   ó>   — e Zd ZdZ ej        d¦  «        Zd„ Zd„ ZdS )ÚTestExternalTypeszJ Tests RewriteArrayExprs with external (user defined) types,
    see #5157z¬
        from numba.core import types

        class FooType(types.Type):
            def __init__(self):
                super(FooType, self).__init__(name='Foo')
        c                 óf  ‡—  G d„ dt           ¦  «        }t          ‰¦  «         G d„ dt          j        ¦  «        ¦   «         }t	          ‰dd¦  «         t          |¦  «        ˆfd„¦   «         }t          |t          j        ¦  «        d„ ¦   «         }t          j
        |¦  «        ˆfd„¦   «         }|‰fS )	Nc                   ó   — e Zd Zd„ ZdS )ú,TestExternalTypes.make_foo_type.<locals>.Fooc                 ó   — || _         d S r    )r¸   )rˆ   r¸   s     r&   Ú__init__z5TestExternalTypes.make_foo_type.<locals>.Foo.__init__’  s   € Ø"�”
�
�
r'   N©r(   r)   r*   rŠ  r-   r'   r&   ÚFoorˆ  ‘  s#   € € € € € ð#ð #ð #ð #ð #r'   rŒ  c                   ó   — e Zd Zd„ ZdS )ú1TestExternalTypes.make_foo_type.<locals>.FooModelc                 óh   — dt           j        fg}t          j                             | |||¦  «         d S )Nr¸   )r	   Úintpr   ÚStructModelrŠ  )rˆ   ÚdmmÚfe_typeÚmemberss       r&   rŠ  z:TestExternalTypes.make_foo_type.<locals>.FooModel.__init__—  s4   € Ø#¥U¤ZÐ0Ð1�ÝÔ"×+Ò+¨D°#°wÀÑHÔHÐHÐHÐHr'   Nr‹  r-   r'   r&   ÚFooModelrŽ  •  s(   € € € € € ðIð Ið Ið Ið Ir'   r•  r¸   c                 ó   •— ˆfd„}|S )Nc                 ó   •—  ‰¦   «         S r    r-   )r¸   ÚFooTypes    €r&   Útyperz@TestExternalTypes.make_foo_type.<locals>.type_foo.<locals>.typerŸ  s   ø€ Ø�w‘y”yÐ r'   r-   )Úcontextr™  r˜  s     €r&   Útype_fooz1TestExternalTypes.make_foo_type.<locals>.type_foo�  s#   ø€ ð!ð !ð !ð !ð !ð ˆLr'   c                 óŠ   — |j         }|\  } t          j        |¦  «        | |¦  «        }||_        |                     ¦   «         S r    )ry   r   Úcreate_struct_proxyr¸   Ú	_getvalue)rš  ÚbuilderÚsigrx   Útypr¸   r  s          r&   Úimpl_fooz1TestExternalTypes.make_foo_type.<locals>.impl_foo¤  sA   € à”/ˆCØ‰GˆUØ2•'Ô-¨cÑ2Ô2°7¸GÑDÔDˆCØˆCŒIØ—=’=‘?”?Ð"r'   c                 ó   •—  ‰¦   «         S r    r-   )rI  r^   r˜  s     €r&   Ú
typeof_fooz3TestExternalTypes.make_foo_type.<locals>.typeof_foo¬  s   ø€ à�7‘9”9Ðr'   )Úobjectr   r   r‘  r   r   r   r	   r�  r   Úregister)rˆ   r˜  rŒ  r•  r›  r¢  r¤  s    `     r&   Úmake_foo_typezTestExternalTypes.make_foo_type�  s  ø€ ð	#ð 	#ð 	#ð 	#ð 	#•&ñ 	#ô 	#ð 	#õ 
˜Ñ	 Ô	 ð	Ið 	Ið 	Ið 	Ið 	I•vÔ)ñ 	Iô 	Iñ 
!Ô	 ð	Iõ
 	˜w¨°Ñ9Ô9Ð9å	�sÑ	Ô	ð	ð 	ð 	ð 	ñ 
Ô	ð	õ 
�s�EœJÑ	'Ô	'ð	#ð 	#ñ 
(Ô	'ð	#õ 
Ô	˜cÑ	"Ô	"ð	ð 	ð 	ð 	ñ 
#Ô	"ð	ð �Gˆ|Ðr'   c                 óR  ‡‡— t          | j        ¦  «        5 }|                      |j        ¦  «        \  ŠŠt	          t
          j        ¦  «        ˆfd„¦   «         }t	          t
          j        ¦  «        ˆfd„¦   «         }t	          t
          j        ¦  «        ˆfd„¦   «         }t          ˆfd„¦   «         }t          ˆfd„¦   «         }t          ˆfd„¦   «         }t          j
                              |dd¦  «        t          j        ddg¦  «        ¦  «         t          j
                              |d	d
¦  «        t          j        d	d
g¦  «        ¦  «         t          j
                              |d¦  «        t          j        dg¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ój   •— t          | ‰¦  «        rt          |t          j        ¦  «        rd„ }|S d S d S )Nc                 óD   — t          j        | j        |d         g¦  «        S r^  ©rH   r;  r¸   ©ÚlhsÚrhss     r&   ÚimpzKTestExternalTypes.test_external_type.<locals>.overload_foo_add.<locals>.imp»  s   € Ý!œx¨¬°C¸´FÐ(;Ñ<Ô<Ð<r'   )r¶   r	   rp  ©r­  r®  r¯  r˜  s      €r&   Úoverload_foo_addz>TestExternalTypes.test_external_type.<locals>.overload_foo_add¸  sR   ø€ å˜c 7Ñ+Ô+ð µ
¸3ÅÄÑ0LÔ0Lð ð=ð =ð =ð �Jð	ð ð ð r'   c                 óV   •— t          | ‰¦  «        rt          |‰¦  «        rd„ }|S d S d S )Nc                 óB   — t          j        | j        |j        g¦  «        S r    r«  r¬  s     r&   r¯  zKTestExternalTypes.test_external_type.<locals>.overload_foo_add.<locals>.impÅ  s   € Ý!œx¨¬°C´IÐ(>Ñ?Ô?Ð?r'   ©r¶   r°  s      €r&   r±  z>TestExternalTypes.test_external_type.<locals>.overload_foo_addÂ  sS   ø€ å˜c 7Ñ+Ô+ð µ
¸3ÀÑ0HÔ0Hð ð@ð @ð @ð �Jð	ð ð ð r'   c                 ó2   •— t          | ‰¦  «        rd„ }|S d S )Nc                 ó8   — t          j        | j         g¦  «        S r    r«  )r0   s    r&   r¯  zKTestExternalTypes.test_external_type.<locals>.overload_foo_neg.<locals>.impÏ  s   € Ý!œx¨!¬'¨¨
Ñ3Ô3Ð3r'   r´  )r0   r¯  r˜  s     €r&   Úoverload_foo_negz>TestExternalTypes.test_external_type.<locals>.overload_foo_negÌ  s5   ø€ å˜a Ñ)Ô)ð ð4ð 4ð 4ð �Jð	ð r'   c                 óF   •—  ‰| ¦  «        t          j        |g¦  «        z   S r    )rH   r;  ©r0   r1   rŒ  s     €r&   Úarr_expr_sum1z;TestExternalTypes.test_external_type.<locals>.arr_expr_sum1Ô  s    ø€ à�s˜1‘v”v¥¤¨!¨¡¤Ñ-Ð-r'   c                 ó2   •—  ‰| ¦  «         ‰|¦  «        z   S r    r-   r¹  s     €r&   Úarr_expr_sum2z;TestExternalTypes.test_external_type.<locals>.arr_expr_sum2Ø  s   ø€ à�s˜1‘v”v   A¡¤‘Ð&r'   c                 ó   •—  ‰| ¦  «         S r    r-   )r0   rŒ  s    €r&   Úarr_expr_negz:TestExternalTypes.test_external_type.<locals>.arr_expr_negÜ  s   ø€ à˜˜A™œ�w�r'   r   r“   rP   rV   rQ   éüÿÿÿ)r   Úsource_linesr§  r˜  r   ÚoperatorrY   Únegr   rH   rœ   r�   r;  )	rˆ   Útest_moduler±  r·  rº  r¼  r¾  rŒ  r˜  s	          @@r&   Útest_external_typez$TestExternalTypes.test_external_type²  s3  øø€ Ý Ô 1Ñ2Ô2ð /	K°kØ×-Ò-¨kÔ.AÑBÔB‰LˆC�õ •h”lÑ#Ô#ðð ð ð ñ $Ô#ðõ •h”lÑ#Ô#ðð ð ð ñ $Ô#ðõ •h”lÑ#Ô#ðð ð ð ñ $Ô#ðõ ð.ð .ð .ð .ñ ŒTð.õ ð'ð 'ð 'ð 'ñ ŒTð'õ ðð ð ð ñ ŒTðõ ŒJ×)Ò)¨-¨-¸¸1Ñ*=Ô*=½r¼xÈÈAÈÑ?OÔ?OÑPÔPÐPÝŒJ×)Ò)¨-¨-¸¸1Ñ*=Ô*=½r¼xÈÈAÈÑ?OÔ?OÑPÔPÐPÝŒJ×)Ò)¨,¨,°q©/¬/½2¼8ÀRÀD¹>¼>ÑJÔJÐJð_/	Kð /	Kð /	Kñ /	Kô /	Kð /	Kð /	Kð /	Kð /	Kð /	Kð /	Kð /	Køøøð /	Kð /	Kð /	Kð /	Kð /	Kð /	Ks   —E8FÆF Æ#F N)	r(   r)   r*   rr  ÚtextwrapÚdedentrÀ  r§  rÄ  r-   r'   r&   r…  r…  „  s\   € € € € € ðð ð #�8”?ð $ñ ô €Lð ð  ð  ðD0Kð 0Kð 0Kð 0Kð 0Kr'   r…  Ú__main__)>r)  Úior   r  rH   r  r   r   r   Ú
numba.corer   r	   r
   r   r   r   r   Únumba.core.compilerr   r   Únumba.core.registryr   Únumba.tests.supportr   r   r   r   Únumba.extendingr   r   r   r   r   r   r   rÁ  rÅ  ÚunittestÚdictr   r2   r5   r=   rC   rE   rJ   rN   rR   rT   rW   r\   ra   ro   rq   r„   r  rN  rW  rt  r…  r(   Úmainr-   r'   r&   ú<module>rÑ     s  ðØ 	€	€	€	Ø Ð Ð Ð Ð Ð à Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø *Ð *Ð *Ð *Ð *Ð *ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø €€€à €€€ðFð Fð Fð Fð F�ñ Fô Fð Fðð ð ðð ð ðFð Fð Fð.ð .ð .ð.ð .ð .ð €y��~„~€ð1ð 1ð 1ð'ð 'ð 'ðð ð ðð ð ðð ð ðð ð ð	ð 	ð 	ðQð Qð Qð Qð Q�Xñ Qô Qð Qð.SGð SGð SGð SGð SG˜?¨Hñ SGô SGð SGðli3ð i3ð i3ð i3ð i3˜¨ñ i3ô i3ð i3ðX3ð 3ð 3ð 3ð 3�O XÔ%6ñ 3ô 3ð 3ð"9Að 9Að 9Að 9Að 9A�O XÔ%6ñ 9Aô 9Að 9Aðx@Að @Að @Að @Að @A˜o¨xÔ/@ñ @Aô @Að @AðF^Kð ^Kð ^Kð ^Kð ^K˜¨Ô):ñ ^Kô ^Kð ^KðB ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr'   