§
    ƒÛgDE ã                   óJ  — d dl Z d dlZd dl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Zd dlmZ d dlmZmZ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mZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dlm)Z) d dl*m+Z+ d d	l,m-Z-m.Z.m/Z/m0Z0 d d
l1m2Z2  G d„ de)j3        ¦  «        Z4d„ Z5d„ Z6 edg d¢d¬¦  «        Z7d„ Z8 G d„ de0¦  «        Z9d„ Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@d„ ZAd„ ZBd„ ZCd „ ZDd!„ ZEd"„ ZFd#„ ZGd$„ ZHd%„ ZId&„ ZJd'„ ZKd(„ ZLd)„ ZMd*„ ZNd+„ ZOd,„ ZPd-„ ZQd.„ ZRd/„ ZSd0„ ZTd1„ ZUd2„ ZVd3„ ZWd4„ ZXd5„ ZYdS )6é    N)Úmake_dataclass)Úparfor)ÚtypesÚirÚconfigÚcompilerÚsigutilsÚcgutils)Úadd_offset_to_labelsÚreplace_var_namesÚremove_delsÚlegalize_namesÚrename_labelsÚget_name_var_tableÚvisit_vars_innerÚget_definitionÚguardÚget_call_tableÚis_pureÚget_np_ufunc_typÚget_unused_var_nameÚis_const_callÚfixup_var_define_in_scopeÚtransfer_scopeÚfind_max_labelÚget_global_func_typ)Ú	signature)Úlowering)Úensure_parallel_support)ÚNumbaParallelSafetyWarningÚNotDefinedErrorÚCompilerErrorÚInternalError)ÚParforLoweringBuilderc                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚParforLowerzlThis is a custom lowering class that extends standard lowering so as
    to accommodate parfor.Parfor nodes.c                 ó¢   •— t          |t          j        ¦  «        rt          | |¦  «         d S t	          ¦   «                              |¦  «         d S ©N)Ú
isinstancer   ÚParforÚ_lower_parfor_parallelÚsuperÚ
lower_inst©ÚselfÚinstÚ	__class__s     €úS/granary/edev/quantum/lib/python3.11/site-packages/numba/parfors/parfor_lowering.pyr-   zParforLower.lower_inst1   sK   ø€ Ý�d�FœMÑ*Ô*ð 	%Ý" 4¨Ñ.Ô.Ð.Ð.Ð.å‰GŒG×Ò˜tÑ$Ô$Ð$Ð$Ð$ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   Ú__classcell__©r1   s   @r2   r&   r&   ,   sB   ø€ € € € € ð+ð +ð%ð %ð %ð %ð %ð %ð %ð %ð %r3   r&   c                 óR   — |j         €t          | |¦  «        S  |j         | |¦  «        S r(   )ÚlowererÚ_lower_parfor_parallel_std)r;   r   s     r2   r+   r+   8   s.   € Ø„~ÐÝ)¨'°6Ñ:Ô:Ð:àˆvŒ~˜g vÑ.Ô.Ð.r3   c                 ó°  — ddl m} t          ¦   «          | j        j        }| j        }| j        }| j        j        }t          j        |¦  «        | j        _        t          j
        r(t          d| j        t          | j        ¦  «        ¦  «         | j        j        }| j        }t          j
        rt          d¦  «          |j        ¦   «          |j        j        }	|j        j        }
t          j
        r)t          d|j        dt          |j        ¦  «        ¦  «         |j        j        D ]3}t          j
        rt          d|¦  «         |                      |¦  «         Œ4|j        D ]?}||vr9||         }t+          j        |
||	¦  «        }|                      |j        |¦  «         Œ@i }i }t2          j        j                             ||j        || j        ||¦  «         t          j
        r t          d|¦  «         t          d	|¦  «         |j        €J ‚t2          j        j                             ||j        ¦  «        }|j         |j!        }}t          j
        r t          d|¦  «         t          d|¦  «         tE          |¦  «        }i }g }|dk    �rC|j        j        }
|j        j        }	tG          | |
|	¬¦  «        }| $                    t2          j%        j&        j'        j(        tS          t2          j%        j&        j'        j(        ¦  «        d¬¦  «        }| *                    | +                    |g ¬¦  «        tX          j-        d¬¦  «        }t]          |¦  «        D �]z}||         }| j        j        |         }t+          j        |
||	¦  «        }t_          |¦  «        }|j0        }t          j
        r5t          d||||tY          j1        |¦  «        |t          |¦  «        ¦  «         te          |tX          j3        j4        ¦  «        r|j5        dz   } nd} | $                    tJ          j6        to          tJ          j6        ¦  «        tY          j8        tX          j-        | ¦  «        fdtY          j1        |¦  «        i¬¦  «        }!|g}"te          |tX          j3        j4        ¦  «        rÇ| *                    t*          j9         :                    |d|	¦  «        tY          j8        tX          j-        |j5        ¦  «        d¬¦  «        }#t]          |j5        ¦  «        D ]Y}$| *                    t*          j9         ;                    |#|$d
|	¦  «        tX          j-        d¬¦  «        }%|" <                    |%¦  «         ŒZ| =                    |"d¬¦  «        }&|j>         ?                    |¦  «        }'| @                    |'tY          j1        |¦  «        ¬¦  «        }(| +                    |!|&|(g¬¦  «        })| *                    |)|d¬¦  «        }*|*||j        <   | <                    |*¦  «         ||         jA        }+|+��
te          |tX          j3        j4        ¦  «        rÒ| $                    tJ          jB        to          tJ          jB        ¦  «        tY          j8        tX          j-        |j5        ¦  «        |fdtY          j1        |¦  «        i¬¦  «        },| @                    |+|d¬¦  «        }-| +                    |,|#|-|(g¬¦  «        }.| *                    |.|d ¬¦  «        }/| <                    |/¦  «         nä| @                    |+|d ¬¦  «        }/nË|}/t          jC        r½d!t‰          |¦  «        z   d"z   }0tY          jE        |0¦  «        }1| @                    |0|1d#¬¦  «        }2t+          jF        |2|gd
|	¬$¦  «        }3t�          tX          jH        ||2j                 ||j                 ¦  «        | j        jI        |3<   t          d%|3¦  «         |                      |3¦  «         ||j                 }4| J                    |4¦  «        }5t—          jL        ||5¦  «        }6|
 M                    d&|	¦  «        }7|4||7j        <   |6| j        |7j        <   t—          jN        ||  O                    |j        ¦  «        |5¬'¦  «        5 }8| P                    |8jQ        |6¦  «         | R                    |*|7|/¬(¦  «         d
d
d
¦  «         n# 1 swxY w Y   �Œ||jS                             ¦   «         }9d)|9_T        ||jU        d         jV        j                 }:|jU        dd
…         D ]};||;jV        j                 |:k    sJ ‚Œd*t2          j        j        _W        	 t±          | |||||9i t³          |¦  «        |:|j        ¦
  «
        \  }<}=}>}?}@d+t2          j        j        _W        n# d+t2          j        j        _W        w xY wd,g|=z   }=tE          |¦  «        }AtE          |=¦  «        tE          |¦  «        z
  |Az
  }Bt          j
        rPt          d-|=¦  «         t          d.|B¦  «         t          d/|¦  «         t          d0|¦  «         t          d1|A¦  «         tµ          |j[        |B|A|=|>|j        |¦  «        }Ct          j
        rt          d2|C¦  «         d3„ |jU        D ¦   «         }Dt          j
        r%t          d4|jU        ¦  «         t          d5|D¦  «         t¹          | |<|C|>|=|?|D||||j        |:|j        |@¦  «         |dk    rt»          ||| ||¦  «         |D ]0}E|                      t+          j^        |Ej        |	¬6¦  «        ¦  «         Œ1|| j        _        t          j
        rt          d7¦  «         d
S d
S )8a  Lowerer that handles LLVM code generation for parfor.
    This function lowers a parfor IR node to LLVM.
    The general approach is as follows:
    1) The code from the parfor's init block is lowered normally
       in the context of the current function.
    2) The body of the parfor is transformed into a gufunc function.
    3) Code is inserted into the main function that calls do_scheduling
       to divide the iteration space for each thread, allocates
       reduction arrays, calls the gufunc function, and then invokes
       the reduction function across the reduction arrays to produce
       the final reduction values.
    r   )Úget_thread_countzlowerer.fndescr+   zinit_block = ú zlower init_block instr = Ú	alias_mapÚarg_aliasesNzparfor_redvars:zparfor_reddict:)r;   ÚscopeÚloc© )ÚfobjÚftypeÚargs)rG   Únum_threads_var)ÚrhsÚtypÚnameÚreduction_infoé   Údtype)rE   rF   rG   ÚkwsÚshapeÚredarr_shapeÚredshapeonedimÚtuple_size_var©rK   )ÚcvalrJ   ÚredarrÚinit_val)rU   rJ   rK   Úredtosetzres_print1 for redvar ú:Ú	str_const©rG   ÚvarargrC   Úres_print_redvarz$loop_index)Úintp)ÚobjÚindexÚvalÚnumpyTFÚschedzfunc_args = znum_inputs = úparfor_outputs = úparfor_redvars = znum_reductions = zgu_signature = c                 ó6   — g | ]}|j         |j        |j        f‘ŒS rD   )ÚstartÚstopÚstep©Ú.0Úls     r2   ú
<listcomp>z._lower_parfor_parallel_std.<locals>.<listcomp>p  s%   € ÐHÐHÐH°�A”G˜QœV Q¤VÐ,ÐHÐHÐHr3   zloop_nests = úloop_ranges = )rC   z_lower_parfor_parallel done)_Únumba.np.ufunc.parallelr>   r   ÚcontextÚtyping_contextÚbuilderÚfndescÚtypemapÚcopyr   ÚDEBUG_ARRAY_OPTÚprintÚtypeÚvarmapÚdumpÚ
init_blockrC   rB   Úbodyr-   Úracesr   ÚVarÚ_alloca_varrK   ÚnumbaÚparforsr   Úfind_potential_aliases_parforÚparamsÚfunc_irÚget_parfor_outputsÚredvarsÚreddictÚlenr$   Úbind_global_functionÚnpÚufuncÚparallelÚ_iget_num_threadsr   ÚassignÚcallr   r^   ÚrangeÚredtyp_to_redarraytyperN   ÚDTyper)   ÚnpytypesÚArrayÚndimÚemptyr   ÚUniTupleÚExprÚgetattrÚstatic_getitemÚappendÚmake_tuple_variableÚ
_typingctxÚresolve_value_typeÚmake_const_variablerW   ÚfullÚDEBUG_ARRAY_OPT_RUNTIMEÚstrÚStringLiteralÚPrintr   ÚnoneÚ	calltypesÚget_value_typer
   Úalloca_onceÚredefineÚ	for_rangeÚloadvarÚstorer`   ÚsetitemÚflagsÚerror_modelÚ
loop_nestsÚindex_variableÚsequential_parfor_loweringÚ_create_gufunc_for_parfor_bodyÚboolÚ_create_shape_signatureÚget_shape_classesÚcall_parallel_gufuncÚ#_parfor_lowering_finalize_reductionÚDel)Fr;   r   r>   Ú	typingctxÚ	targetctxrr   Úorig_typemaprt   ry   rC   rB   ÚinstrÚracevarÚrvtypÚrvr@   rA   Úparfor_output_arraysÚparfor_redvarsÚparfor_reddictÚnredvarsÚredarrsÚ
to_cleanupÚpfbdrÚget_num_threadsrH   ÚiÚred_nameÚ
redvar_typÚredvarÚredarrvar_typÚreddtypeÚ	redarrdimÚglbl_np_emptyÚsize_var_listÚredshape_varÚjÚ	onedimvarÚsize_varrU   ÚdtÚ
empty_callÚ
redarr_varrW   Úfull_func_nodeÚinit_val_varÚ	full_callrX   Úres_print_strÚstrconsttypÚlhsÚ	res_printÚnum_thread_typeÚntllvm_typeÚalloc_loop_varÚnumba_ir_loop_index_varÚloopr®   Úindex_var_typrl   ÚfuncÚ	func_argsÚfunc_sigÚfunc_arg_typesÚexp_name_to_tuple_varÚnum_reductionsÚ
num_inputsÚgu_signatureÚloop_rangesÚvsF                                                                         r2   r<   r<   ?   s  € ð 9Ð8Ð8Ð8Ð8Ð8åÑÔÐØ”Ô.€IØ”€IØŒo€Gð ”>Ô)€Lå!œY |Ñ4Ô4€G„NÔÝÔð FÝÐ ¤µ°W´^Ñ0DÔ0DÑEÔEÐEØŒnÔ$€GØŒ^€FåÔð ÝÐ&Ñ'Ô'Ð'ØˆŒ‰Œˆà
Ô
Ô
€CØÔÔ#€Eõ Ôð PÝˆo˜vÔ0°#µt¸FÔ<MÑ7NÔ7NÑOÔOÐOØÔ"Ô'ð "ð "ˆÝÔ!ð 	6ÝÐ-¨uÑ5Ô5Ð5Ø×Ò˜5Ñ!Ô!Ð!Ð!à”<ð 0ð 0ˆØ˜&Ð Ð Ø˜GÔ$ˆEÝ”˜˜w¨Ñ,Ô,ˆBØ×Ò ¤¨Ñ/Ô/Ð/øà€IØ€KÝ	„MÔ×6Ò6°v¸v¼}ÈgØ(/¬¸ÀKñQô Qð QåÔð *Ýˆk˜9Ñ%Ô%Ð%Ýˆm˜[Ñ)Ô)Ð)ð Œ=Ð$Ð$Ð$å œ=Ô/×BÒBØ�”ñô Ðà%+¤^°V´^�N€NÝÔð 1ÝÐ Ñ0Ô0Ð0ÝÐ Ñ0Ô0Ð0õ �>Ñ"Ô"€HØ€GØ€JØ�!‚|�|àÔ!Ô'ˆØÔÔ#ˆÝ%¨g¸UÈÐLÑLÔLˆð  ×4Ò4Ý””Ô(Ô:Ý%¥e¤h¤nÔ&=Ô&OÑPÔPØð 5ñ 
ô 
ˆð  Ÿ,š,Ø—
’
˜?°�
Ñ4Ô4Ý”
Ø"ð 'ñ $ô $ˆõ �x‘”ð h	[ñ h	[ˆAØ% aÔ(ˆHà œÔ/°Ô9ˆJå”V˜E 8¨SÑ1Ô1ˆFõ 3°:Ñ>Ô>ˆMØ$Ô*ˆHÝÔ%ð 
ÝØ$ØØØ!ØÝ”K Ñ)Ô)Ø#Ý˜Ñ)Ô)ñ	ô 	ð 	õ ˜*¥e¤nÔ&:Ñ;Ô;ð Ø&œO¨aÑ/�	�	à�	ð
 "×6Ò6Ý”XÝ&¥r¤xÑ0Ô0å”N¥5¤:¨yÑ9Ô9ðð �eœk¨(Ñ3Ô3Ð4ð 7ñ ô ˆMð -Ð-ˆMõ ˜*¥e¤nÔ&:Ñ;Ô;ð 4à$Ÿ|š|ÝœŸš¨°¸Ñ=Ô=Ýœ¥u¤z°:´?ÑCÔCØ'ð  ,ñ  ô  �õ ˜zœÑ/Ô/ð 4ð 4�AØ %§¢ÝœG×2Ò2°<ÀÀDÈ#ÑNÔNÝ!œJØ-ð !-ñ !ô !�Ið
 "×(Ò(¨Ñ3Ô3Ð3Ð3ð ×0Ò0ØÐ$4ð 1ñ ô ˆHð
 Ô#×6Ò6°xÑ@Ô@ˆDØ×*Ò*°½%¼+ÀhÑ:OÔ:OÐ*ÑPÔPˆBàŸš M¸À2¸˜ÑGÔGˆJàŸšØ M¸ð &ñ ô ˆJð
 $.ˆG�F”KÑ Ø×Ò˜jÑ)Ô)Ð)à% hÔ/Ô8ˆHàÑ#Ý˜j­%¬.Ô*>Ñ?Ô?ð %ð &+×%?Ò%?ÝœWÝ.­r¬wÑ7Ô7å!œN­5¬:°z´ÑGÔGØ$ðð %¥e¤k°(Ñ&;Ô&;Ð<ð &@ñ &ô &�Nð $)×#<Ò#<Ø%Ø$Ø'ð $=ñ $ô $�Lð !&§
¢
Ø&¨l¸LÈ"Ð-Mð !+ñ !ô !�Ið  %Ÿ|š|Ø%Ø&Ø'ð  ,ñ  ô  �Hð ×%Ò% hÑ/Ô/Ð/Ð/à$×8Ò8Ø%Ø$Ø'ð  9ñ  ô  �H�Hð "�åÔ1ð 2Ø$<½sÀ6¹{¼{Ñ$JÈSÑ$P�MÝ"'Ô"5°mÑ"DÔ"D�Kà×3Ò3Ø*Ø'Ø(ð 4ñ ô �Cõ !#¤¨s°F¨mØ04¸#ð!?ñ !?ô !?�Iå:CÅEÄJØ=DÀSÄXÔ=NØ=DÀVÄ[Ô=Qñ;Sô ;S�G”NÔ,¨YÑ7õ Ð,¨iÑ8Ô8Ð8Ø×&Ò& yÑ1Ô1Ð1ð & oÔ&:Ô;ˆOà#×2Ò2°?ÑCÔCˆKå$Ô0°¸+ÑFÔFˆNð ',§n¢n°]ÀCÑ&HÔ&HÐ#à4CˆGÐ+Ô0Ñ1ð <JˆGŒNÐ2Ô7Ñ8õ Ô" 7¨G¯OªO¸OÔ<PÑ,QÔ,QÐXcÐdÑdÔdð [Ðhlà—’˜dœj¨.Ñ9Ô9Ð9ð —’ *Ð4KÐQY�ÑZÔZÐZð[ð [ð [ñ [ô [ð [ð [ð [ð [ð [ð [øøøð [ð [ð [ð [ùð ŒL×ÒÑÔ€EØ€EÔà˜FÔ-¨aÔ0Ô?ÔDÔE€MàÔ˜q˜r˜rÔ"ð ?ð ?ˆØ�qÔ'Ô,Ô-°Ò>Ð>Ð>Ð>Ð>Ø6:…E„MÔÔ3ð	@õ
 #AØ�V˜W i°¸EÀ2Ý�‰OŒO˜]¨F¬Lñ#:ô #:ñ		 ˆØ	Ø	Ø	Ø	ð ;@�ŒÔÔ7Ð7ø¸%�ŒÔÔ7Ð?Ð?Ð?Ð?ð �	˜IÑ%€IÝ˜Ñ(Ô(€NÝ�Y‘”¥#Ð&:Ñ";Ô";Ñ;¸nÑL€JÝÔð 3Ýˆn˜iÑ(Ô(Ð(Ýˆo˜zÑ*Ô*Ð*ÝÐ!Ð#7Ñ8Ô8Ð8ÝÐ! >Ñ2Ô2Ð2ÝÐ! >Ñ2Ô2Ð2Ý*ØÔ ØØØØØŒØñô €Lõ Ôð /ÝÐ Ñ.Ô.Ð.ð IÐH°fÔ6GÐHÑHÔH€KÝÔð -Ýˆo˜vÔ0Ñ1Ô1Ð1ÝÐ Ñ,Ô,Ð,ÝØØØØØØØØØØØÔØØŒØñô ð ð  �!‚|€|Ý+Ø�G˜W n°oñ	
ô 	
ð 	
ð
 ð 4ð 4ˆØ×Ò�2œ6 !¤&¨cÐ2Ñ2Ô2Ñ3Ô3Ð3Ð3ð *€G„NÔåÔð -ÝÐ+Ñ,Ô,Ð,Ð,Ð,ð-ð -s   á>4b>â>c	ãc	å	0f æf(Ú_ReductionInfo©Úredvar_infoÚredvar_namerË   rØ   Ú
redarr_typrW   T)Úfrozenc           	      ó<  — |                      ¦   «         D ]†\  }}|j        j        |         }|j        j        |j                 }|                     |¦  «        }	t          ||         |||||	¬¦  «        }
|
j        j        �t          nt          } || |||
¦  «         Œ‡dS )zYEmit code to finalize the reduction from the intermediate values of
    each thread.
    rñ   N)
Úitemsrs   rt   rK   r«   rð   rò   ÚredopÚ_lower_trivial_inplace_binopsÚ_lower_non_trivial_reduce)r   rÅ   r;   rÃ   Úthread_count_varró   rØ   rË   rô   rW   Úreduce_infoÚhandlers               r2   r¸   r¸   ¢  sÆ   € ð $+§=¢=¡?¤?ð @ð @Ñˆ�Zð ”^Ô+¨KÔ8ˆ
Ø”^Ô+¨J¬OÔ<ˆ
Ø—?’? ;Ñ/Ô/ˆå$Ø(¨Ô5Ø#Ø!Ø!Ø!Øð
ñ 
ô 
ˆð "Ô-Ô3Ð?õ 1Ð0å1ð 	ð 	ˆ�˜Ð!1°;Ñ?Ô?Ð?Ð?ð-@ð @r3   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú ParforsUnexpectedReduceNodeErrorc                 óP   •— t          ¦   «                              d|› �¦  «         d S )Nz!Unknown reduce instruction node: )r,   Ú__init__r.   s     €r2   r  z)ParforsUnexpectedReduceNodeError.__init__Ç  s*   ø€ Ý‰Œ×ÒÐC¸TÐCÐCÑDÔDÐDÐDÐDr3   )r4   r5   r6   r  r8   r9   s   @r2   rÿ   rÿ   Æ  sA   ø€ € € € € ðEð Eð Eð Eð Eð Eð Eð Eð Er3   rÿ   c                 ó¼  — |j         j        D ]�}t          ||¦  «        rndt          ||j        ¦  «        r@|j        j        }t          ||||¦  «        }|                     ||j	        j
        ¬¦  «         nt          |¦  «        ‚t          | |||j        ¦  «        r nŒ‘t          j        r2|j        }|                     | j        › d|j        › d|› d�|¦  «         dS dS )z+Lower trivial inplace-binop reduction.
    rT   z	: parfor z reduction ú =N)rò   Úreduce_nodesÚ_lower_var_to_var_assignÚ!_is_inplace_binop_and_rhs_is_initró   ÚvalueÚfnÚ_emit_binop_reduce_callÚstorevarÚtargetrK   rÿ   Ú_fix_redvar_name_ssa_mismatchr   r¡   Úprint_variablerC   r4   )r   r;   rû   rü   r0   r  Úredvar_resultÚvarnames           r2   rù   rù   Ë  s&  € ð Ô'Ô4ð ð ˆå# G¨TÑ2Ô2ð 	9Øå.¨t°[Ô5LÑMÔMð 	9Ø””ˆBÝ3Ø�GÐ-¨{ñô ˆMð ×Ò˜]°´Ô1AÐÑBÔBÐBÐBõ 3°4Ñ8Ô8Ð8õ )¨°¸$Ø#.Ô#:ñ<ô <ð 	àˆEð	õ Ô%ð 
ØÔ)ˆØ×ÒØŒzÐGÐG B¤KÐGÐG¸GÐGÐGÐGØñ	
ô 	
ð 	
ð 	
ð 	
ð
ð 
r3   c                 ó  ‡
— |j         › d�Š
|j        j                             ‰
|j        ¦  «         |                     |j        ¦  «        }t          j        |j	        |¦  «        5 }|j
        }|j        j        D ]¿}t          ||¦  «        rn“t          |t          j        ¦  «        rjt#          ˆ
fd„|                     ¦   «         D ¦   «         ¦  «        r=t'          |||¦  «        }|                     |‰
¦  «         |                     |¦  «         nt-          |¦  «        ‚t/          | |||j         ¦  «        r nŒÀddd¦  «         n# 1 swxY w Y   t0          j        r*|j         }	|                     | j        › d|	› d�|	¦  «         dS dS )zFLower non-trivial reduction such as call to `functools.reduce()`.
    ú#initc              3   ó.   •K  — | ]}|j         ‰k    V — Œd S r(   rT   )rk   ÚvarÚ	init_names     €r2   ú	<genexpr>z,_lower_non_trivial_reduce.<locals>.<genexpr>ú  s*   øè è € ÐNÐN°c˜CœH¨	Ò1ÐNÐNÐNÐNÐNÐNr3   Nz: parfor non-trivial reduction r  )ró   rs   rt   Ú
setdefaultrË   r«   rK   r
   rª   rr   r`   rò   r  r  r)   r   ÚAssignÚanyÚ	list_varsÚ_emit_getitem_callr
  r-   rÿ   r  r   r¡   r  rC   )r   r;   rû   rü   Únum_thread_llvalrä   Útidr0   Úelemr  r  s             @r2   rú   rú   é  sü  ø€ ð Ô*Ð1Ð1Ð1€Ià„NÔ×%Ò% i°Ô1GÑHÔHÐHð —’Ð'7Ô'<Ñ=Ô=ÐÝ	Ô	˜7œ?Ð,<Ñ	=Ô	=ð ÀØŒjˆØÔ+Ô8ð 	ð 	ˆDå'¨°Ñ6Ô6ð =Øå˜T¥2¤9Ñ-Ô-ð =ÝÐNÐNÐNÐN¸T¿^º^Ñ=MÔ=MÐNÑNÔNÑNÔNð=å)¨#¨w¸ÑDÔD�Ø× Ò   yÑ1Ô1Ð1Ø×"Ò" 4Ñ(Ô(Ð(Ð(õ 7°tÑ<Ô<Ð<õ -¨V°W¸dØ'2Ô'>ñ@ô @ð à�ðð%ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ, Ô%ð 
ØÔ)ˆØ×ÒØŒzÐEÐE¸'ÐEÐEÐEØñ	
ô 	
ð 	
ð 	
ð 	
ð
ð 
s   Á%CEÅE	ÅE	c                 óü   — t          |t          j        ¦  «        rat          |j        t          j        ¦  «        rB|                      |j        j        ¦  «        }|                      ||j        j        ¬¦  «         dS dS )zaLower Var->Var assignment.

    Returns True if-and-only-if `inst` is a Var->Var assignment.
    rT   TF)	r)   r   r  r  r~   r«   rK   r
  r  )r;   r0   Úloadeds      r2   r  r    sj   € õ
 �$�œ	Ñ"Ô"ð ¥z°$´*½b¼fÑ'EÔ'Eð Ø—’ ¤¤Ñ1Ô1ˆØ×Ò˜ d¤kÔ&6ÐÑ7Ô7Ð7ØˆtØˆ5r3   c                 óì   — d„ }|j         }|j        }|j        }|                     |j        j        ¦  «        }|| f}t          |j        |t          j	        ¦  «        }	| 
                    |||	|¦  «        }
|
S )z%Emit call to ``redarr_var[idx]``
    c                 ó   — | |         S r(   rD   )rV   r`   s     r2   Úreducer_getitemz+_emit_getitem_call.<locals>.reducer_getitem  s   € Ø�eŒ}Ðr3   )rr   rp   rô   r«   rØ   rK   r   rË   r   r^   Úcompile_internal)Úidxr;   rü   r"  rr   Úctxrô   Úarg_arrrG   Úsigr  s              r2   r  r    s}   € ðð ð ð Œo€GØ
Œ/€CØÔ'€JØ�oŠo˜kÔ4Ô9Ñ:Ô:€GØ�Sˆ>€DÝ
�KÔ*¨J½¼
Ñ
CÔ
C€CØ×Ò ¨¸#¸tÑDÔD€DØ€Kr3   c           
      ó4  — d„ }d„ }t           j        |t           j        |t           j        |t           j        |t           j        |i|          }|j        }|j        }|j        }	| 	                    |j
        j        ¦  «        }
t          j        r«|j
        j                             |j        ¦  «        }t#          j        |j
        |gd|j        ¬¦  «        }|j        j        }t-          t.          j        ||j
        j                 ||j                 ¦  «        |j        j        |<   |                     |¦  «         | 	                    |j        ¦  «        }||
|j        f}t-          |j        t.          j        |	|j        ¦  «        }|                     ||||¦  «        }|S )z;Emit call to the ``binop`` for the reduction variable.
    c                 óD   — |}t          | ¦  «        D ]}|||         z  }Œ|S r(   ©r�   ©Úthread_countrV   ÚinitÚcrÉ   s        r2   Úreduction_addz._emit_binop_reduce_call.<locals>.reduction_add.  ó2   € ØˆÝ�|Ñ$Ô$ð 	ð 	ˆAØ�˜”‰NˆAˆAØˆr3   c                 óD   — |}t          | ¦  «        D ]}|||         z  }Œ|S r(   r*  r+  s        r2   Úreduction_mulz._emit_binop_reduce_call.<locals>.reduction_mul4  r0  r3   Nr[   )ÚoperatorÚiaddÚisubÚimulÚ	ifloordivÚitruedivrp   rr   rô   r«   rØ   rK   r   r¡   rB   Úgetró   r   r¤   rC   rs   rt   r   r   r¥   r¦   r-   rW   rË   Úuintpr#  )Úbinopr;   rû   rü   r/  r2  Úkernelr%  rr   rô   r&  Úinit_varrß   rt   Úarg_thread_countrG   r'  r  s                     r2   r	  r	  *  s“  € ðð ð ðð ð õ 	Œ�}ÝŒ�}ÝŒ�}ÝÔ˜MÝÔ˜=ðð ô€Fð Œ/€CØŒo€GØÔ'€JØ�oŠo˜kÔ4Ô9Ñ:Ô:€GåÔ%ð &ØÔ)Ô/×3Ò3°KÔ4KÑLÔLˆÝ”HØÔ(¨(Ð3¸DØ”ð
ñ 
ô 
ˆ	ð ”.Ô(ˆÝ.7ÝŒJ˜ Ô 6Ô ;Ô<Ø�H”MÔ"ñ/
ô /
ˆŒÔ  Ñ+ð 	×Ò˜9Ñ%Ô%Ð%à—’Ð'7Ô'<Ñ=Ô=ÐØ˜g {Ô';Ð<€DÝ
ØÔ¥¤¨Z¸Ô9Oñô €Cð ×(Ò(¨°&¸#¸tÑDÔD€MØÐr3   c                 óÈ   — t          | t          j        ¦  «        sdS | j        }t          |t          j        ¦  «        sdS |j        dk    rdS |j        j        |› d�k    rdS dS )zDIs ``inst`` an inplace-binop and the RHS is the reduction init?
    FÚinplace_binopr  T)r)   r   r  r  r˜   ÚoprI   rK   )r0   ró   rI   s      r2   r  r  ^  sq   € õ �d�BœIÑ&Ô&ð ØˆuØ
Œ*€CÝ�c�2œ7Ñ#Ô#ð ØˆuØ
„v�Ò Ð ØˆuØ
„w„|˜+Ð,Ð,Ð,Ò,Ð,ØˆuØˆ4r3   c                 ó†  — | j         j        }t          |t          j        ¦  «        rš	 |                     |¦  «        }|j        }|j        j        }||k    }n # t          $ r ||j        j	        k    }Y nw xY w|rH||j        j	        k    r8| 
                    |j        j	        ¦  «        }	|                     |	|¬¦  «         dS dS )z5Fix reduction variable name mismatch due to SSA.
    rT   TF)r{   rB   r)   r   r  Ú	get_exactÚunversioned_namer  r!   rK   r«   r
  )
r   r;   r0   ró   rB   Úreduction_varÚredvar_unver_nameÚtarget_unver_nameÚis_same_source_varra   s
             r2   r  r  m  sí   € ð ÔÔ#€EÝ�$�œ	Ñ"Ô"ð ð	HØ!ŸOšO¨KÑ8Ô8ˆMð !.Ô >ÐØ $¤Ô <ÐØ!2Ð6GÒ!GÐÐøõ ð 	Að 	Að 	Að "-°´Ô0@Ò!@ÐÐÐð		Aøøøð ð 	ð ˜dœkÔ.Ò.Ð.Ø—o’o d¤kÔ&6Ñ7Ô7�Ø× Ò  ¨;Ð Ñ7Ô7Ð7Ø�tàˆ5s   ¨A ÁA4Á3A4c                 óz  ‡ ‡‡‡‡‡— t           j        rJt          d|||‰¦  «         |dd…         D ],}t          d|t          |¦  «         ‰ |‰¬¦  «        ¦  «         Œ-t	          |¦  «        |z
  }ˆ ˆˆfd„|dd…         D ¦   «         }	t          ¦   «         }
|	D ]}|r|D ]}|
                     |¦  «         ŒŒ|
rt          |
¦  «        dz   nd}|	                     d|f¦  «         |
                     |¦  «         |dz   }|
                     |¦  «         i Št          d¦  «        }|
D ]}|dk    rt          |¦  «        ‰|<   |dz  }Œ t          |¦  «        }d	|iŠˆfd
„Šg }g }d}d}t           j        r0t          d|¦  «         t          d|	¦  «         t          d|¦  «         t          |	|¦  «        D ]‡\  }}|dz   }|rt          ˆˆfd„|D ¦   «         ¦  «        }nd}||k    r<|                     t          |gt          |dd…         ¦  «        z   ¦  «        ¦  «         Œm|                     |¦  «         ||z  }Œˆ||fS )z&Create shape signature for GUFunc
    rµ   rM   NÚargument©rt   c                 ó6   •— g | ]}|‰vr ‰|‰¬ ¦  «        nd‘ŒS )rK  )éÿÿÿÿrD   )rk   r  r¶   r}   rt   s     €€€r2   rm   z+_create_shape_signature.<locals>.<listcomp>¡  s;   ø€ ÐjÐjÐjÐZ]¸#ÀUÐ:JÐ:JÐ Ð  ¨gÐ6Ñ6Ô6Ð6ÐPUÐjÐjÐjr3   r   ÚaÚlatest_alphac                 ój   •— | dk    r||          S ‰dxx         dz  cc<   t          ‰d         ¦  «        S )Nr   rO  rM   )Úchr)r.  Ú	class_mapÚ
alpha_dicts     €r2   Ú
bump_alphaz+_create_shape_signature.<locals>.bump_alpha·  sE   ø€ Ø�Š6ˆ6Ø˜Q”<Ðà�~Ð&Ð&Ô&¨!Ñ+Ð&Ð&Ñ&Ý�z .Ô1Ñ2Ô2Ð2r3   rD   rG   ÚclassesÚthreadcount_ordinalc              3   ó0   •K  — | ]} ‰|‰¦  «        V — Œd S r(   rD   )rk   r.  rT  rR  s     €€r2   r  z*_create_shape_signature.<locals>.<genexpr>É  s/   øè è € ÐCÐC¸!˜Z˜Z¨¨9Ñ5Ô5ÐCÐCÐCÐCÐCÐCr3   )r   rv   rw   rx   rˆ   ÚsetÚaddÚmaxÚinsertÚordrQ  ÚzipÚtupler›   Úlist)r¶   rì   rë   rG   rè   r}   rt   rÉ   Ú
num_inoutsrU  Ú	class_setÚ_classÚ	max_classÚthread_num_classÚalphabetÚnrV  Úgu_sinÚgu_soutÚcountÚsyms_sinÚclsÚargÚdim_symsrS  rT  rR  s   `    ``                 @@@r2   rµ   rµ   �  sÝ  øøøøøø€ õ Ôð QÝÐ'¨°^ÀTÈ5ÑQÔQÐQØ�a�b�b”ð 	Qð 	QˆAÝ�*˜a¥ a¡¤Ð*;Ð*;¸AÀwÐ*OÑ*OÔ*OÑPÔPÐPÐPå�T‘”˜^Ñ+€JàjÐjÐjÐjÐjÐjÐaeÐfgÐfhÐfhÔaiÐjÑjÔj€GÝ‘”€IØð !ð !ˆØð 	!Øð !ð !�Ø—’˜aÑ Ô Ð Ð øØ&/Ð6•�I‘” Ñ"Ð"°Q€IØ‡N‚N�1�y�lÑ#Ô#Ð#Ø‡M‚M�)ÑÔÐØ  1‘}ÐØ‡M‚MÐ"Ñ#Ô#Ð#Ø€Iå�3‰xŒx€HØð ð ˆØ
ˆqŠ&ˆ&Ý˜h™-œ-ˆ9�Q‰<Ø�q‰=ˆ8øÝ˜h™-œ-Ðà  8Ð,€Jð3ð 3ð 3ð 3ð 3ð €FØ€GØ€EØ€HÝÔð :Ýˆf�dÑÔÐÝˆi˜Ñ!Ô!Ð!ÝÐ#Ð%8Ñ9Ô9Ð9Ý˜ Ñ&Ô&ð !ð !‰ˆˆSØ˜‘	ˆØð 	ÝÐCÐCÐCÐCÐC¸sÐCÑCÔCÑCÔCˆHˆHàˆHØ�JÒÐð �MŠM�%Ð!4Ð 5½¸XÀaÀbÀb¼\Ñ8JÔ8JÑ JÑKÔKÑLÔLÐLÐLà�MŠM˜(Ñ#Ô#Ð#Ø˜Ñ ˆHˆHØ�GÐÐr3   c                 ó^   — t          | j        ¦  «        D ]\  }}t          d|d|¦  «         Œd S )Nú    r?   )Ú	enumerater|   rw   )ÚblockrÉ   r0   s      r2   Ú_print_blockrr  Õ  s@   € Ý˜UœZÑ(Ô(ð $ð $‰ˆˆ4Ýˆf�a˜˜dÑ#Ô#Ð#Ð#ð$ð $r3   c                 óx   — |                       ¦   «         D ]$\  }}t          d|¦  «         t          |¦  «         Œ%dS )z%Pretty-print a set of IR blocks.
    zlabel: N)r÷   rw   rr  )Ú	body_dictÚlabelrq  s      r2   Ú_print_bodyrv  Ù  sL   € ð "ŸšÑ)Ô)ð ð ‰ˆˆuÝˆi˜ÑÔÐÝ�UÑÔÐÐðð r3   c                 ó2  — |                       ¦   «         }t          |                     ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        }||         j        }||         j                             t          j        ||¦  «        ¦  «         |S r(   )	ru   ÚminÚkeysrZ  rC   r|   r›   r   ÚJump)Ú	loop_bodyÚblocksÚfirst_labelÚ
last_labelrC   s        r2   Úwrap_loop_bodyr  á  su   € Ø�^Š^ÑÔ€FÝ�f—k’k‘m”mÑ$Ô$€KÝ�V—[’[‘]”]Ñ#Ô#€JØ
�Ô
Ô
 €CØ
ˆ:ÔÔ×"Ò"¥2¤7¨;¸Ñ#<Ô#<Ñ=Ô=Ð=Ø€Mr3   c                 óˆ   — t          |                      ¦   «         ¦  «        }| |         j        d d…         | |         _        d S )NrM  )rZ  ry  r|   )r{  r~  s     r2   Úunwrap_loop_bodyr�  é  s=   € Ý�Y—^’^Ñ%Ô%Ñ&Ô&€JØ!*¨:Ô!6Ô!;¸C¸R¸CÔ!@€IˆjÔÔÐÐr3   c                 óœ   — | |v rdS | |v r,|                      | ¦  «         |                     | ¦  «         dS |                      | ¦  «         dS )a_  If the variable is already defined more than once, do nothing.
       Else if defined exactly once previously then transition this
       variable to the defined more than once set (remove it from
       def_once set and add to def_more set).
       Else this must be the first time we've seen this variable defined
       so add to def_once set.
    N)rY  Úremove)Úa_defÚdef_onceÚdef_mores      r2   Úadd_to_def_once_setsr‡  í  sa   € ð �ÐÐØˆØ	�(Ð	Ð	Ø�Š�UÑÔÐØ�Š˜ÑÔÐÐÐà�Š�UÑÔÐÐÐr3   c                 ó¾  — |                       t          j        ¦  «        }|D �]¹}|j        j        }t          |||¦  «         |j        }	t          |	t          j        ¦  «        r.t          |	j        t          j
        ¦  «        r|	j        j        ||<   t          |	t          j        ¦  «        r/|	j        dk    r$|	j        j        |v r|	j        j        |	j        f||<   t          |	t          j        ¦  «        rm|	j        dk    rb|	j        j        |v rT||	j        j                 \  }
}|
|v r*||
         }t!          ||¦  «        st          |
||¦  «         nt          |
||¦  «         t          |	t          j        ¦  «        r`|	j        dk    rU|	j        D ]M}t          |t          j        ¦  «        r|j        }||         }t'          |dd¦  «        rt          |||¦  «         ŒN�Œ»dS )aË  Effect changes to the set of variables defined once or more than once
       for a single block.
       block - the block to process
       def_once - set of variable names known to be defined exactly once
       def_more - set of variable names known to be defined more than once
       getattr_taken - dict mapping variable name to tuple of object and attribute taken
       module_assigns - dict mapping variable name to the Global that they came from
    r™   r�   ÚmutableFN)Ú
find_instsr   r  r  rK   r‡  r  r)   ÚGlobalÚpytypesÚ
ModuleTyper4   r˜   rA  Úattrræ   r   rG   r~   r™   )rq  r…  r†  Úgetattr_takenrt   Úmodule_assignsÚassignmentsÚ
one_assignr„  rI   Úbase_objÚ	base_attrÚbase_mod_nameÚargvarÚavtypes                  r2   Úcompute_def_once_blockr˜  ý  sú  € ð ×"Ò"¥2¤9Ñ-Ô-€Kà!ð 0Eñ 0Eˆ
àÔ!Ô&ˆå˜U H¨hÑ7Ô7Ð7àÔˆÝ�c�2œ9Ñ%Ô%ð 	;õ ˜#œ)¥WÔ%7Ñ8Ô8ð ;Ø(+¬	Ô(:�˜uÑ%Ý�c�2œ7Ñ#Ô#ð 	>¨¬°)Ò(;Ð(;ÀÄ	ÄÐRZÐ@ZÐ@Zà$'¤I¤N°C´HÐ#=ˆM˜%Ñ Ý�c�2œ7Ñ#Ô#ð 	C¨¬°&Ò(8Ð(8¸S¼X¼]ÈmÐ=[Ð=[ð #0°´´Ô">ÑˆH�iØ˜>Ð)Ð)ð !/¨xÔ 8�Ý$ ]°IÑ>Ô>ð Gõ )¨°8¸XÑFÔFÐFøõ % X¨x¸ÑBÔBÐBÝ�c�2œ7Ñ#Ô#ð 	E¨¬°&Ò(8Ð(8ð œ(ð 
Eð 
E�å˜f¥b¤fÑ-Ô-ð )Ø#œ[�FØ  œ�õ ˜6 9¨eÑ4Ô4ð Eõ )¨°¸8ÑDÔDÐDøùða0Eð 0Er3   c           
      ó  — |                       ¦   «         D ]o\  }}t          ||||||¦  «         |j        D ]N}t          |t          j        ¦  «        r2t          |j        |||||¦  «         t          |j        |||||¦  «         ŒOŒpdS )zÞCompute the set of variables defined exactly once in the given set of blocks
       and use the given sets for storing which variables are defined once, more than
       once and which have had a getattr call on them.
    N)	r÷   r˜  r|   r)   r   r*   r{   Úcompute_def_once_internalr{  )	r{  r…  r†  r�  rt   r�  ru  rq  r0   s	            r2   rš  rš  ;  s±   € ð "ŸšÑ)Ô)ð 
vð 
v‰ˆˆuõ 	˜u h°¸-ÈÐR`ÑaÔaÐaà”Jð 	vð 	vˆDÝ˜$¥¤Ñ.Ô.ð vå& t¤¸À(ÈMÐ[bÐdrÑsÔsÐså)¨$¬.¸(ÀHÈmÐ]dÐftÑuÔuÐuøð	vð
vð 
vr3   c                 ór   — t          ¦   «         }t          ¦   «         }i }i }t          | |||||¦  «         ||fS )zRCompute the set of variables defined exactly once in the given set of blocks.
    )rX  rš  )r{  rt   r…  r†  r�  r�  s         r2   Úcompute_def_oncerœ  M  sD   € õ ‰uŒu€HÝ‰uŒu€HØ€MØ€NÝ˜i¨°8¸]ÈGÐUcÑdÔdÐdØ�XÐÐr3   c                 ór   — t          | t          j        ¦  «        sJ ‚|                     | j        ¦  «         | S r(   )r)   r   r~   rY  rK   )r  Úvarsets     r2   Ú	find_varsrŸ  W  s3   € Ý�c�2œ6Ñ"Ô"Ð"Ð"Ð"Ø
‡J‚JˆsŒxÑÔÐØ€Jr3   c                 óÂ  — | j         j        |v r:|                     | df¦  «         t          j        dk    rt          d| d¦  «         dS t          ¦   «         }t          | j        t          |¦  «         | 
                    |¦  «        }t          j        dk    rt          d| d|d|¦  «         t          |¦  «        d	k    r�t          | j        d |¦  «        r‡t          j        dk    r!t          d
| || j         j                 ¦  «         |                     | ¦  «         t          || j         j                 t          j        j        ¦  «        s|| j         j        gz  }dS t          |¦  «        d	k    r9|                     | df¦  «         t          j        dk    rt          d| d¦  «         n8|                     | df¦  «         t          j        dk    rt          d| d¦  «         dS )Nzstored arrayrM   ÚInstructionz: could not be hoisted because the created array is stored.Fz_hoist_internal:zuses:zdiff:r   zWill hoist instructionTÚ
dependencyz. could not be hoisted because of a dependency.znot purez, could not be hoisted because it isn't pure.)r  rK   r›   r   rv   rw   rX  r   r  rŸ  Ú
differencerˆ   r   r)   r   r“   r”   )	r0   Údep_on_paramÚ
call_tableÚhoistedÚnot_hoistedrt   Ústored_arraysÚusesÚdiffs	            r2   Ú_hoist_internalr«  \  sÅ  € à„{Ô˜=Ð(Ð(Ø×Ò˜D .Ð1Ñ2Ô2Ð2ÝÔ! QÒ&Ð&Ý�- Ð'cÑdÔdÐdØˆuå‰5Œ5€DÝ�T”Z¥¨DÑ1Ô1Ð1Ø�?Š?˜<Ñ(Ô(€DÝÔ Ò"Ð"ÝÐ  $¨°°wÀÑEÔEÐEÝ
ˆ4�y„y�A‚~€~�' $¤*¨d°JÑ?Ô?€~ÝÔ! QÒ&Ð&ÝÐ*¨D°'¸$¼+Ô:JÔ2KÑLÔLÐLØ�Š�tÑÔÐÝ˜' $¤+Ô"2Ô3µU´^Ô5IÑJÔJð 	/Ø˜Tœ[Ô-Ð.Ñ.ˆLØˆtåˆt‰9Œ9�qŠ=ˆ=Ø×Ò  lÐ3Ñ4Ô4Ð4ÝÔ%¨Ò*Ð*Ý�m TÐ+[Ñ\Ô\Ð\øà×Ò  jÐ1Ñ2Ô2Ð2ÝÔ%¨Ò*Ð*Ý�m TÐ+YÑZÔZÐZØˆ5r3   c                 ó¶  — |j         D ]Ð}t          |t          j        t          j        f¦  «        r`|                      |j        j        ¦  «         t          ||j	        j                 dd¦  «        r|                     |j	        j        ¦  «         Œˆt          |t          j        ¦  «        r.t          | ||j        |¦  «         t          | ||j        |¦  «         ŒÑd S )Nr‰  F)r|   r)   r   ÚStaticSetItemÚSetItemrY  r  rK   r™   r  r   r*   Úfind_setitems_blockr{   Úfind_setitems_bodyr{  )ÚsetitemsÚitemssetrq  rt   r0   s        r2   r¯  r¯  {  sÍ   € Ø”
ð Lð LˆÝ�d�RÔ-­r¬zÐ:Ñ;Ô;ð 
	LØ�LŠL˜œÔ)Ñ*Ô*Ð*õ
 �w˜tœzœÔ/°¸EÑBÔBð .Ø—’˜TœZœ_Ñ-Ô-Ð-øÝ˜�fœmÑ,Ô,ð 	LÝ ¨(°D´OÀWÑMÔMÐMÝ˜x¨°4´>À7ÑKÔKÐKøðLð Lr3   c                 ó^   — |                      ¦   «         D ]\  }}t          | |||¦  «         ŒdS )z³
      Find the arrays that are written into (goes into setitems) and the
      mutable objects (mostly arrays) that are written into other arrays
      (goes into itemsset).
    N)r÷   r¯  )r±  r²  r{  rt   ru  rq  s         r2   r°  r°  ‰  sF   € ð "ŸšÑ)Ô)ð @ð @‰ˆˆuÝ˜H h°°wÑ?Ô?Ð?Ð?ð@ð @r3   c           	      ó0  — t          | t          j        ¦  «        r{t          | j        t          j        ¦  «        r\| j        j        dk    rL| j        j        j        |v r9|| j        j        j                 }|dt          gk    rt          | ||||||¦  «        S dS )Nr�   r–   F)
r)   r   r  r  r˜   rA  ræ   rK   rŠ   r«  )r0   r¤  r¥  r¦  r§  rt   r¨  Ú	call_lists           r2   Úempty_container_allocator_hoistr¶  ’  s˜   € å�4�œÑ#Ô#ð HÝ�4”:�rœwÑ'Ô'ðHàŒ
Œ˜ÒÐØŒ
ŒÔ 
Ð*Ð*Ø˜tœzœÔ3Ô4ˆ	Ø˜¥"˜Ò%Ð%Ý" 4¨°zÀ7Ø#.°¸ñHô Hð Hàˆ5r3   c                 ó–  — t          j         | ¦  «        }g }g }t          ||¦  «        \  }}t          |¦  «        \  }	}
t          ¦   «         }t          ¦   «         }t	          ||||¦  «         t          t          |¦  «                             |¦  «        ¦  «        }t          j        dk    rt          d|d|d|d|d| ¦
  «
         |D ]}t          |||¦  «         Œ|                     ¦   «         D �]X\  }}g }|j        D �]@}t          |||	||||¦  «        rŒt          |t          j        ¦  «        r%|j        j        |v rt'          |||	||||¦  «        rŒWnÓt          |t(          j        ¦  «        r¹g }t          j        dk    r#t          d¦  «         |                     ¦   «          |j        j        D ]k}t          |||	||||¦  «        rŒt          |t          j        ¦  «        r$|j        j        |v rt'          |||	||||¦  «        rŒV|                     |¦  «         Œl||j        _        |                     |¦  «         �ŒB||_        �ŒZ||fS )NrM   zhoist - def_once:z	setitems:z	itemsset:zdep_on_param:zparfor_params:r   )ru   rœ  r   rX  r°  r_  r£  r   rv   rw   r‡  r÷   r|   r¶  r)   r   r  r  rK   r«  r   r*   rz   r{   r›   )Úparfor_paramsr{  rt   Úwrapped_blocksr¤  r¦  r§  r…  r†  r¥  Úreverse_call_tabler±  r²  Úsiru  rq  Ú	new_blockr0   Únew_init_blockÚib_insts                       r2   Úhoistr¿  ž  s²  € Ý”9˜]Ñ+Ô+€LØ€GØ€Kõ *¨)°WÑ=Ô=Ñ€HˆhÝ'5°nÑ'EÔ'EÑ$€ZÐ#å‰uŒu€HÝ‰uŒu€HÝ�x ¨9°gÑ>Ô>Ð>Ý�˜LÑ)Ô)×4Ò4°XÑ>Ô>Ñ?Ô?€LÝÔ Ò"Ð"ÝÐ! 8¨[¸(ÀKÐQYÐ[jÐlxð  {Kð  MZñ  	[ô  	[ð  	[Øð 5ð 5ˆÝ˜R ¨8Ñ4Ô4Ð4Ð4à!ŸšÑ)Ô)ð ñ ‰ˆˆuØˆ	Ø”Jð 	#ñ 	#ˆDÝ.¨t°\À:Ø#*¨K¸À(ñLô Lð 6àÝ˜D¥"¤)Ñ,Ô,ð 6°´Ô1AÀXÐ1MÐ1MÝ" 4¨°zØ#*¨K¸À(ñLô Lð ð ð	õ
 ˜D¥&¤-Ñ0Ô0ð 6Ø!#�ÝÔ)¨QÒ.Ð.Ý˜(‘O”O�OØ—I’I‘K”K�KØ#œÔ3ð 
3ð 
3�GÝ6°wÀØ" G¨[¸'À8ñMô Mð %à Ý$ W­b¬iÑ8Ô8ð %ØœÔ+¨xÐ7Ð7Ý*¨7°LÀ*Ø+2°KÀÈ(ñTô Tð %ð %Ø"×)Ò)¨'Ñ2Ô2Ð2Ð2Ø'5�”Ô$à×Ò˜TÑ"Ô"Ð"Ñ"ØˆŒ
‰
Ø�KÐÐr3   c                 óB   — t          | t          j        j        ¦  «         S r(   )r)   r   r“   r”   )Úredtypes    r2   Úredtyp_is_scalarrÂ  Ò  s   € Ý˜'¥5¤>Ô#7Ñ8Ô8Ð8Ð8r3   c                 ó¨   — d}t          | t          j        j        ¦  «        r|| j        z  }| j        } t          j                             | |d¦  «        S )ziGo from a reducation variable type to a reduction array type used to hold
       per-worker results.
    rM   ÚC)r)   r   r“   r”   r•   rN   )ÚredtyprÏ   s     r2   r‘   r‘   Õ  sM   € ð €Iå�&�%œ.Ô.Ñ/Ô/ð Ø�V”[Ñ ˆ	à”ˆÝŒ>×Ò ¨	°3Ñ7Ô7Ð7r3   c                 ó¤   — t          | t          j        j        ¦  «        sJ ‚t          j                             | j        | j        | j        ¦  «        S )zYGiven a reduction array type, find the type of the reduction argument to the gufunc.
    )r)   r   r“   r”   rN   r•   Úlayout)Úredarraytyps    r2   Úredarraytype_to_sigrÉ  á  sB   € õ �k¥5¤>Ô#7Ñ8Ô8Ð8Ð8Ð8ÝŒ>×Ò Ô 1°;Ô3CÀ[ÔEWÑXÔXÐXr3   c                 óz   — t          | ¦  «        }|                     ¦   «         D ]\  }}||k    r||         ||<   Œ|S )aQ   We use ir_utils.legalize_names to replace internal IR variable names
        containing illegal characters (e.g. period) with a legal character
        (underscore) so as to create legal variable names.
        The original variable names are in the typemap so we also
        need to add the legalized name to the typemap as well.
    )r   r÷   )Únamesrt   ÚoutdictÚxÚys        r2   Úlegalize_names_with_typemaprÏ  ç  sH   € õ ˜UÑ#Ô#€Gà—’‘”ð $ð $‰ˆˆ1à�Š6ˆ6à  œˆG�A‰JøØ€Nr3   c                 ó^   — t          | t          j        ¦  «        r| j        dk    r| j        S | S )Nr   )r)   r   ÚArrayCompatibler•   rN   )rÍ  s    r2   Úto_scalar_from_0drÒ  ÷  s.   € Ý�!•UÔ*Ñ+Ô+ð ØŒ6�QŠ;ˆ;Ø”7ˆNØ€Hr3   c
           
      óZ,  ‡‡e‡f— t           j        dk    rt          d¦  «         |j        j        }
t          j        |j        ¦  «        }t          |¦  «         t          |j	        ¦  «        }d„ |j	        D ¦   «         }|j
        }t          j        j                             ||¦  «        }| j        j        Št          j        j                             | j        ||| j        j        ¦  «        \  }}t)          t+          t-          |¦  «        t-          |¦  «        z
  t-          |¦  «        z
  ¦  «        ¦  «        }t           j        dk    r|t          d|dt/          |¦  «        ¦  «         t          d|dt/          |¦  «        ¦  «         t          d|dt/          |¦  «        ¦  «         t          d|dt/          |¦  «        ¦  «         g }i }i }d	}g }|D �]Ç}‰|         }t1          |t2          j        ¦  «        st1          |t2          j        ¦  «        rœ|j        }|j        }|t           j        k    sJ ‚g }t?          |¦  «        D ]O}d
tA          |¦  «        z   }| !                    |¦  «         | !                    |¦  «         ||f||<   |dz  }|‰|<   ŒP|||<   | !                    |¦  «         ŒÛt1          |t2          j"        ¦  «        st1          |t2          j#        ¦  «        r£|j        }|j        }|t           j        k    sJ ‚g }t?          |¦  «        D ]U}d
tA          |¦  «        z   }| !                    |¦  «         | !                    |¦  «         ||f||<   |dz  }||         ‰|<   ŒV|||<   | !                    |¦  «         �Œ²| !                    |¦  «         �ŒÉ|}t           j        dk    rt          d|dt/          |¦  «        ¦  «         |	 $                    t-          |¦  «        ¦  «        }	|	D ])} d| z  }!tK          j&        tO          |!|
¦  «        ¦  «         Œ*tQ          |	|‰| j        j        ¦  «         g }"g }#|D ]m}$|$dz   }%|" !                    |%¦  «         tS          ‰|$         ¦  «        }&|# !                    |&¦  «         tU          |&¦  «        }'|%‰v r‰|%         |'k    sJ ‚Œh|'‰|%<   Œn||z   |"z   }t           j        dk    rlt          d|dt/          |¦  «        ¦  «         t          d|dt/          |¦  «        ¦  «         t          d|dt/          |¦  «        ¦  «         tW          |¦  «         tY          ||z   |z   ‰¦  «        Šft           j        dk    r>t          dt)          ‰f -                    ¦   «         ¦  «        dt/          ‰f¦  «        ¦  «         tY          |‰¦  «        Šeˆefd„|D ¦   «         }(t           j        dk    r�t          dt)          ‰e -                    ¦   «         ¦  «        dt/          ‰e¦  «        ¦  «         t          d|(dt/          |(¦  «        ¦  «         |D ]=})t          d|)¦  «         t          d‰|)         dt/          ‰|)         ¦  «        ¦  «         Œ>ˆfd„|D ¦   «         }*ˆfd„||z   D ¦   «         |#z   }+t           j        dk    r t          d|*¦  «         t          d|+¦  «         t]          |‰f¦  «         |},ˆffd„|D ¦   «         }|}-g }d}.t?          t          |-¦  «        ¦  «        D ]v}/|.rW|/t          |¦  «        k     rDt1          |*|/         t2          j/        j0        ¦  «        r| !                    |-|/         dz   ¦  «         Œ[| !                    |-|/         ¦  «         Œwt]          |‰e¦  «         tc          |¦  «        }0te          d|0¦  «        }1t           j        dk    rt          d|dt/          |¦  «        ¦  «         dtg          ti          |¦  «        ¦  «         5                    d d!¦  «        z  }2t           j        rt          d"t/          |2¦  «        d|2¦  «         d#}3|3d$|2z   d%z   d& 6                    |¦  «        z   d'z   z  }3tn          t          d(œ}4| -                    ¦   «         D �]"\  }5}6‰|5         }7|3d)‰f|5         z   z  }3t1          |7t2          j#        ¦  «        st1          |7t2          j        ¦  «        rd*}8nd}8|8�r†tq          tr          | j        |5¦  «        }9d+}:t           j        rt          d,|9t/          |9¦  «        ¦  «         |9�Çt1          |9tt          j;        ¦  «        rV|9j<        d-k    rKtq          tr          | j        |9j=        ¦  «        }:t           j        rt          d.|:t/          |:¦  «        ¦  «         nWt1          |9tt          j>        ¦  «        r=‰|9j?                 }:t           j        r$t          d.|:t/          |:¦  «        |:j?        ¦  «         |:�ït1          |:tt          j@        ¦  «        st1          |:tt          jA        ¦  «        r<|:jB        };t           j        rt          d/|;t/          |;¦  «        ¦  «         |;|4|:j?        <   n¿t1          |:t2          jC        jD        ¦  «        r_|:j?         E                    d0¦  «        d	         }<t           j        r)t          d1|<|:jF        t/          |:jF        ¦  «        ¦  «         |:jF        |4|<<   n@t           j        rt          d2¦  «         t�          d3tA          |5¦  «        z   |5j        ¦  «        ‚|3d4|7jF        jH        z   d0z   z  }3t“          |6|7jJ        ¦  «        D ]\  }=}>|3|>d5z   ‰f|=         z   d6z   z  }3Œn?|3d7d& 6                    ˆffd8„|6D ¦   «         ¦  «        z   z  }3t          |6¦  «        dk    r|3d6z  }3|3d9z  }3�Œ$t?          t          |¦  «        ¦  «        D ]F}/|.rBt1          |*|/         t2          j/        j0        ¦  «        r|3d)|-|/         z   d:z   ||/         z   d9z   z  }3ŒGd;}?t          |"¦  «        d	k    r|3d)|?z   d4z   z  }3|3d<z  }3t“          |"|¦  «        D ]s\  }%}$|3d)‰f|$         z   d5z   ‰f|%         z   d=z   |?z   d>z   z  }3t           jK        r?|3d?z  }3|3d@‰f|$         z   d6z   ‰f|$         z   dAz   z  }3|3dB‰f|%         z   d6z   ‰f|%         z   dAz   z  }3Œtt?          |¦  «        D ]X}@t?          |@dz   ¦  «        D ]}A|3d)z  }3Œ|@}B|3dC|(|@         z   dDz   tA          |B¦  «        z   dEz   tA          |B|z   ¦  «        z   dFz   z  }3ŒYt           jK        rSt?          |dz   ¦  «        D ]}A|3d)z  }3Œ|3dGz  }3t?          |¦  «        D ]}@|3dH|(|@         z   dIz   |(|@         z   d6z   z  }3Œ |3d9z  }3t?          |dz   ¦  «        D ]}A|3d)z  }3Œ|3|1dJz   z  }3t“          |"|¦  «        D ]V\  }%}$t           jK        r"|3dK‰f|$         z   d9z   z  }3|3dL‰f|%         z   d9z   z  }3|3d)‰f|%         z   d=z   |?z   dMz   ‰f|$         z   dNz   z  }3ŒW|3dOz  }3t           j        r=t          dPt/          |3¦  «        dN|3¦  «         t          dQ|4t/          |4¦  «        ¦  «         i }Ct™          |3|4|C¦  «         |C|2         }Dt           j        rt          dRt/          |D¦  «        dN|D¦  «         t›          jN        |D¦  «        }Et           j        r]t          dSt/          |E¦  «        ¦  «         |E O                    ¦   «          t          dTt/          |¦  «        ¦  «         tW          |¦  «         tc          |EjP        ¦  «        }Fi }G|1gt+          ‰f Q                    ¦   «         ¦  «        z   |(z   }H|F -                    ¦   «         D ]1\  }=}$|=|Hvr(|j        jR         S                    |=|
¦  «        j?        |G|=<   Œ2t]          |EjP        |G¦  «         t           j        r#t          dU¦  «         |E O                    ¦   «          t2          j/         0                    |ddV¦  «        g|*z   }It           j        rt          dWt/          |I¦  «        dN|I¦  «         t©          |EjP        ¦  «        dz   }Jt«          ||J¦  «        }t©          |¦  «        dz   }Kt           jK        �rÒ| -                    ¦   «         D �]¼\  }L}M|M                     ¦   «         }N|N V                    ¦   «          |Mj        }
|MjR        }O|MjW        D �]r}P|N !                    |P¦  «         t1          |Ptt          jX        ¦  «        �r?‰|PjY        j?                 t2          jZ        vrŒRdX [                    |PjY        j?        ¦  «        }Qt3          j\        |Q¦  «        }R|O S                    dY|
¦  «        }Stu          jX        tu          j]        |Q|
¬Z¦  «        |S|
¬[¦  «        }T|R‰|Sj?        <   |N !                    |T¦  «         tu          j^        |S|PjY        gd+|
¬\¦  «        }U|N !                    |U¦  «         t          j_        j`         a                    t2          jb        ‰|Sj?                 ‰|PjY        j?                 ¦  «        }V|V| j        j        |U<   �Œt|N||L<   �Œ¾t           j        rt          d]¦  «         tW          |¦  «         tÇ          |¦  «        }WtÉ          ||‰|W¦  «        \  }X}Y|EjP        tË          |EjP         f                    ¦   «         ¦  «                 }Z|ZjW        d+d^…         |Xz   |ZjW        d^         gz   |Z_W        tÏ          |¦  «         | jh        d_         }[|X|Yd`œ|[ji        |jj        <   t           j        rt          da¦  «         tW          |¦  «         |EjP         -                    ¦   «         D �]‚\  }L}Mt×          |MjW        ¦  «        D �]e\  }}Pt1          |Ptt          jX        ¦  «        �rD|PjY        j?        |1k    �r3|Pj        }
|MjR        }Otu          jl        |O|
¦  «        }\|MjW        d+|…         |\_W        |MjW        |dz   d+…         |M_W        tË          | f                    ¦   «         ¦  «        }]|\ !                    tu          jm        |]|
¦  «        ¦  «         | -                    ¦   «         D ]\  }^}_tÝ          |_|O¦  «        |EjP        |^<   Œtß          | f                    ¦   «         ¦  «        }`|M|EjP        |K<   |\|EjP        |L<   |EjP        |`          !                    tu          jm        |K|
¦  «        ¦  «          n�Œg�Œƒ t           j        r#t          db¦  «         |E O                    ¦   «          tá          |EjP        ¦  «        |E_P        t          |EjP        ¦  «         t           j        rCt          dc¦  «         |E O                    ¦   «          t          dd|¦  «         t          de‰¦  «         |jq        }a|s"t           j        rt          df¦  «         d*|_q        tå          |EjP        ¦  «          G dg„ dhtš          js        ¦  «        }bt›          jt        |||E|It2          jb        |||b¬i¦  «        }c|a|_q        tÃ          t2          jb        g|I¢R Ž }dt           j        rt          dj|d¦  «         |c|,|d|+|fS )ka~  
    Takes a parfor and creates a gufunc function for its body.
    There are two parts to this function.
    1) Code to iterate across the iteration space as defined by the schedule.
    2) The parfor body that does the work for a single point in the iteration space.
    Part 1 is created as Python text for simplicity with a sentinel assignment to mark the point
    in the IR where the parfor body should be added.
    This Python text is 'exec'ed into existence and its IR retrieved with run_frontend.
    The IR is scanned for the sentinel assignment where that basic block is split and the IR
    for the parfor body inserted.
    rM   z'starting _create_gufunc_for_parfor_bodyc                 ó&   — g | ]}|j         j        ‘ŒS rD   )r±   rK   rj   s     r2   rm   z2_create_gufunc_for_parfor_body.<locals>.<listcomp>   s   € ÐEÐEÐE¨a�AÔ$Ô)ÐEÐEÐEr3   zparfor_params = r?   rd   zparfor_inputs = re   r   Úexpanded_tuple_var_z$parfor_inputs post tuple handling = z‘Variable %s used in parallel loop may be written to simultaneously by multiple workers and may result in non-deterministic or unintended results.Ú_arrzloop_indices = zloop_body = zparam_dict = c                 ó    •— g | ]
}‰|         ‘ŒS rD   rD   )rk   rï   Úind_dicts     €r2   rm   z2_create_gufunc_for_parfor_body.<locals>.<listcomp>¢  s   ø€ Ð<Ð<Ð<¨!˜( 1œ+Ð<Ð<Ð<r3   zind_dict = zlegal_loop_indices = zpd = z
pd type = c                 ó:   •— g | ]}t          ‰|         ¦  «        ‘ŒS rD   )rÒ  ©rk   rï   rt   s     €r2   rm   z2_create_gufunc_for_parfor_body.<locals>.<listcomp>¯  s&   ø€ ÐHÐHÐH°QÕ$ W¨Q¤ZÑ0Ô0ÐHÐHÐHr3   c                 ó    •— g | ]
}‰|         ‘ŒS rD   rD   rÚ  s     €r2   rm   z2_create_gufunc_for_parfor_body.<locals>.<listcomp>±  s   ø€ ÐKÐKÐK Q�g˜a”jÐKÐKÐKr3   znew param_types:znew func_arg_types:c                 ó    •— g | ]
}‰|         ‘ŒS rD   rD   )rk   rï   Ú
param_dicts     €r2   rm   z2_create_gufunc_for_parfor_body.<locals>.<listcomp>»  s   ø€ Ð:Ð:Ð: q�Z ”]Ð:Ð:Ð:r3   FÚparamÚ__sentinel__zlegal parfor_params = z__numba_parfor_gufunc_%sú-Ú_zgufunc_name Ú zdef z(sched, z, z):
)rŠ   r€   ro  TNz	func_def:r�   znamed_tuple_def:zgval:ú(zname:z0Didn't find definition of namedtuple for globls.zCould not find definition of z = ú=ú,z = (c                 ó    •— g | ]
}‰|         ‘ŒS rD   rD   )rk   rÍ  rÝ  s     €r2   rm   z2_create_gufunc_for_parfor_body.<locals>.<listcomp>  s   ø€ Ð-OÐ-OÐ-OÀ¨j¸¬mÐ-OÐ-OÐ-Or3   z)
z = np.ascontiguousarray(Ú!ParallelAcceleratorGufuncThreadIdz*numba.np.ufunc.parallel._iget_thread_id()
ú[z]
z<    print("thread id =", ParallelAcceleratorGufuncThreadId)
zF    print("initial reduction value",ParallelAcceleratorGufuncThreadId,z.shape)
z>    print("reduction array",ParallelAcceleratorGufuncThreadId,zfor z in range(sched[z	], sched[z] + np.uint8(1)):
zprint(ú"z",z = 0
zD    print("final reduction value",ParallelAcceleratorGufuncThreadId,zD    print("final reduction array",ParallelAcceleratorGufuncThreadId,z] = ú
z    return None
zgufunc_txt = zglobls:zgufunc_func = zgufunc_ir dump zloop_body dump zgufunc_ir dump after renaming rÄ  zgufunc_param_types = z{} =rZ   )r  rC   )r  r  rC   r[   zparfor loop bodyrM  Úparfor_diagnostics)r¦  r§  zAfter hoistingz#gufunc_ir last dump before renamingzgufunc_ir last dumpr®   rt   z(No aliases found so adding noalias flag.c                   ó   — e Zd Zd„ ZdS )ú<_create_gufunc_for_parfor_body.<locals>.ParforGufuncCompilerc                 óN  — ddl m} t          j        } |d¦  «        }|                     | j        ¦  «        }|j                             |j        ¦  «         |                     | j        ¦  «        }|j                             |j        ¦  «         | 	                    ¦   «          |gS )Nr   )ÚPassManagerÚfull_parfor_gufunc)
Únumba.core.compiler_machineryrï  r   ÚDefaultPassBuilderÚdefine_parfor_gufunc_pipelineÚstateÚpassesÚextendÚ/define_parfor_gufunc_nopython_lowering_pipelineÚfinalize)r/   rï  ÚdpbÚpmÚparfor_gufunc_passesÚlowering_passess         r2   Údefine_pipelineszM_create_gufunc_for_parfor_body.<locals>.ParforGufuncCompiler.define_pipelines   s    € ØAÐAÐAÐAÐAÐAÝÔ-ˆCØ�Ð1Ñ2Ô2ˆBØ#&×#DÒ#DÀTÄZÑ#PÔ#PÐ ØŒI×ÒÐ1Ô8Ñ9Ô9Ð9Ø!×QÒQÐRVÔR\Ñ]Ô]ˆOØŒI×Ò˜_Ô3Ñ4Ô4Ð4à�KŠK‰MŒMˆMØ�4ˆKr3   N)r4   r5   r6   rý  rD   r3   r2   ÚParforGufuncCompilerrí  ÿ  s#   € € € € € ð
	ð 
	ð 
	ð 
	ð 
	r3   rþ  )Úpipeline_classz5finished create_gufunc_for_parfor_body. kernel_sig = )ur   rv   rw   r{   rC   ru   r{  r   rˆ   r°   rƒ   r€   r�   r   r…   rs   rt   Úget_parfor_reductionsr„   r¦   Úsortedr_  rX  rx   r)   r   r—   ÚNamedUniTupleri  rN   ÚPARFOR_MAX_TUPLE_SIZEr�   r¢   r›   ÚTupleÚ
NamedTupler£  ÚwarningsÚwarnr    Úreplace_var_with_arrayr‘   rÉ  rv  rÏ  r÷   r   r“   r”   r   r   ÚhexÚhashÚreplaceÚjoinrŠ   r   r   r   r˜   rA  ræ   ÚArgrK   r‹  ÚFreeVarr  Ú
containersÚBaseNamedTupleÚsplitÚinstance_classr"   r4   r]  Úfieldsr¡   Úexecr   Úrun_frontendrz   r|  ÚvaluesrB   r©   r   r   Úclearr|   r  r  Únumber_domainÚformatr£   ÚConstr¤   ÚcoreÚtypingr   r¥   r  r¿  rx  ry  r�  ÚmetadataÚ
hoist_infoÚidrp  ÚBlockrz  r   rZ  r   Únoaliasr   ÚCompilerBaseÚ
compile_ir)gr;   r   rt   rº   r»   r®   ÚlocalsÚhas_aliasesrå   r}   rC   r{  Ú
parfor_dimÚloop_indicesr¸  Úparfor_outputsrÂ   rÃ   Úparfor_inputsÚtuple_expanded_parfor_inputsÚtuple_var_to_expanded_namesÚexpanded_name_to_tuple_varÚnext_expanded_tuple_varÚparfor_tuple_paramsÚpiÚpi_typeÚtuple_countÚtuple_dtypeÚthis_var_expansionrÉ   Úexpanded_nameÚtuple_typesÚraceÚmsgÚparfor_redarrsÚparfor_red_arg_typesr  ÚarrÚredarraytypeÚ	redarrsigÚlegal_loop_indicesÚpdÚparam_typesré   Úparfor_argsÚparfor_params_origÚascontigÚpindexÚloop_body_var_tableÚsentinel_nameÚgufunc_nameÚ
gufunc_txtÚgloblsÚtup_varÚ	exp_namesÚtup_typeÚ	named_tupÚfunc_defÚnamed_tuple_defÚgvalÚnamed_tuple_namerK   Ú
field_nameÚgufunc_thread_id_varÚeachdimÚindentÚ	sched_dimÚloclsÚgufunc_funcÚ	gufunc_irÚ	var_tableÚnew_var_dictÚreserved_namesÚgufunc_param_typesÚgufunc_stub_last_labelÚ	new_labelru  rq  r¼  rB   r0   ÚstrvalrÝ   rÞ   Ú
assign_lhsÚ
print_noder'  r¹  r¦  r§  Ústart_blockÚdiagnosticsÚ
prev_blockÚbody_first_labelrl   ÚbÚbody_last_labelÚ	old_aliasrþ  Úkernel_funcÚ
kernel_sigrØ  rÝ  sg     `                                                                                                  @@r2   r³   r³   ý  sš  øøø€ õ, Ô Ò"Ð"ÝÐ7Ñ8Ô8Ð8à
Ô
Ô
€Cõ ”	˜&Ô*Ñ+Ô+€IÝ�	ÑÔÐå�VÔ&Ñ'Ô'€JØEÐE°6Ô3DÐEÑEÔE€Lð ”M€Må”]Ô)×<Ò<¸VÀ]ÑSÔS€NàŒnÔ$€GÝ%*¤]Ô%9×%OÒ%OØŒ˜ °´Ô0Hñ&Jô &JÑ"€N�Nõ ÝÝ�ÑÔÝ�ÑÔñ å�ÑÔñ ñ	!ô 	!ñ"ô "€Mõ Ô Ò"Ð"ÝÐ  -°µd¸=Ñ6IÔ6IÑJÔJÐJÝÐ! >°3½¸^Ñ8LÔ8LÑMÔMÐMÝÐ  -°µd¸=Ñ6IÔ6IÑJÔJÐJÝÐ! >°3½¸^Ñ8LÔ8LÑMÔMÐMð $&Ð Ø"$ÐØ!#ÐØÐØÐàð .4ñ .4ˆà˜"”+ˆå�g�uœ~Ñ.Ô.ð *	4µ*¸WÅeÔFYÑ2ZÔ2Zð *	4à!œ-ˆKØ!œ-ˆKà¥&Ô">Ò>Ð>Ð>Ð>Ø!#ÐÝ˜;Ñ'Ô'ð 5ð 5�à 5½Ð<SÑ8TÔ8TÑ T�à,×3Ò3°MÑBÔBÐBØ"×)Ò)¨-Ñ8Ô8Ð8ð >@À¸GÐ*¨=Ñ9Ø'¨1Ñ,Ð'à)4�˜Ñ&Ð&ð /AÐ'¨Ñ+Ø×&Ò& rÑ*Ô*Ð*Ð*Ý˜¥¤Ñ-Ô-ð 	4µ¸GÅUÔEUÑ1VÔ1Vð 	4ð "œ-ˆKØ!œ-ˆKà¥&Ô">Ò>Ð>Ð>Ð>Ø!#ÐÝ˜;Ñ'Ô'ð 8ð 8�Ø 5½Ð<SÑ8TÔ8TÑ T�Ø,×3Ò3°MÑBÔBÐBØ"×)Ò)¨-Ñ8Ô8Ð8Ø=?À¸GÐ*¨=Ñ9Ø'¨1Ñ,Ð'Ø)4°Q¬�˜Ñ&Ð&Ø.@Ð'¨Ñ+Ø×&Ò& rÑ*Ô*Ð*Ñ*à(×/Ò/°Ñ3Ô3Ð3Ñ3Ø0€MÝÔ Ò"Ð"ÝÐ4°mÀSÍ$È}ÑJ]ÔJ]Ñ^Ô^Ð^ð ×Ò�S Ñ0Ô0Ñ1Ô1€EØð <ð <ˆð=à?CñDˆõ 	ŒÕ0°°cÑ:Ô:Ñ;Ô;Ð;Ð;Ý˜5 )¨W°g´nÔ6NÑOÔOÐOð €NØÐØð 	%ð 	%ˆØ�F‰lˆØ×Ò˜cÑ"Ô"Ð"Ý-¨g°c¬lÑ;Ô;ˆØ×#Ò# LÑ1Ô1Ð1Ý'¨Ñ5Ô5ˆ	Ø�'ˆ>ˆ>Ø˜3”< 9Ò,Ð,Ð,Ð,Ð,à$ˆG�C‰LˆLð " NÑ2°^ÑC€MåÔ Ò"Ð"ÝÐ  -°µd¸=Ñ6IÔ6IÑJÔJÐJÝÐ ¨sµD¸Ñ4FÔ4FÑGÔGÐGÝˆn˜i¨­d°9©o¬oÑ>Ô>Ð>Ý�IÑÔÐõ -¨]¸^Ñ-KÐNaÑ-aÐcjÑkÔk€JÝÔ Ò"Ð"ÝØÝØ× Ò Ñ"Ô"ñ$ô $àÝ�ÑÔñ	ô 	ð 	õ +¨<¸ÑAÔA€Hà<Ð<Ð<Ð<¨|Ð<Ñ<Ô<ÐÝÔ Ò"Ð"Ýˆm�V H§N¢NÑ$4Ô$4Ñ5Ô5°s½DÀ¹N¼NÑKÔKÐKÝØ#ØØÝÐ#Ñ$Ô$ñ		&ô 	&ð 	&ð
  ð 	Eð 	EˆBÝ�'˜2ÑÔÐÝ�, ¨¤¨Sµ$°w¸r´{Ñ2CÔ2CÑDÔDÐDÐDð IÐHÐHÐH¸-ÐHÑHÔH€KàKÐKÐKÐK¨=¸>Ñ+IÐKÑKÔKÐNbÑb€NÝÔ Ò"Ð"ÝÐ  +Ñ.Ô.Ð.ÝÐ# ^Ñ4Ô4Ð4õ �i Ñ,Ô,Ð,à€Kà:Ð:Ð:Ð:¨MÐ:Ñ:Ô:€MØ&Ðà€MØ€HÝ�Ð.Ñ/Ô/Ñ0Ô0ð =ð =ˆØð 	=Ø•S˜Ñ'Ô'Ò'Ð'Ý�{ 6Ô*­E¬NÔ,@ÑAÔAð (à× Ò Ð!3°FÔ!;¸GÑ!CÑDÔDÐDÐDà× Ò Ð!3°FÔ!;Ñ<Ô<Ð<Ð<õ �i Ñ*Ô*Ð*Ý,¨YÑ7Ô7ÐÝ'¨Ð8KÑLÔL€MåÔ Ò"Ð"ÝØ$ØØÝ�ÑÔñ		!ô 	!ð 	!ð -Ý�D�‰LŒLÑÔ×!Ò! # sÑ+Ô+ñ-€KåÔð Cåˆn�d ;Ñ/Ô/°°kÑBÔBÐBà€Jð �&˜;Ñ&ØñØ—i’i Ñ.Ô.ñ0Ø28ñ9ñ 9€Jõ ¥Ð'Ð'€Fð
 :×?Ò?ÑAÔAð :ñ :Ñˆ�Ø˜7Ô#ˆØ�f˜z¨'Ô2Ñ2Ñ2ˆ
å�x¥Ô!1Ñ2Ô2ð 	Ý�x¥Ô!4Ñ5Ô5ð	àˆIˆIàˆIàñ .	"õ �^¨W¬_¸gÑFÔFˆHØ"ˆOÝÔ%ð =Ý�k 8­T°(©^¬^Ñ<Ô<Ð<ØÐ#Ý˜x­¬Ñ1Ô1ð 	KØ”K 6Ò)Ð)Ý&+­N¸G¼OÈXÌ]Ñ&[Ô&[�OÝÔ-ð ZÝÐ0°/Å4ÈÑCXÔCXÑYÔYÐYøÝ ­"¬&Ñ1Ô1ð KØ&-¨h¬mÔ&<�OÝÔ-ð KÝÐ0°/Ý" ?Ñ3Ô3°_Ô5IñKô Kð KàÐ*Ý˜µ´	Ñ:Ô:ð NÝ˜µ´
Ñ;Ô;ðNà*Ô0�DÝÔ-ð 9Ý˜g t­T°$©Z¬ZÑ8Ô8Ð8Ø37�F˜?Ô/Ñ0Ð0Ý µÔ1AÔ1PÑQÔQð NØ'6Ô';×'AÒ'AÀ#Ñ'FÔ'FÀqÔ'IÐ$ÝÔ-ð DÝ˜gÐ'7Ø-Ô<Ý" ?Ô#AÑBÔBñDô Dð Dð 0?Ô/M�FÐ+Ñ,øåÔ)ð NÝÐLÑMÔMÐMÝ#Ð$CÅcÈ'ÁlÄlÑ$RØ%,¤[ñ2ô 2ð 2à˜% (Ô"9Ô"BÑBÀSÑHÑHˆJÝ$'¨	°8´?Ñ$CÔ$Cð Hð HÑ ��jØ˜j¨3Ñ.°¸DÔ1AÑAÀCÑGÑG�
�
ðHð ˜& 4§9¢9Ð-OÐ-OÐ-OÐ-OÀYÐ-OÑ-OÔ-OÑ#PÔ#PÑPÑPˆJÝ�9‰~Œ~ Ò"Ð"ð ˜cÑ!�
à�eÑˆ
‰
å�˜MÑ*Ô*Ñ+Ô+ð Nð NˆØð 	N�
 ;¨vÔ#6½¼Ô8LÑMÔMð 	NØ˜6Ð$6°vÔ$>Ñ>Ø,ñ-Ø/<¸VÔ/DñEØGLñMñ NˆJøð ?Ðå
ˆ>ÑÔ˜QÒÐØ�fÐ3Ñ3°eÑ;Ñ;ˆ
ØÐCÑCˆ
õ ˜¨Ñ7Ô7ð Uð U‰ˆˆSØ�f˜z¨#œÑ.ØñØ˜c”?ñ#Ø%(ñ)Ø+?ñ@ØBGñHñ 	Hˆ
åÔ)ð 	UØÐ[Ñ[ˆJØÐdÐgqÐruÔgvÑvÐy|Ñ|ð  @Jð  KNô  @Oñ  Oð  R]ñ  ]ñ  ]ˆJØÐ\Ð_iÐjmÔ_nÑnÐqtÑtð  xBð  CFô  xGñ  Gð  JUñ  Uñ  UˆJøõ ˜Ñ$Ô$ð .ð .ˆÝ˜G a™KÑ(Ô(ð 	!ð 	!ˆFØ˜&Ñ ˆJˆJØˆ	Ø�vØ)¨'Ô2ñ3à)ñ*õ ˜9‘~”~ñ&ð #ñ	#õ
 ˜9Ø%ñ&ñ 'ô 'ñ'ð -ñ-ñ 	.ˆ
ˆ
õ Ô%ð Ý˜J¨™NÑ+Ô+ð 	!ð 	!ˆFØ˜&Ñ ˆJˆJØ�hÑˆ
Ý˜ZÑ(Ô(ð 	ið 	iˆGØ˜$Ð!3°GÔ!<Ñ<¸uÑDÐGYÐZaÔGbÑbÐehÑhÑhˆJˆJØ�eÑˆ
õ ˜
 Q™Ñ'Ô'ð ð ˆØ�fÑˆ
ˆ
Ø�- (Ñ*Ñ*€Jå˜¨Ñ7Ô7ð Ið I‰ˆˆSÝÔ)ð 	}ØÐbÐeoÐpsÔetÑtÐw|Ñ|Ñ|ˆJØÐbÐeoÐpsÔetÑtÐw|Ñ|Ñ|ˆJà�f˜z¨#œÑ.ØñØ&ñ'Ø)/ñ0Ø2<¸S´/ñBØDHñIñ 	Iˆ
ˆ
àÐ%Ñ%€JåÔð /Ýˆo�t JÑ/Ô/°°zÑBÔBÐBÝˆi˜¥ f¡¤Ñ.Ô.Ð.à€EÝˆ�V˜UÑ#Ô#Ð#Ø˜Ô$€KåÔð FÝÐ¥ [Ñ 1Ô 1°4¸ÑEÔEÐEåÔ% kÑ2Ô2€IÝÔð ÝÐ¥ i¡¤Ñ1Ô1Ð1Ø�ŠÑÔÐÝÐ¥ i¡¤Ñ1Ô1Ð1Ý�IÑÔÐõ # 9Ô#3Ñ4Ô4€IØ€LØ#�_ÝˆZ×ÒÑ Ô Ñ!Ô!ñ"Ø$6ñ7€Nà—_’_Ñ&Ô&ð Rð R‰	ˆˆcØ˜Ð&Ð&Ø!'Ô!2Ô!8×!AÒ!AÀ$ÈÑ!LÔ!LÔ!QˆL˜ÑøÝ�iÔ&¨Ñ5Ô5Ð5ÝÔð ÝÐ.Ñ/Ô/Ð/Ø�ŠÑÔÐÝœ.×.Ò.Ø˜1˜cñ#ô #ð $Ø&1ñ2ÐåÔð  ÝØ#ÝÐ#Ñ$Ô$ØØñ		 ô 	 ð 	 õ ,¨IÔ,<Ñ=Ô=ÀÑAÐõ % YÐ0FÑGÔG€Iå˜yÑ)Ô)¨AÑ-€Iõ Ô%ñ  )Ø%ŸOšOÑ-Ô-ð 	)ñ 	)‰LˆE�5ØŸ
š
™œˆIØ�OŠOÑÔÐØ”)ˆCØ”KˆEØœ
ð ?ñ ?�Ø× Ò  Ñ&Ô&Ð&å˜d¥B¤IÑ.Ô.ñ ?à˜tœ{Ô/Ô0½Ô8KÐKÐKØ ð $Ÿ]š]¨4¬;Ô+;Ñ<Ô<�FÝ"'Ô"5°fÑ"=Ô"=�KàŸ.š.¨°cÑ:Ô:�Cå!#¤µ´ÀÈCÐ1PÑ1PÔ1PØ25¸3ð"@ñ "@ô "@�Jà(3�G˜CœHÑ%Ø×$Ò$ ZÑ0Ô0Ð0õ "$¤°°T´[Ð/AÈ$ÐTWÐ!XÑ!XÔ!X�JØ×$Ò$ ZÑ0Ô0Ð0Ýœ*Ô+×5Ò5µe´jØ+2°3´8Ô+<Ø+2°4´;Ô3CÔ+DñFô F�Cð <?�G”NÔ,¨ZÑ8ùØ(ˆI�eÑÑåÔð ÝÐ Ñ!Ô!Ð!Ý�IÑÔÐå# IÑ.Ô.€NÝ  °	¸7ÀNÑSÔSÑ€Gˆ[ØÔ"¥3 yÔ'7×'<Ò'<Ñ'>Ô'>Ñ#?Ô#?Ô@€KØ"Ô'¨¨¨Ô,¨wÑ6¸+Ô:JÈ2Ô:NÐ9OÑO€KÔÝ�YÑÔÐð Ô"Ð#7Ô8€KØ4;Ø8Cð)Eð )E€KÔ˜6œ9Ñ%õ Ôð ÝÐÑÔÐÝ�IÑÔÐð "Ô(×.Ò.Ñ0Ô0ð #ñ #‰ˆˆuÝ  ¤Ñ,Ô,ð !	ñ !	‰GˆAˆtÝØÝ”Iñô ñ à#'¤;Ô#3°}Ò#DÑ#Dà”h�Øœ�õ  œX e¨SÑ1Ô1�
Ø"'¤*¨R¨a¨R¤.�
”à"œZ¨¨A©¨¨Ô/�”
å#& y§~¢~Ñ'7Ô'7Ñ#8Ô#8Ð ð ×!Ò!¥"¤'Ð*:¸CÑ"@Ô"@ÑAÔAÐAð (ŸošoÑ/Ô/ð Cð C‘F�Q˜Ý*8¸¸EÑ*BÔ*B�IÔ$ QÑ'Ð'Ý"% i§n¢nÑ&6Ô&6Ñ"7Ô"7�Ø.3�	Ô  Ñ+Ø*4�	Ô  Ñ'ð Ô  Ô1×8Ò8Ý”G˜I sÑ+Ô+ñ-ô -ð -à�ùáØåÔð ÝÐ3Ñ4Ô4Ð4Ø�ŠÑÔÐå$ YÔ%5Ñ6Ô6€IÔÝ�	Ô Ñ!Ô!Ð!åÔð "ÝÐ#Ñ$Ô$Ð$Ø�ŠÑÔÐÝˆg�uÑÔÐÝˆi˜Ñ!Ô!Ð!à”€IØð ÝÔ!ð 	>ÝÐ<Ñ=Ô=Ð=ØˆŒå˜iÔ.Ñ/Ô/Ð/ðð ð ð ð �xÔ4ñ ô ð õ Ô%ØØØØÝŒ
ØØØ+ð-ñ -ô -€Kð €E„Må�5œ:Ð;Ð(:Ð;Ð;Ð;€JÝÔð SÝÐEÀzÑRÔRÐRà˜ Z°ÐA[Ð[Ð[r3   c           	      ó   — g }|j         D �]}t          |t          j        ¦  «        �r…|j        j        | v �rv|j        }|j        j        }t          j        d|¦  «        }| 	                    d|¦  «        }	t          j        ||	j        <   t          j        ||	|¦  «        }
|                     |
¦  «         | 	                    d|¦  «        }||j        j                 ||j        <   |                     t          j        |j        ||¦  «        ¦  «         t          j        |j        |	||¦  «        }t          t          j        t          j                             ||j        j                 dd¦  «        t          j        ||j        j                 ¦  «        ||<   |                     |¦  «         �Œ£t          |t(          j        ¦  «        r0t-          | d|j        i||¦  «         t-          | |j        ||¦  «         |                     |¦  «         �Œ|S )Nr   z$const_ind_0z$valrM   rÄ  )r|   r)   r   r  r  rK   rC   rB   r  r©   r   r:  r›   r  r®  r   r¥   r“   r”   r^   r   r*   Úreplace_var_with_array_internalr{   r{  )Úvarsrq  rt   r¦   r¼  r0   rC   rB   Ú
const_nodeÚ	const_varÚconst_assignÚval_varÚsetitem_nodes                r2   Úreplace_var_with_array_in_blockrs    sÕ  € Ø€IØ”
ð ñ ˆÝ�d�BœIÑ&Ô&ñ 	V¨4¬;Ô+;¸tÐ+CÑ+CØ”(ˆCØ”KÔ%ˆEåœ ! SÑ)Ô)ˆJØŸš ~°sÑ;Ô;ˆIÝ&+¤kˆG�I”NÑ#Ýœ9 Z°¸CÑ@Ô@ˆLØ×Ò˜\Ñ*Ô*Ð*à—n’n V¨SÑ1Ô1ˆGØ$+¨D¬KÔ,<Ô$=ˆG�G”LÑ!Ø×Ò�RœY t¤z°7¸CÑ@Ô@ÑAÔAÐAÝœ: d¤k°9¸gÀsÑKÔKˆLÝ&/Ý”
�EœN×0Ò0°¸¼Ô9IÔ1JÈAÈsÑSÔSÕUZÔU_ÐahÐimÔitÔiyÔazñ'|ô '|ˆI�lÑ#à×Ò˜\Ñ*Ô*Ð*ÙÝ˜�fœmÑ,Ô,ð 	VÝ+¨D°1°d´oÐ2FÈÐQZÑ[Ô[Ð[Ý+¨D°$´.À'È9ÑUÔUÐUà×Ò˜ÑÔÐÑØÐr3   c                 óh   — |                      ¦   «         D ]\  }}t          | |||¦  «        |_        Œd S r(   )r÷   rs  r|   )rm  r{  rt   r¦   ru  rq  s         r2   rl  rl  :  sD   € Ø!ŸšÑ)Ô)ð Vð V‰ˆˆuÝ4°T¸5À'È9ÑUÔUˆŒ
ˆ
ðVð Vr3   c                 ó¸   — t          | |||¦  «         | D ]D}||         }|                     |d ¦  «         t          j                             |dd¦  «        ||<   ŒEd S )NrM   rÄ  )rl  Úpopr   r“   r”   )rm  r{  rt   r¦   rï   Úel_typs         r2   r  r  >  sk   € Ý# D¨)°W¸iÑHÔHÐHØð :ð :ˆØ˜”ˆØ�Š�A�tÑÔÐÝ”^×)Ò)¨&°!°SÑ9Ô9ˆ�‰
ˆ
ð:ð :r3   c                 ód'  ‡ ‡	‡‡]‡^‡_— ‰ j         Š^‰ j        Š]ddlm}m} t
          j        rvt          d¦  «         t          d|j        |j	        |j
        |j        ¦  «         t          d|¦  «         t          d|¦  «         t          d|¦  «         t          d|¦  «         t          j        |¦  «        \  }}|j                             |j        j        ¦  «        }|\  }} |¦   «           |||||d	d
¬¦  «        }|j        }|j                             ¦   «          t
          j        rt          d||¦  «         ˆ^ˆ fd„}t)          |¦  «        }t+          |¦  «        D ]›}||         \  }}} ||¦  «        } ||¦  «        }|dk    sJ ‚ ||¦  «        }|||f||<   t
          j        rPt          d                     |¦  «        |||¦  «         t/          j        ‰]d                     |¦  «        |||¦  «         Œœt2          j                             d¦  «        }t2          j                             |¦  «        }t2          j                             |¦  «        }‰^                     t<          j        ¦  «        } ‰^                     t<          j         ¦  «        }!t2          j                             | ¦  «        }"t2          j                             |!¦  «        }#‰^ !                    t<          j         d¦  «        }$‰^ !                    t<          j         d¦  «        }%|%j"        }&‰^ #                    | ¦  «        }'| $                    d¦  «         | $                    d¦  «        }(t
          j        rt          d|j%        ¦  «         |j%        r| })|"}*n|!})|#}*t/          j&        ‰]|)‰^ !                    t<          j         |¦  «        d¬¦  «        }+t/          j&        ‰]|)‰^ !                    t<          j         |¦  «        d¬¦  «        },t+          |¦  «        D �]}||         \  }}}|j"        |&k    r‰] '                    ||&¦  «        }|j"        |&k    r‰] '                    ||&¦  «        }|j"        |&k    r‰] '                    ||&¦  «        }‰] (                    ||%¦  «        }‰] )                    |‰] *                    |+‰^ !                    t<          j         |¦  «        g¦  «        ¦  «         ‰] )                    |‰] *                    |,‰^ !                    t<          j         |¦  «        g¦  «        ¦  «         �Œt/          j+        ‰]j,        t2          j         -                    |!g ¦  «        d¬¦  «        }-t/          j+        ‰]j,        t2          j         -                    t2          j         .                    ¦   «         |!g¦  «        d¬¦  «        }.t/          j+        ‰]j,        t2          j         -                    t2          j                             t<          j        j/        ¦  «        g ¦  «        d¦  «        }/‰] 0                    |/g ¦  «        }0‰] 0                    |-g ¦  «        }1t/          j1        ‰]‰] 2                    d|0|0 "                    d¦  «        ¦  «        ¦  «        5  t/          j        ‰]d|0¦  «         ‰^j3         4                    ‰]tj          d¦  «         ddd¦  «         n# 1 swxY w Y   t2          j         -                    |!|!|!|"|"g¦  «        }2t/          j+        ‰]j,        |2d¬¦  «        }3‰] 0                    |3|0‰^ !                    t<          j         |¦  «        |+|,g¦  «        }4‰] 0                    |.|$g¦  «         ‰^ !                    t<          j         |dz  ¦  «        }5‰] 6                    |4|5¦  «        }6‰] 7                    |)|6d ¬¦  «        }7t
          j        rdnd}8t2          j         -                    |"|!|"|"|!|*| g¦  «        }9|j%        rt/          j+        ‰]j,        |9d!¬¦  «        }:nt/          j+        ‰]j,        |9d"¬¦  «        }:‰] 0                    |:‰^ !                    t<          j         |¦  «        |+|,|4|7‰^ !                    t<          j        |8¦  «        g¦  «         ˆ ˆ	fd#„|D ¦   «         };t)          |¦  «        }<t)          |¦  «        |<z
  }=ˆ]ˆˆ fd$„Š_ˆ_fd%„|d|=…         D ¦   «         |;z   }>t)          |>¦  «        }?t)          |¦  «        dz   }@t/          j&        ‰]|‰^ !                    t<          j        d|?z   ¦  «        d&¬¦  «        }g }A‰] )                    ‰] 8                    |7|¦  «        |¦  «         |A 9                    ‰^ !                    t<          j        |'¦  «        ¦  «         i }Bt+          |?¦  «        D �]	}|>|         }C||         }D||         }E‰] *                    |‰^ !                    t<          j        |dz   ¦  «        g¦  «        }F||=k    r« ‰^ :                    |E¦  «        ‰^‰]|C¦  «        }Gt/          j;        ‰]|Gj<        |Ej=        ¦  «        }Ht+          t)          |H¦  «        ¦  «        D ]}I|A 9                    |H|I         ¦  «         Œ‰] )                    ‰] 8                    |Gj>        |¦  «        |F¦  «         �Œt          |Et<          j@        ¦  «        �r¡|D|v rò|EjA        t<          jB        k    r‰^ C                    |EjA        ¦  «        nt2          j                             d¦  «        }Jt/          j&        ‰]|J¦  «        }K‰] )                    |C|K¦  «         ‰] )                    ‰] 8                    |K|¦  «        |F¦  «         |C|Kf|B|D<   |A 9                    ‰^ !                    t<          j        ‰^ #                    |J¦  «        ¦  «        ¦  «         �Œ ‰^ :                    |E¦  «        ‰^‰]|C¦  «        }Gt/          j;        ‰]|Gj<        |Ej=        ¦  «        }Ht+          t)          |H¦  «        ¦  «        D ]}I|A 9                    |H|I         ¦  «         Œ‰] )                    ‰] 8                    |Gj>        |¦  «        |F¦  «         �ŒÀ||@k     r¶t          |Et<          jD        ¦  «        r |Ej"        }L‰^ E                    ‰]|C|E|L¦  «        }Cn|E}Lt          |Lt<          jF        ¦  «        s‰^ C                    |L¦  «        nt2          j                             d¦  «        }Jt/          j&        ‰]|J¦  «        }M‰] )                    |C|M¦  «         nct          |Et<          jF        ¦  «        s‰^ C                    |E¦  «        nt2          j                             d¦  «        }Jt/          j&        ‰]|J¦  «        }M‰] )                    ‰] 8                    |M|¦  «        |F¦  «         �Œi }Ng }O|(d         g}O‰^ !                    t<          j        d|z  ¦  «        |N|(d         <   t)          |¦  «        t)          |>¦  «        k    sJ ‚t)          |¦  «        t)          |¦  «        k    sJ ‚t)          |¦  «        t)          ||z   ¦  «        k    sJ ‚t)          |¦  «        t)          |j        dd…         ¦  «        k    sJ ‚t�          ||>|||z   ¦  «        D �]T\  }D}C}E}Pt          |Et<          jH        jI        ¦  «        r|Ej=        t)          |P¦  «        z
  }nd}t
          j        rt          d'|Dd(|Pd)|Ed*|¦  «         |PD ]î}Qt
          j        rt          d+|Dd,|E¦  «         |D|v r$‰^ !                    t<          j        d¦  «        |N|Q<   nK ‰^ :                    |E¦  «        ‰^‰]|C¦  «        }Gt/          j;        ‰]|GjJ        |Ej=        ¦  «        }R|R|         |N|Q<   |Q|OvrRt
          j        r1t          d-|Qd.|¦  «         t/          j        ‰]|Qd/z   |N|Q         ¦  «         |O 9                    |Q¦  «         |dz   }Œï�ŒVt)          |N¦  «        dz   }St/          j&        ‰]| |Sd0¬¦  «        }R‰] )                    |4|R¦  «         d}|OD ]�}Qt
          j        rt/          j        ‰]|Qd/z   |N|Q         ¦  «         ‰] )                    |N|Q         ‰] *                    |R‰^ !                    t<          j        |¦  «        g¦  «        ¦  «         |dz   }Œ‚|?dz   t)          |A¦  «        z   }Tt/          j&        ‰]| ‰^ !                    t<          j        |T¦  «        d1¬¦  «        }U‰] )                    ‰^ !                    t<          j        d|z  |'z  ¦  «        |U¦  «         t+          |?¦  «        D ]R}|$}V‰] *                    |U‰^ !                    t<          j        d|z   ¦  «        g¦  «        }F‰] )                    |V|F¦  «         ŒSt+          t)          |A¦  «        ¦  «        D ]Y}I‰] *                    |U‰^ !                    t<          j        d|?z   |Iz   ¦  «        g¦  «        }F‰] )                    |A|I         |F¦  «         ŒZt/          jK        |¦  «        }Wt2          j         -                    t2          j         .                    ¦   «         ||"|"|g¦  «        }Xt/          j+        ‰]j,        |X|¦  «        }Y‰^jL         M                    |j        ¦  «         t
          j        rt/          j        ‰]d2|Y¦  «         ‰] 0                    |Y||R|U|Wg¦  «         t
          j        rt/          j        ‰]d3|Y¦  «         ‰] 0                    |.|1g¦  «         |B N                    ¦   «         D ]{\  }Z}[|[\  }C}K‰] *                    |K‰^ !                    t<          j        d¦  «        g¦  «        }\‰] )                    ‰] O                    |\¦  «        ‰  P                    |Z¦  «        ¦  «         Œ|‰^jL         M                    |j        ¦  «         dS )4zF
    Adds the call to the gufunc function from the main function.
    r   )Úbuild_gufunc_wrapperÚ_launch_threadsÚmake_parallel_loopzouter_sig = rn   Ú	expr_argsÚexpr_arg_typesrí   FT)ÚcacheÚ
is_parforszparallel function = c                 ó¬   •— t          | t          j        ¦  «        r‰                     | j        ¦  «        S ‰                     t          j        | ¦  «        S r(   )r)   r   r~   r«   rK   Úget_constantr   r:  )rï   rp   r;   s    €€r2   Ú
load_rangez(call_parallel_gufunc.<locals>.load_rangek  sC   ø€ Ý�a�œÑ Ô ð 	8Ø—?’? 1¤6Ñ*Ô*Ð*à×'Ò'­¬°QÑ7Ô7Ð7r3   rM   z'call_parallel_gufunc loop_ranges[{}] = zloop range[{}]: %d %d (%d)
é   z%Parfor has potentially negative startÚ
dim_starts)ÚsizerK   Ú	dim_stopsÚget_parallel_chunksizerT   Úset_parallel_chunksizerÈ   z<=znum_threads: %d
)z@Invalid number of threads. This likely indicates a bug in Numba.NÚget_sched_sizeé   rc   Údo_scheduling_signedÚdo_scheduling_unsignedc                 óP   •— g | ]"}‰                      ‰|         j        ¦  «        ‘Œ#S rD   )r«   rK   )rk   rÍ  r;   Ú
redarrdicts     €€r2   rm   z(call_parallel_gufunc.<locals>.<listcomp>ð  s,   ø€ ÐDÐDÐD°qˆw�Š˜z¨!œ}Ô1Ñ2Ô2ÐDÐDÐDr3   c                 ó¦   •— | ‰v r8‰|          \  }}‰                      |¦  «        }‰                     ||¦  «        }|S ‰                      | ¦  «        S )a?  Given a variable name, if that variable is not a new name
           introduced as the extracted part of a tuple then just return
           the variable loaded from its name.  However, if the variable
           does represent part of a tuple, as recognized by the name of
           the variable being present in the exp_name_to_tuple_var dict,
           then we load the original tuple var instead that we get from
           the dict and then extract the corresponding element of the
           tuple, also stored and returned to use in the dict (i.e., offset).
        )r«   Úextract_value)rÍ  Úorig_tupÚoffsetrI  Úresrr   rê   r;   s        €€€r2   Úload_potential_tuple_varz6call_parallel_gufunc.<locals>.load_potential_tuple_varõ  s]   ø€ ð Ð%Ð%Ð%Ø4°QÔ7ÑˆH�fØ—o’o hÑ/Ô/ˆGØ×'Ò'¨°Ñ8Ô8ˆCØˆJà—?’? 1Ñ%Ô%Ð%r3   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS rD   rD   )rk   rÍ  r”  s     €r2   rm   z(call_parallel_gufunc.<locals>.<listcomp>	  s%   ø€ ÐIÐIÐI°Ð(Ð(¨Ñ+Ô+ÐIÐIÐIr3   Úpargszvar =zgu_sig =ztype =zi =zvar = z type = z
dim_sym = z, i = z = %d
ÚpshapeÚpstepszbefore calling kernel %p
zafter calling kernel %p
)Qrp   rr   ro   ry  rz  r   rv   rw   rG   Úreturn_typeÚrecvrÚpysigr	   Únormalize_signatureÚlibraryÚget_functionrs   Úllvm_func_namerK   Ú_ensure_finalizedrˆ   r�   r  r
   ÚprintfÚllvmliter   ÚIntTypeÚPointerTyper§   r   r^   r:  r�  rx   Úget_abi_sizeofrv  Úsignedr¨   ÚsextÚsubr¬   ÚgepÚget_or_insert_functionÚmoduleÚFunctionTypeÚVoidTypeÚbitwidthr�   Úif_unlikelyÚicmp_signedÚ	call_convÚreturn_user_excÚRuntimeErrorÚmulÚallocaÚbitcastr›   Ú
make_arrayÚunpack_tupleÚstridesr•   Údatar)   rÑ  rN   ÚbooleanÚget_data_typeÚOptionalÚcastÚBooleanr]  r“   r”   rP   Úget_null_valueÚactive_code_libraryÚadd_linking_libraryr÷   ÚloadÚgetvar)`r;   Úcresrí   Ú	outer_sigr|  r}  rî   r†   r‡   rŽ  r{   rå   r}   rê   ry  rz  rG   r™  Ú	llvm_funcÚsinÚsoutÚinfoÚwrapper_namer‚  Únum_dimrÉ   rg   rh   ri   Úbyte_tÚ
byte_ptr_tÚbyte_ptr_ptr_tÚintp_tÚuintp_tÚ
intp_ptr_tÚuintp_ptr_tÚzeroÚoneÚone_typeÚsizeof_intpÚ	sched_sigÚ
sched_typeÚsched_ptr_typer„  r†  Úget_chunksizeÚset_chunksizerÈ   Únum_threadsÚcurrent_chunksizeÚget_sched_size_fntyr‰  Únum_divisionsÚ
multiplierÚ
sched_sizerc   Ú
debug_flagÚscheduling_fntyÚdo_schedulingrÅ   rÄ   ÚninoutsÚall_argsÚnum_argsÚnum_inpsÚarray_stridesÚrv_to_arg_dictrl  r  ÚatyÚdstÚaryr¹  rÓ   rJ   Úrv_argÚunpacked_atyÚptrÚsig_dim_dictÚoccurrencesÚgu_sigÚdim_symÚshapesÚnshapesÚ	num_stepsÚstepsÚstepsizerº  Úfntyr  Úkrï   Úonly_elem_ptrrr   rp   r”  s`   `        `   `                                                                               @@@r2   r·   r·   E  s÷  øøøøøø€ ð Œo€GØŒo€Gð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,õ Ôð ,ÝÐ"Ñ#Ô#Ð#Ýˆn˜iœn¨iÔ.CØŒo˜yœñ	0ô 	0ð 	0åÐ Ñ,Ô,Ð,Ýˆk˜9Ñ%Ô%Ð%ÝÐ Ñ/Ô/Ð/Ýˆn˜lÑ+Ô+Ð+õ !Ô4°YÑ?Ô?Ñ€Dˆ+Ø”×)Ò)¨$¬+Ô*DÑEÔE€IØ�I€Cˆð €OÑÔÐàÐ 	¨4°°dØ&+¸ð>ñ >ô >€Dà”9€LØ„L×"Ò"Ñ$Ô$Ð$åÔð :ÝÐ$ l°DÑ9Ô9Ð9ð8ð 8ð 8ð 8ð 8ð 8õ �+ÑÔ€GÝ�7‰^Œ^ð .ð .ˆØ'¨œNÑˆˆt�TØ�
˜5Ñ!Ô!ˆØˆz˜$ÑÔˆØ�qŠyˆyˆyˆyØˆz˜$ÑÔˆØ  tÐ,ˆ�A‰åÔ!ð 	.ÝÐ;×BÒBÀ1ÑEÔEÀuØ˜ñô ð åŒN˜7Ð$B×$IÒ$IÈ!Ñ$LÔ$LØ  $¨ñ.ô .ð .øõ Œ[× Ò  Ñ#Ô#€FÝ”×(Ò(¨Ñ0Ô0€JÝ”[×,Ò,¨ZÑ8Ô8€NØ×#Ò#¥E¤JÑ/Ô/€FØ×$Ò$¥U¤[Ñ1Ô1€GÝ”×(Ò(¨Ñ0Ô0€JÝ”+×)Ò)¨'Ñ2Ô2€KØ×Ò¥¤¨QÑ/Ô/€DØ
×
Ò
�uœ{¨AÑ
.Ô
.€CØŒx€HØ×(Ò(¨Ñ0Ô0€Kð ‡M‚M�!ÑÔÐØ—’˜‘
”
€IåÔð MÝÐ5°}Ô7KÑLÔLÐLàÔð %Øˆ
Ø#ˆˆàˆ
Ø$ˆõ Ô$Ø� '×"6Ò"6ÝŒK˜ñ#"ô #"Ø(4ð6ñ 6ô 6€Jõ Ô#Ø� '×"6Ò"6ÝŒK˜ñ#"ô #"Ø(3ð5ñ 5ô 5€Iõ �7‰^Œ^ð Qñ QˆØ'¨œNÑˆˆt�TØŒ:˜Ò!Ð!Ø—L’L ¨Ñ1Ô1ˆEØŒ9˜Ò Ð Ø—<’<  hÑ/Ô/ˆDØŒ9˜Ò Ð Ø—<’<  hÑ/Ô/ˆDà�{Š{˜4 Ñ%Ô%ˆØ�ŠØ�7—;’;ØØ×(Ò(Ýœ Qñ(ô (ð)ñ*ô *ñ	+ô 	+ð 	+ð
 	�Š�d˜GŸKšK¨	Ø)0×)=Ò)=½e¼kÈ1Ñ)MÔ)MÐ(NñPô Pñ 	Qô 	Qð 	Qñ 	Qõ Ô2ØŒÝŒ× Ò  ¨"Ñ-Ô-Ø%ð'ñ 'ô '€Mõ
 Ô2ØŒÝŒ× Ò ¥¤×!5Ò!5Ñ!7Ô!7¸'¸ÑCÔCØ%ð'ñ 'ô '€Mõ
 Ô4ØŒÝŒ× Ò ¥¤×!4Ò!4µU´ZÔ5HÑ!IÔ!IÈ2ÑNÔNØñô €Oð
 —,’,˜°Ñ3Ô3€KØŸš ]°BÑ7Ô7Ðå	Ô	˜W g×&9Ò&9¸$ÀØ2=×2BÒ2BÀ1Ñ2EÔ2Eñ'Gô 'Gñ 
Hô 
Hð ^ð ^åŒ�wÐ 3°[ÑAÔAÐAØÔ×)Ò)¨'µ<ð3]ñ	^ô 	^ð 	^ð^ð ^ð ^ñ ^ô ^ð ^ð ^ð ^ð ^ð ^ð ^øøøð ^ð ^ð ^ð ^õ #œ+×2Ò2°7¸WÀgÈzÐ[eÐ<fÑgÔgÐÝÔ3ØŒØØðñ ô €Nð —L’L °+Ø29×2FÒ2FÅuÄ{ÐT[Ñ2\Ô2\Ø2<Ø2;ð2=ñ >ô >€Mð ‡L‚L�  Ñ'Ô'Ð'à×%Ò%¥e¤k°7¸Q±;Ñ?Ô?€JØ—’˜]¨JÑ7Ô7€JØ�NŠN˜:¨J¸WˆNÑEÔE€EåÔ,Ð3��°!€JÝ”k×.Ò.Ø�W˜j¨*°g¸~ÈvÐVñXô X€OàÔð VÝÔ6°w´~Ø7FØ<RðTñ Tô Tˆˆõ  Ô6°w´~Ø7FØ<TðVñ Vô Vˆð ‡L‚LØØ× Ò Ý”˜Wñ&ô &Ø'1°9¸mØ�7×'Ò'Ý”J 
ñ,ô ,ð-ñ.ô .ð .ð EÐDÐDÐDÐD¸GÐDÑDÔD€Gå�7‰|Œ|€HÝ�)‰nŒn˜xÑ'€Gð&ð &ð &ð &ð &ð &ð &ð( JÐIÐIÐI°Y¸xÀ¸xÔ5HÐIÑIÔIÈGÑS€HÝ�8‰}Œ}€HÝ�3‰xŒx˜!‰|€HÝÔØØØ×!Ò!ÝŒJØ�‰Lñô ð ðñ ô €Dð €Mà‡M‚M�'—/’/ %¨Ñ4Ô4°dÑ;Ô;Ð;Ø×Ò˜×-Ò-­e¬j¸+ÑFÔFÑGÔGÐGØ€Nå�8‰_Œ_ð 2Añ 2AˆØ�qŒkˆØ˜ŒlˆØ˜QÔˆØ�kŠk˜$ ×!5Ò!5µe´jÀ!ÀaÁ%Ñ!HÔ!HÐ IÑJÔJˆØ�Š<ˆ<Ø)�'×$Ò$ SÑ)Ô)¨'°7¸CÑ@Ô@ˆCÝÔ*¨7°C´KÀÄÑJÔJˆGå�3˜w™<œ<Ñ(Ô(ð 1ð 1�Ø×$Ò$ W¨Q¤ZÑ0Ô0Ð0Ð0Ø�MŠM˜'Ÿ/š/¨#¬(°JÑ?Ô?ÀÑEÔEÐEÑEÝ˜�UÔ2Ñ3Ô3ñ &	AØ�eˆ|ˆ|àœ)¥u¤}Ò4Ð4ð ×,Ò,¨S¬YÑ7Ô7Ð7å$œK×/Ò/°Ñ2Ô2ð õ !Ô,¨W°cÑ:Ô:�Ø—’˜c 6Ñ*Ô*Ð*Ø—’˜gŸošo¨f°jÑAÔAÀ3ÑGÔGÐGØ'*¨F m�˜sÑ#à×$Ò$ W×%9Ò%9½%¼*Àg×F\ÒF\Ð]`ÑFaÔFaÑ%bÔ%bÑcÔcÐcÑcà-�g×(Ò(¨Ñ-Ô-¨g°wÀÑDÔD�Ý!Ô.¨w¸¼ÀSÄXÑNÔN�Ý�s 7™|œ|Ñ,Ô,ð 5ð 5�AØ!×(Ò(¨°¬Ñ4Ô4Ð4Ð4Ø—’˜gŸošo¨c¬h¸
ÑCÔCÀSÑIÔIÐIÑIà�8Š|ˆ|å˜c¥5¤>Ñ2Ô2ð 'à#&¤8�LØ!Ÿ,š, w°°S¸,ÑGÔG�C�Cà#&�Lå(¨µu´}ÑEÔEð3�w×,Ò,¨\Ñ:Ô:Ð:å$œK×/Ò/°Ñ2Ô2ð õ Ô)¨'°3Ñ7Ô7�Ø—’˜c 3Ñ'Ô'Ð'Ð'õ )¨­e¬mÑ<Ô<ð3�w×,Ò,¨SÑ1Ô1Ð1å$œK×/Ò/°Ñ2Ô2ð õ Ô)¨'°3Ñ7Ô7�Ø�MŠM˜'Ÿ/š/¨#¨zÑ:Ô:¸CÑ@Ô@Ð@Ñ@ð €LØ€KØ˜Q”<�.€KØ!(×!5Ò!5µe´jÀ!ÀgÁ+Ñ!NÔ!N€L�˜1”ÑÝˆy‰>Œ>�S ™]œ]Ò*Ð*Ð*Ð*Ýˆy‰>Œ>�S Ñ0Ô0Ò0Ð0Ð0Ð0Ýˆy‰>Œ>�S  t¡™_œ_Ò,Ð,Ð,Ð,Ýˆy‰>Œ>�S ¤°°°Ô!3Ñ4Ô4Ò4Ð4Ð4Ð4Ý!$ Y°Ø%3°S¸4±Zñ"Aô "Að ñ ÑˆˆS�#�vå�c�5œ>Ô/Ñ0Ô0ð 	Ø”�3˜v™;œ;Ñ&ˆAˆAàˆAÝÔ!ð 	MÝ�'˜3 
¨F°H¸cÀ5È!ÑLÔLÐLàð 	ð 	ˆGÝÔ%ð 6Ý�h  Z°Ñ5Ô5Ð5Ø�eˆ|ˆ|Ø(/×(<Ò(<½U¼ZÈÑ(KÔ(K�˜WÑ%Ð%à-�g×(Ò(¨Ñ-Ô-¨g°wÀÑDÔD�Ý Ô-¨g°s´yÀ#Ä(ÑKÔK�Ø(.¨q¬	�˜WÑ%à˜{Ð*Ð*ÝÔ)ð XÝ˜,¨°¸1Ñ=Ô=Ð=Ý”N 7¨G°iÑ,?ÀÈgÔAVÑWÔWÐWØ×"Ò" 7Ñ+Ô+Ð+Ø�A‘ˆAˆAñ	õ( �,ÑÔ !Ñ#€GÝÔ  ¨&°wÀXÐNÑNÔN€Fà‡M‚M�- Ñ(Ô(Ð(à	€AØð ð ˆÝÔ!ð 	PÝŒN˜7 G¨iÑ$7¸ÀgÔ9NÑOÔOÐOØ�ŠØ˜Ô! 7§;¢;ØØ×(Ò(Ýœ
 Añ'ô 'ð(ñ$)ô $)ñ	*ô 	*ð 	*ð
 �‰Eˆˆð
 ˜1‘�s =Ñ1Ô1Ñ1€IÝÔØ�˜g×2Ò2ÝŒJ˜	ñ#ô #Ø)1ð3ñ 3ô 3€Eð ‡M‚M�'×&Ò&¥u¤z°1°w±;ÀÑ3LÑMÔMØñô ð õ �8‰_Œ_ð %ð %ˆàˆà�kŠk˜% '×"6Ò"6µu´zÀ1ÀqÁ5Ñ"IÔ"IÐ!JÑKÔKˆØ�Š�h Ñ$Ô$Ð$Ð$Ý•3�}Ñ%Ô%Ñ&Ô&ð -ð -ˆØ�kŠkØØ×$Ò$Ý”J  H¡¨qÑ 0ñ2ô 2ð3ñ4ô 4ˆð 	�Š�m AÔ&¨Ñ,Ô,Ð,Ð,õ Ô! *Ñ-Ô-€DåŒ;×#Ò#¥H¤K×$8Ò$8Ñ$:Ô$:Ø%3°ZØ%/°ð%=ñ>ô >€Dõ 
Ô	'¨¬¸¸lÑ	KÔ	K€BØÔ×3Ò3°D´LÑAÔAÐAåÔð BÝŒ�wÐ <¸bÑAÔAÐAØ‡L‚L��d˜F E¨4Ð0Ñ1Ô1Ð1ÝÔð AÝŒ�wÐ ;¸RÑ@Ô@Ð@à‡L‚L�Ð!2Ð 3Ñ4Ô4Ð4à×$Ò$Ñ&Ô&ð Fð F‰ˆˆ1Ø‰ˆˆVØŸš F¨W×-AÒ-AÅ%Ä*ÈaÑ-PÔ-PÐ,QÑRÔRˆØ�Š�g—l’l =Ñ1Ô1°7·>²>À!Ñ3DÔ3DÑEÔEÐEÐEàÔ×3Ò3°D´LÑAÔAÐAÐAÐAs   Ù=8[Û[Û[)Zru   r3  r   rŒ  r  Údataclassesr   Úllvmlite.irr¢  rb   rŠ   r€   Únumba.parforsr   Ú
numba.corer   r   r   r	   r
   Únumba.core.ir_utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Únumba.core.typingr   r   Únumba.parfors.parforr   Únumba.core.errorsr    r!   r"   r#   Ú#numba.parfors.parfor_lowering_utilsr$   ÚLowerr&   r+   r<   rð   r¸   rÿ   rù   rú   r  r  r	  r  r  rµ   rr  rv  r  r�  r‡  r˜  rš  rœ  rŸ  r«  r¯  r°  r¶  r¿  rÂ  r‘   rÉ  rÏ  rÒ  r³   rs  rl  r  r·   rD   r3   r2   ú<module>r     sÖ  ðØ €€€Ø €€€à Ð Ð Ð Ø €€€Ø €€€Ø &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ø Ð Ð Ð à €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð( (Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð FÐ EÐ EÐ EÐ EÐ Eð	%ð 	%ð 	%ð 	%ð 	%�(”.ñ 	%ô 	%ð 	%ð/ð /ð /ðR-ð R-ð R-ðj
  �Øðð ð ð ðñ ô €ð!@ð !@ð !@ðHEð Eð Eð Eð E }ñ Eô Eð Eð

ð 
ð 
ð<$
ð $
ð $
ðL	ð 	ð 	ðð ð ð 1ð 1ð 1ðhð ð ð!ð !ð !ðFCð Cð CðJ$ð $ð $ðð ð ðð ð ðAð Að Aðð ð ð <Eð <Eð <Eð|vð vð vð$ð ð ðð ð ð
ð ð ð>Lð Lð Lð@ð @ð @ð
ð 
ð 
ð2 ð 2 ð 2 ðh9ð 9ð 9ð
8ð 
8ð 
8ðYð Yð Yðð ð ð ð ð ð_\ð _\ð _\ðBð ð ð8Vð Vð Vð:ð :ð :ðoBð oBð oBð oBð oBr3   