§
    ƒÛgéA  ã                   óB  — d dl Z d dlmZmZ d dlZd dlZd dlmZ d dlZ	d dl
Z
d dlmZmZmZmZmZ d dlmZ d dlmZ d„ Z ej        d¦  «         G d	„ d
ej        ¦  «        ¦   «         Ze
j        e j        e
j        e j        e
j        e j        iZe
j        e j         e
j!        e j"        e
j#        e j$        e
j%        e j&        e
j'        e j(        e
j)        e j*        e
j+        e j,        e
j-        e j.        e
j/        e j0        e
j1        e j2        e
j3        e j4        e
j5        e j6        iZ7e
j8        e j9        e
j:        e j;        e
j<        e j=        e
j>        e j?        e
j@        e jA        e
jB        e jC        iZDd„ ZEejF        d„ ¦   «         ZG G d„ de jH        ¦  «        ZIde jJ        fd„ZKd„ ZLdS )é    N)ÚdefaultdictÚOrderedDict)ÚSimpleNamespace)ÚtypesÚtargetconfigÚirÚrewritesÚcompiler)Únpydecl)ÚDUFuncc                 óD   — t          | t          j        t          f¦  «        S ©N)Ú
isinstanceÚnpÚufuncr   )Úfuncs    úP/granary/edev/quantum/lib/python3.11/site-packages/numba/np/ufunc/array_exprs.pyÚ	_is_ufuncr      s   € Ý�d�RœX¥vÐ.Ñ/Ô/Ð/ó    zafter-inferencec                   óX   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zˆ xZS )ÚRewriteArrayExprszóThe RewriteArrayExprs class is responsible for finding array
    expressions in Numba intermediate representation code, and
    rewriting those expressions to a single operation that will expand
    into something similar to a ufunc call.
    c                 óˆ   •—  t          t          | ¦  «        j        |g|¢R i |¤Ž |j        j        }d|vrt
          |d<   d S d S )NÚ	arrayexpr)Úsuperr   Ú__init__Ú	targetctxÚspecial_opsÚ_lower_array_expr)ÚselfÚstateÚargsÚkwsr   Ú	__class__s        €r   r   zRewriteArrayExprs.__init__   s^   ø€ Ø/�Õ Ñ&Ô&Ô/°ÐD¸ÐDÐDÐDÀÐDÐDÐDà”oÔ1ˆØ˜kÐ)Ð)Ý'8ˆK˜Ñ$Ð$Ð$ð *Ð)r   c                 ó"  — t          |¦  «        dk    rdS || _        || _        t          ¦   «         | _        i | _        |                     t          j        ¦  «        }|D ]™}|j	        j
        }|j        }t          |t          j        ¦  «        rFt          |                     |d¦  «        t          j        ¦  «        r|                      |||¦  «         Œut          |t          j        ¦  «        r
|| j        |<   Œšt          | j        ¦  «        dk    S )z±
        Using typing and a basic block, search the basic block for array
        expressions.
        Return True when one or more matches were found, False otherwise.
        r   FN)ÚlenÚ
crnt_blockÚtypemapr   Úarray_assignsÚconst_assignsÚ
find_instsr   ÚAssignÚtargetÚnameÚvaluer   ÚExprÚgetr   ÚArrayÚ_match_array_exprÚConst)	r   Úfunc_irÚblockr'   Ú	calltypesÚassignmentsÚinstrÚtarget_nameÚexprs	            r   ÚmatchzRewriteArrayExprs.match!   sü   € õ ˆy‰>Œ>˜QÒÐØ�5àˆŒØˆŒå(™]œ]ˆÔàˆÔà×&Ò&¥r¤yÑ1Ô1ˆØ ð 
	7ð 
	7ˆEØœ,Ô+ˆKØ”;ˆDå˜4¥¤Ñ)Ô)ð 7Ý˜7Ÿ;š; {°DÑ9Ô9½5¼;ÑGÔGð7à×&Ò& u¨d°KÑ@Ô@Ð@Ð@Ý˜D¥"¤(Ñ+Ô+ð 7ð 37�Ô" ;Ñ/øå�4Ô%Ñ&Ô&¨Ò*Ð*r   c                 óÈ  ‡ — |j         }‰ j        }|dv rI|j        t          j        v r6t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        r|||<   dS dS |dk    rw|j        j        ‰ j	        v rf‰ j	        |j        j                 }t          |t          j        ¦  «        r7|j        }t          |¦  «        r#‰                      ||¦  «        s|||<   dS dS dS dS dS dS )z‘
        Find whether the given assignment (*instr*) of an expression (*expr*)
        to variable *target_name* is an array expression.
        ©ÚunaryÚbinopc              3   óF   •K  — | ]}‰j         |j                 j        V — Œd S r   )r'   r-   Úis_internal)Ú.0Úvarr   s     €r   ú	<genexpr>z6RewriteArrayExprs._match_array_expr.<locals>.<genexpr>Q   sC   øè è € ð 0ð 0Øð ”< ¤Ô)Ô5ð 0ð 0ð 0ð 0ð 0ð 0r   ÚcallN)Úopr(   Úfnr   Úsupported_array_operatorsÚallÚ	list_varsr   r-   r'   r   r   ÚFunctionÚ
typing_keyr   Ú_has_explicit_output)r   r8   r:   r9   Úexpr_opr(   Ú	func_typeÚfunc_keys   `       r   r2   z#RewriteArrayExprs._match_array_exprB   s;  ø€ ð ”'ˆØÔ*ˆàÐ*Ð*Ð*Ø”�7Ô<Ð<Ð<õ ð 0ð 0ð 0ð 0Ø"ŸnšnÑ.Ô.ð0ñ 0ô 0ñ 0ô 0ð 3à-2�˜kÑ*Ð*Ð*ð3ð 3ð ˜&Ò Ð  t¤y¤~¸¼Ð'EÐ'Eàœ T¤Y¤^Ô4ˆIÝ˜)¥U¤^Ñ4Ô4ð ;Ø$Ô/�Ý˜XÑ&Ô&ð ;à×4Ò4°T¸8ÑDÔDð ;à5:˜ kÑ2Ð2Ð2ð !Ð Ð'EÐ'Eð;ð ;ð;ð ;ð;ð ;r   c                 ó|   — t          |j        ¦  «        t          |j        ¦  «        z   }|j        �dS ||j        k    S )zr
        Return whether the *expr* call to *func* (a ufunc) features an
        explicit output argument.
        NT)r%   r!   r"   ÚvarargÚnin)r   r:   r   Únargss       r   rM   z&RewriteArrayExprs._has_explicit_output`   s:   € õ
 �D”I‘”¥ T¤X¡¤Ñ.ˆØŒ;Ð"ð �4Ø�t”xÒÐr   c                 ó®   — |j         }|dv r|j        S |dk    r| j        |j        j                 j        S t          d                     |¦  «        ¦  «        ‚)Nr=   rE   z:Don't know how to find the operator for '{0}' expressions.)rF   rG   r'   r   r-   rL   ÚNotImplementedErrorÚformat©r   Úir_exprÚir_ops      r   Ú_get_array_operatorz%RewriteArrayExprs._get_array_operatorl   sc   € Ø”
ˆØÐ&Ð&Ð&Ø”:ÐØ�fŠ_ˆ_Ø”< ¤Ô 1Ô2Ô=Ð=Ý!ØH×OÒOØñô ñô ð 	r   c                 óÊ   — |j         }|dk    r|j        |j        fS |dk    r|                     ¦   «         S |dk    r|j        S t          d                     |¦  «        ¦  «        ‚)z{Given a Numba IR expression, return the operands to the expression
        in order they appear in the expression.
        r?   r>   rE   z:Don't know how to find the operands for '{0}' expressions.)rF   ÚlhsÚrhsrJ   r!   rV   rW   rX   s      r   Ú_get_operandszRewriteArrayExprs._get_operandsv   s{   € ð ”
ˆØ�GÒÐØ”; ¤Ð+Ð+Ø�gÒÐØ×$Ò$Ñ&Ô&Ð&Ø�fŠ_ˆ_Ø”<ÐÝ!ØH×OÒOØñô ñô ð 	r   c                 óœ   ‡ — |j         }|dk    r|j        S ˆ fd„‰                      |¦  «        D ¦   «         }‰                      |¦  «        |fS )zZTranslate the given expression from Numba IR to an array expression
        tree.
        r   c                 óP   •— g | ]"}‰j                              |j        |¦  «        ‘Œ#S © )r)   r0   r-   )rB   Úop_varr   s     €r   ú
<listcomp>z5RewriteArrayExprs._translate_expr.<locals>.<listcomp>Œ   sD   ø€ ð Gð Gð GØ &ð !Ô.×2Ò2°6´;ÀÑGÔGð Gð Gð Gr   )rF   r:   r_   r[   )r   rY   rZ   Úoperands_or_argss   `   r   Ú_translate_exprz!RewriteArrayExprs._translate_expr…   sw   ø€ ð ”
ˆØ�KÒÐØ”<ÐðGð Gð Gð GØ*.×*<Ò*<¸WÑ*EÔ*EðGñ Gô GÐà×'Ò'¨Ñ0Ô0Ð2BÐBÐBr   c                 óæ  — i }t          ¦   «         }t          t          ¦  «        }| j                             ¦   «         D �]®}|j        }g }|                      |¦  «        |f}t          j        d|j	        || j
        |j        j                 ¬¦  «        }t          j        ||j        |j	        ¦  «        }	|	||<   |	| j        |j        j        <   |                      |¦  «        D �]	}
|
j        }|
j        r¤|| j        v r›| j        |         }|j        }|                     ¦   «         }|D ]}
||
j        xx         dz  cc<   Œ|                     |                      |¦  «        ¦  «         |j        j        r$|                     |j        j        ¦  «         d||<   Œµ|| j        v r!|                     | j        |         ¦  «         Œß||
j        xx         dz  cc<   |                     |
¦  «         �Œ�Œ°|||fS )ztIterate over the matches, trying to find which instructions should
        be rewritten, deleted, or moved.
        r   )rF   Úlocr:   Útyé   N)Úsetr   Úintr(   Úvaluesr.   r[   r   r/   rh   r'   r,   r-   r+   r_   Úis_temprJ   Úappendrf   Úaddr)   )r   Úreplace_mapÚ	dead_varsÚ	used_varsr8   r:   Úarr_inpsÚarr_exprÚnew_exprÚ	new_instrÚoperandÚoperand_nameÚchild_assignÚ
child_exprÚchild_operandss                  r   Ú_handle_matchesz!RewriteArrayExprs._handle_matches�   s  € ð ˆÝ‘E”Eˆ	Ý¥Ñ$Ô$ˆ	ØÔ'×.Ò.Ñ0Ô0ð 	-ñ 	-ˆEØ”;ˆDØˆHØ×/Ò/°Ñ5Ô5°xÐ?ˆHÝ”w +Ø#'¤8Ø$,Ø"&¤,¨u¬|Ô/@Ô"AðCñ Cô CˆHõ œ	 (¨E¬L¸%¼)ÑDÔDˆIØ!*ˆK˜ÑØ4=ˆDÔ˜uœ|Ô0Ñ1Ø×-Ò-¨dÑ3Ô3ð -ñ -�Ø&œ|�Ø”?ð - |°tÔ7IÐ'IÐ'IØ#'Ô#5°lÔ#C�LØ!-Ô!3�JØ%/×%9Ò%9Ñ%;Ô%;�NØ#1ð 5ð 5˜Ø! '¤,Ð/Ð/Ô/°1Ñ4Ð/Ð/Ñ/Ð/Ø—O’O D×$8Ò$8¸Ñ$DÔ$DÑEÔEÐEØ#Ô*Ô2ð 9Ø!Ÿš lÔ&9Ô&>Ñ?Ô?Ð?Ø48˜ LÑ1øØ! TÔ%7Ð7Ð7Ø—O’O DÔ$6°|Ô$DÑEÔEÐEÐEà˜gœlÐ+Ð+Ô+¨qÑ0Ð+Ð+Ñ+Ø—O’O GÑ,Ô,Ð,Ñ,ñ!-ð" ˜I yÐ0Ð0r   c                 ó6   — ||         }||v r||         }||v °|S )z¯Find the final replacement instruction for a given initial
        instruction by chasing instructions in a map from instructions
        to replacement instructions.
        rb   )r   Úreplacement_mapr8   Úreplacements       r   Ú_get_final_replacementz(RewriteArrayExprs._get_final_replacementµ   s6   € ð
 & eÔ,ˆØ˜_Ð,Ð,Ø)¨+Ô6ˆKð ˜_Ð,Ð,àÐr   c                 ó”  — |                       ¦   «         \  }}}| j                             ¦   «         }|                     ¦   «          i }| j        j        D �]D}t          |t          j        ¦  «        r³||v r™|                      ||¦  «        }|r€| 	                    |¦  «         |j
                             ¦   «         D ]Q}|j        }	|	|v r(| 	                    |                     |	¦  «        ¦  «         ||	         dk    r||	xx         dz  cc<   ŒRŒº| 	                    |¦  «         ŒÐt          |t          j        ¦  «        rE|j
        }
||
         dk    r||
xx         dz  cc<   |||
<   �Œ|
|vr| 	                    |¦  «         �Œ/| 	                    |¦  «         �ŒF|r,|                     ¦   «         D ]}|                     |¦  «         Œ|S )z}When we've found array expressions in a basic block, rewrite that
        block, returning a new, transformed block.
        r   rj   )r}   r&   ÚcopyÚclearÚbodyr   r   r+   r�   ro   r.   rJ   r-   ÚpopÚDelrm   Úinsert_before_terminator)r   rq   rr   rs   ÚresultÚ
delete_mapr8   r€   rC   Úvar_nameÚinstr_values              r   ÚapplyzRewriteArrayExprs.apply¿   s  € ð -1×,@Ò,@Ñ,BÔ,BÑ)ˆ�Y 	ð ”×%Ò%Ñ'Ô'ˆØ�Š‰ŒˆØˆ
Ø”_Ô)ð 	%ñ 	%ˆEÝ˜%¥¤Ñ+Ô+ð %Ø˜KÐ'Ð'Ø"&×"=Ò"=Ø# Uñ#,ô #,�Kà"ð 9ØŸš kÑ2Ô2Ð2Ø#.Ô#4×#>Ò#>Ñ#@Ô#@ð 9ð 9˜CØ'*¤x˜HØ'¨:Ð5Ð5Ø &§¢¨j¯nªn¸XÑ.FÔ.FÑ GÔ GÐ GØ(¨Ô2°QÒ6Ð6Ø )¨(Ð 3Ð 3Ô 3°qÑ 8Ð 3Ð 3Ñ 3øøð —M’M %Ñ(Ô(Ð(Ð(Ý˜E¥2¤6Ñ*Ô*ð %Ø#œk�Ø˜[Ô)¨AÒ-Ð-Ø˜kÐ*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ø.3�J˜{Ñ+Ñ+Ø ¨	Ð1Ð1Ø—M’M %Ñ(Ô(Ð(ùà—’˜eÑ$Ô$Ð$Ñ$Øð 	7Ø#×*Ò*Ñ,Ô,ð 7ð 7�Ø×/Ò/°Ñ6Ô6Ð6Ð6Øˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r;   r2   rM   r[   r_   rf   r}   r�   r�   Ú__classcell__©r#   s   @r   r   r      sÎ   ø€ € € € € ðð ð
9ð 9ð 9ð 9ð 9ð+ð +ð +ðB;ð ;ð ;ð<
 ð 
 ð 
 ðð ð ðð ð ð	Cð 	Cð 	Cð#1ð #1ð #1ðJð ð ð(ð (ð (ð (ð (ð (ð (r   r   c                 ó  — t          | t          ¦  «        �r¿| \  }}g }i }|D ]>}t          |¦  «        \  }}|                     |¦  «         |                     |¦  «         Œ?|t
          j        v rÏt          |¦  «        dk    r‚|t          v r6t          j
        |d         t          |         ¦   «         |d         ¦  «        |fS |t          v r8t          j        |d         t          |         ¦   «         g|d         g¦  «        |fS �ns|t          v sJ ‚t          j        t          |         ¦   «         |d         ¦  «        |fS t          |¦  «        rˆd                     t#          t%          |¦  «        ¦  «                             dd¦  «        ¦  «        }t          j        |t          j        ¦   «         ¦  «        }	|||<   t          j        |	|g ¦  «        }
|
|fS n¡t          | t.          j        ¦  «        rRt          j        | j        t          j        ¦   «         | j        j        | j        j        r| j        j        nd¬¦  «        i fS t          | t.          j        ¦  «        rt          j        | j        ¦  «        i fS tA          d| ›d	�¦  «        ‚)
z[Build a Python expression AST from an array expression built by
    RewriteArrayExprs.
    é   r   rj   z__ufunc_or_dufunc_{0}ú-Ú_)ÚlinenoÚ
col_offsetz.Don't know how to translate array expression 'ú')!r   ÚtupleÚ_arr_expr_to_astro   Úupdater   rH   r%   Ú_binopsÚastÚBinOpÚ_cmpopsÚCompareÚ	_unaryopsÚUnaryOpr   rW   ÚhexÚhashÚreplaceÚNameÚLoadÚCallr   ÚVarr-   rh   ÚlineÚcolr3   ÚNumr.   rV   )r:   rF   Úarr_expr_argsÚast_argsÚenvÚargÚast_argÚ	child_envÚfn_nameÚfn_ast_nameÚast_calls              r   rœ   rœ   
  s‚  € õ �$�ÑÔñ 'Ø ÑˆˆMØˆØˆØ ð 	"ð 	"ˆCÝ!1°#Ñ!6Ô!6ÑˆG�YØ�OŠO˜GÑ$Ô$Ð$Ø�JŠJ�yÑ!Ô!Ð!Ð!Ø•Ô2Ð2Ð2Ý�8‰}Œ} Ò!Ð!Ø��=�=Ýœ9Ø  œ¥W¨R¤[¡]¤]°H¸Q´KñAô AØBEðFð Fà��=�=Ýœ;Ø  œ¥g¨b¤k¡m¤m _°xÀ´{°mñEô EØFIðJð Jñ !ð �Y����Ý”{¥9¨R¤=¡?¤?°H¸Q´KÑ@Ô@À#ÐEÐEÝ�r‰]Œ]ð 	!Ø-×4Ò4Ý•D˜‘H”H‘”×%Ò% c¨3Ñ/Ô/ñ1ô 1ˆGåœ( 7­C¬H©J¬JÑ7Ô7ˆKØˆC�‰LÝ”x ¨X°rÑ:Ô:ˆHØ˜S�=Ð ð	!õ 
�D�"œ&Ñ	!Ô	!ð 'ÝŒx˜œ	¥3¤8¡:¤:Ø#œxœ}Ø37´8´<Ð#F 4¤8¤< <ÀQðHñ Hô HàIKðLð 	Lõ 
�D�"œ(Ñ	#Ô	#ð 'ÝŒw�t”zÑ"Ô" BÐ&Ð&Ý
Ð
Ø?C¸t¸tÐEñGô Gð Gr   c              #   óÜ  K  — t          ¦   «         }| D ]}}|j        }|j                             ||j        ¬¦  «        j        }|                     dd¦  «                             dd¦  «        }||v rt          |›d�¦  «        ‚||f||<   ||_        Œ~t          |¦  «        }	 |V — |                     ¦   «         D ]\  }}||_        ŒdS # |                     ¦   «         D ]\  }}||_        Œw xY w)za
    Legalize names in the variable list for use as a Python function's
    parameter names.
    )rh   ú$r—   ú.z not uniqueN)	r   r-   ÚscopeÚredefinerh   r§   ÚAssertionErrorÚlistrm   )Úvar_listÚvar_maprC   Úold_nameÚnew_nameÚparam_namess         r   Ú_legalize_parameter_namesrÄ   2  s   è è € õ ‰mŒm€GØð ð ˆØ”8ˆØ”9×%Ò% h°C´GÐ%Ñ<Ô<ÔAˆØ×#Ò# C¨Ñ-Ô-×5Ò5°c¸3Ñ?Ô?ˆà�wÐÐÝ  HÐ!;Ð!;Ð!;Ñ<Ô<Ð<Ø ˜Mˆ�ÑØˆŒˆÝ�w‘-”-€Kð ØÐÐÐð %Ÿ^š^Ñ-Ô-ð 	 ð 	 ‰MˆC�ØˆCŒHˆHð	 ð 	 ø˜WŸ^š^Ñ-Ô-ð 	 ð 	 ‰MˆC�ØˆCŒHˆHð	 øøøs   Â!C Ã#C+c                   ó<   ‡ — e Zd Zdej        dej        fˆ fd„Zˆ xZS )Ú_EraseInvalidLineRangesÚnodeÚreturnc                 ó´   •— t          ¦   «                              |¦  «        }t          |d¦  «        r%t          |dd ¦  «        �|j        |j        k    r|`|`|S )Nr˜   Ú
end_lineno)r   Úgeneric_visitÚhasattrÚgetattrr˜   rÊ   )r   rÇ   r#   s     €r   rË   z%_EraseInvalidLineRanges.generic_visitM  s\   ø€ Ý‰wŒw×$Ò$ TÑ*Ô*ˆÝ�4˜Ñ"Ô"ð 	(Ý�t˜\¨4Ñ0Ô0Ð<Ø”; ¤Ò0Ð0Ø˜Ø˜Øˆr   )rŽ   r�   r�   rŸ   ÚASTrË   r’   r“   s   @r   rÆ   rÆ   L  sO   ø€ € € € € ð #¤'ð ¨c¬gð ð ð ð ð ð ð ð ð ð r   rÆ   Úastreec                 ó˜   — t          j        | ¦  «         t          ¦   «                              | ¦  «         t          j        | ¦  «         dS )z)Inplace fixes invalid lineno ranges.
    N)rŸ   Úfix_missing_locationsrÆ   Úvisit)rÏ   s    r   Ú_fix_invalid_lineno_rangesrÓ   W  sF   € õ Ô˜fÑ%Ô%Ð%åÑÔ×#Ò# FÑ+Ô+Ð+åÔ˜fÑ%Ô%Ð%Ð%Ð%r   c                 ó$  ‡ ‡‡‡— dt          t          |¦  «        ¦  «                             dd¦  «        z  }|j        j        }|                     ¦   «         }t          t          |¦  «        d„ ¬¦  «        }d„ |D ¦   «         }t          |¦  «        5 }d„ |D ¦   «         }t          j
        d                     |¦  «        |d	¦  «        }	t          |	d
¦  «        rt          |	j        ¦  «        dk    sJ ‚|	j        d         }
||
j        _        t!          |j        ¦  «        \  |
j        d         _        }t'          |	¦  «         ddd¦  «         n# 1 swxY w Y   t)          |	|d	¦  «        }t+          ||¦  «         ||         }‰ j        }‰ j        Š |j        ˆ fd„|D ¦   «         Ž }g }|j        D ]m}t3          |t4          j        ¦  «        r|j        }t3          |t4          j        ¦  «        r|                     |j        ¦  «         ŒX|                     |¦  «         Œn |j         j        |Ž ŠtC          j"        ¦   «          #                    ¦   «         }|€tI          j%        ¦   «         n| &                    ¦   «         }d|_'        | (                    ‰|‰|d¬¦  «        Šddl)m*}  G ˆˆˆfd„d|j+        ¦  «        }tY          t          |¦  «        d|¬¦  «        }|j-        |j.        z   |_/        ˆ fd„|D ¦   «         }| 0                    |‰||||¦  «        S )z:Lower an array expression built by RewriteArrayExprs.
    z__numba_array_expr_%sr–   r—   c                 ó   — | j         S r   ©r-   )rC   s    r   ú<lambda>z#_lower_array_expr.<locals>.<lambda>j  s   € ÀÄ€ r   )Úkeyc                 ó   — g | ]	}|j         ‘Œ
S rb   rÖ   )rB   rC   s     r   rd   z%_lower_array_expr.<locals>.<listcomp>m  s   € Ð5Ð5Ð5˜c�”Ð5Ð5Ð5r   c                 ó8   — g | ]}t          j        |d ¦  «        ‘ŒS r   )rŸ   r²   )rB   Ú
param_names     r   rd   z%_lower_array_expr.<locals>.<listcomp>q  s4   € ð 3ð 3ð 3Ø"õ ”G˜J¨Ñ-Ô-ð 3ð 3ð 3r   zdef {0}(): returnÚexecr…   rj   r   Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r   )Útypeof©rB   r-   Úlowerers     €r   rD   z$_lower_array_expr.<locals>.<genexpr>†  s/   øè è € ÐEÐE°4˜'Ÿ.š.¨Ñ.Ô.ÐEÐEÐEÐEÐEÐEr   ÚnumpyF)ÚflagsÚcaching)Únpyimplc                   ó   •— e Zd Zˆ ˆˆfd„ZdS )ú%_lower_array_expr.<locals>.ExprKernelc                 óò   •‡ — t          |‰ j        j        ‰j        ¦  «        }ˆ fd„|D ¦   «         }‰ j                             ‰‰j        ‰|¦  «        }‰                      |‰j        ‰ j        j        ¦  «        S )Nc                 óF   •— g | ]\  }}}‰                      |||¦  «        ‘ŒS rb   )Úcast)rB   ÚvalÚintyÚouttyr   s       €r   rd   zB_lower_array_expr.<locals>.ExprKernel.generate.<locals>.<listcomp>Ÿ  s?   ø€ ð :ð :ð :Ù-˜S $¨ð Ÿš 3¨¨eÑ4Ô4ð :ð :ð :r   )ÚzipÚ	outer_sigr!   ÚcontextÚcall_internalÚfndescré   Úreturn_type)r   r!   Úarg_zipÚ	cast_argsr‰   ÚbuilderÚcresÚ	inner_sigs   `    €€€r   Úgeneratez._lower_array_expr.<locals>.ExprKernel.generate�  s‹   øø€ Ý˜$ ¤Ô 3°Y´^ÑDÔDˆGð:ð :ð :ð :Ø18ð:ñ :ô :ˆIà”\×/Ò/Ø˜œ i°ñ<ô <ˆFà—9’9˜V YÔ%:Ø!œ^Ô7ñ9ô 9ð 9r   N)rŽ   r�   r�   rø   )rõ   rö   r÷   s   €€€r   Ú
ExprKernelræ   œ  s8   ø€ € € € € ð	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9r   rù   )rS   ÚnoutrŽ   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rb   )Úloadvarrß   s     €r   rd   z%_lower_array_expr.<locals>.<listcomp>ª  s%   ø€ Ð8Ð8Ð8 dˆG�OŠO˜DÑ!Ô!Ð8Ð8Ð8r   )1r¥   r¦   r§   rh   ÚfilenamerJ   Úsortedrk   rÄ   rŸ   ÚparserW   rÌ   r%   r…   r!   rœ   r:   r.   rÓ   ÚcompilerÜ   rï   rõ   ri   r   r   ÚOptionalÚtyper1   ro   Údtyperò   r   ÚConfigStackÚtop_or_noner
   ÚFlagsrƒ   Úerror_modelÚcompile_subroutineÚnumba.nprä   Ú_Kernelr   rS   rú   rT   Únumpy_ufunc_kernel)rà   r:   Ú	expr_nameÚexpr_filenameÚexpr_var_listÚexpr_var_uniqueÚ	expr_argsÚexpr_paramsr°   Ú
ast_moduleÚast_fnÚ	namespaceÚcode_objÚimplrï   rî   Úinner_sig_argsÚargtyrâ   rä   rù   r   r!   rõ   rö   r÷   s   `                      @@@r   r   r   b  sœ  øøøø€ ð (­3­t°D©z¬z©?¬?×+BÒ+BÀ3ÈÑ+LÔ+LÑM€IØ”HÔ%€MØ—N’NÑ$Ô$€Mõ �S Ñ/Ô/Ð5IÐ5IÐJÑJÔJ€Oð 6Ð5 _Ð5Ñ5Ô5€Iõ 
# ?Ñ	3Ô	3ð /°{ð3ð 3Ø&1ð3ñ 3ô 3ˆõ ”YÐ2×9Ò9¸)ÑDÔDØ,¨fñ6ô 6ˆ
å�z 6Ñ*Ô*ÐH­s°:´?Ñ/CÔ/CÀqÒ/HÐ/HÐ/HÐ/HØ” Ô#ˆØ#ˆŒÔÝ*:¸4¼9Ñ*EÔ*EÑ'ˆŒ�AŒÔ˜iÝ" :Ñ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /õ �z =°&Ñ9Ô9€HÝˆ�9ÑÔÐØ�YÔ€Dð Œo€GØŒo€GØ�”ÐEÐEÐEÐE¸9ÐEÑEÔEÐF€IØ€NØ”ð )ð )ˆÝ�e�Uœ^Ñ,Ô,ð 	Ø”JˆEÝ�e�Uœ[Ñ)Ô)ð 	)Ø×!Ò! %¤+Ñ.Ô.Ð.Ð.à×!Ò! %Ñ(Ô(Ð(Ð(Ø+�	Ô%Ô+¨^Ð<€IåÔ$Ñ&Ô&×2Ò2Ñ4Ô4€EØ % �HŒNÑÔÐ°5·:²:±<´<€Eð  €EÔØ×%Ò% g¨t°YÀeØ.3ð &ñ 5ô 5€Dð !Ð Ð Ð Ð Ð ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9�W”_ñ 9ô 9ð 9õ ¥ I¡¤°QÀÐKÑKÔK€EØ”)˜eœjÑ(€E„Kà8Ð8Ð8Ð8¨iÐ8Ñ8Ô8€DØ×%Ò%Ø�˜) T¨5°*ñ>ô >ð >s   ÂB/EÅEÅE)MrŸ   Úcollectionsr   r   Ú
contextlibÚsysr   r   rá   r   ÚoperatorÚ
numba.corer   r   r	   r
   Únumba.core.typingr   Únumba.np.ufunc.dufuncr   r   Úregister_rewriteÚRewriter   ÚposÚUAddÚnegÚUSubÚinvertÚInvertr£   rp   ÚAddÚsubÚSubÚmulÚMultÚtruedivÚDivÚmodÚModÚor_ÚBitOrÚrshiftÚRShiftÚxorÚBitXorÚlshiftÚLShiftÚand_ÚBitAndÚpowÚPowÚfloordivÚFloorDivrž   ÚeqÚEqÚneÚNotEqÚltÚLtÚleÚLtEÚgtÚGtÚgeÚGtEr¡   rœ   ÚcontextmanagerrÄ   ÚNodeTransformerrÆ   rÎ   rÓ   r   rb   r   r   ú<module>rM     s„  ðØ 
€
€
€
Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ø 
€
€
€
Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø €€€à BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ %Ð %Ð %Ð %Ð %Ð %Ø (Ð (Ð (Ð (Ð (Ð (ð0ð 0ð 0ð €ÔÐ,Ñ-Ô-ðSð Sð Sð Sð S˜Ô(ñ Sô Sñ .Ô-ðSðn „L�#”(Ø„L�#”(Ø„O�S”Zð€	ð „L�#”'Ø„L�#”'Ø„L�#”(ØÔ�c”gØ„L�#”'Ø„L�#”)Ø„O�S”ZØ„L�#”*Ø„O�S”ZØ„M�3”:Ø„L�#”'ØÔ�s”|ð€ð" „K�”Ø„K�”Ø„K�”Ø„K�”Ø„K�”Ø„K�”ð€ð%Gð %Gð %GðP Ôð ð  ñ Ôð ð2ð ð ð ð ˜cÔ1ñ ô ð ð& s¤wð &ð &ð &ð &ðJ>ð J>ð J>ð J>ð J>r   