§
    ƒÛgÕä ã                   óÊ  — 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	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mZ d dlZd dlmZ d dl Z dZ!d Z"e j#        gZ$i Z%g d¢Z&d	d
gZ'g d¢Z(g d¢Z)g d¢Z*e'e(z   e)z   e*z   ddgz   Z+ed„ ¦   «         Z,d„ Z-ed„ ¦   «         Z. G d„ de/¦  «        Z0 G d„ de0¦  «        Z1 G d„ de1¦  «        Z2 G d„ de/¦  «        Z3 G d„ de/¦  «        Z4 e5ej6        j7         8                    ¦   «         ¦  «        ej9        gz   Z:ej;        j7         8                    ¦   «         Z<ej=        j7         8                    ¦   «         Z>d„ ej?        D ¦   «         Z@dS )é    N)ÚtypesÚirÚconfigÚcgutilsÚerrors)Úmk_unique_varÚfind_topo_orderÚdprint_func_irÚget_global_func_typÚguardÚrequireÚget_definitionÚfind_callnameÚfind_build_sequenceÚ
find_constÚis_namedtuple_classÚbuild_definitionsÚfind_potential_aliasesÚget_canonical_aliasÚGuardException)Úcompute_cfg_from_blocks)ÚnpydeclÚ	signature)Ú	intrinsicéÿÿÿÿ)ÚemptyÚzerosÚonesÚfullÚrandÚrandn)ÚranfÚrandom_sampleÚsampleÚrandomÚstandard_normal)Ú	chisquareÚweibullÚpowerÚ	geometricÚexponentialÚpoissonÚrayleigh)ÚnormalÚuniformÚbetaÚbinomialÚfÚgammaÚ	lognormalÚlaplaceÚrandintÚ
triangularc                 ód  ‡‡— t          t          |t          j        j        ¦  «        ¦  «         t          t          |t          j        j        ¦  «        ¦  «         |j        rt          j        nt          j        Š|j        rt          j        nt          j        Šˆˆfd„}t          ‰||¦  «        |fS )a  
    Calculate index value "idx" relative to a size "size" value as
    (idx % size), where "size" is known to be positive.
    Note that we use the mod(%) operation here instead of
    (idx < 0 ? idx + size : idx) because we may have situations
    where idx > size due to the way indices are calculated
    during slice/range analysis.

    Both idx and size have to be Integer types.
    size should be from the array size vars that array_analysis
    adds and the bitwidth should match the platform maximum.
    c                 ó  •— |                       ‰¦  «        }|                       ‰¦  «        }‰j        r|                     |d         |¦  «        }n|                     |d         |¦  «        }‰j        r|                     |d         |¦  «        }n|                     |d         |¦  «        }|                     |¦  «        }t
          j                             |d¦  «        }	|                     d||	¦  «        }
|                     d||¦  «        }|                     d||¦  «        }| 	                    |||¦  «        }| 	                    ||	| 
                    ||¦  «        ¦  «        }| 	                    |
||¦  «        }|S )Nr   é   ú<z>=z<=)Úget_data_typeÚsignedÚsextÚzextÚnegÚllvmliter   ÚConstantÚicmp_signedÚselectÚadd)ÚcontextÚbuilderÚsigÚargsÚll_idx_unified_tyÚll_unified_tyÚidxÚsizeÚneg_sizeÚzeroÚidx_negativeÚpos_oversizeÚneg_oversizeÚpos_resÚneg_resÚmodÚidx_unifiedÚ
unified_tys                   €€úR/granary/edev/quantum/lib/python3.11/site-packages/numba/parfors/array_analysis.pyÚcodegenzwrap_index.<locals>.codegenf   sc  ø€ Ø#×1Ò1°+Ñ>Ô>ÐØ×-Ò-¨jÑ9Ô9ˆØÔð 	;Ø—,’,˜t AœwÐ(9Ñ:Ô:ˆCˆCà—,’,˜t AœwÐ(9Ñ:Ô:ˆCØÔð 	8Ø—<’<  Q¤¨Ñ7Ô7ˆDˆDà—<’<  Q¤¨Ñ7Ô7ˆDØ—;’;˜tÑ$Ô$ˆÝŒ{×#Ò# M°1Ñ5Ô5ˆð ×*Ò*¨3°°TÑ:Ô:ˆØ×*Ò*¨4°°dÑ;Ô;ˆØ×*Ò*¨4°°hÑ?Ô?ˆØ—.’. ¨t°SÑ9Ô9ˆØ—.’. ¨t°W·[²[ÀÀdÑ5KÔ5KÑLÔLˆØ�nŠn˜\¨7°GÑ<Ô<ˆØˆ
ó    )	r   Ú
isinstancer   ÚscalarsÚIntegerr=   ÚintpÚuintpr   )Ú	typingctxrL   rM   rY   rV   rW   s       @@rX   Ú
wrap_indexra   Q   s¡   øø€ õ �J�s�EœMÔ1Ñ2Ô2Ñ3Ô3Ð3Ý�J�t�Uœ]Ô2Ñ3Ô3Ñ4Ô4Ð4ð  $œ{Ð;•”�µ´€JØ #¤
Ð;•%”*�*µ´€Kðð ð ð ð ð õ0 �Z  dÑ+Ô+¨WÐ4Ð4rZ   c                 ó>   — | dk     r| | k    rdS | |z   S | |k    r|S | S ©Nr   © )rL   rM   s     rX   Úwrap_index_literalre   �   s8   € Ø
ˆQ‚w€wØ�4�%Š<ˆ<Ø�1à˜‘:Ðà�$Š;ˆ;ØˆKàˆJrZ   c                 ó†  — t          |¦  «        dk    rt          j        |¦  «        f}t          |d         ¦  «        dk    sJ ‚t          d„ |d         dd…         D ¦   «         ¦  «        sJ ‚t	          |d         d         t          j        ¦  «        st          j        d¦  «        ‚d„ }t          t          j	        g|¢R Ž |fS )zò
    A function that asserts the inputs are of equivalent size,
    and throws runtime error when they are not. The input is
    a vararg that contains an error message, followed by a set
    of objects of either array, tuple or integer.
    r:   r   c              3   óŽ   K  — | ]@}t          |t          j        t          j        t          j        t          j        f¦  «        V — ŒAd S ©N)r[   r   ÚArrayCompatibleÚ	BaseTupleÚ	SliceTyper]   )Ú.0Úas     rX   ú	<genexpr>zassert_equiv.<locals>.<genexpr>ž   s^   è è € ð ð ð õ 	�1ÝÔ!ÝŒOÝŒOÝŒMð	
ñ 	ô 	ðð ð ð ð ð rZ   Nz&first argument must be a StringLiteralc           	      ó´  ‡ ‡‡	‡
— t          |¦  «        dk    sJ ‚t          j        ‰|d         ¦  «        }|j        d         }|j        d         d         j        Š	ˆˆ fd„Š
ˆˆ ˆ	ˆ
fd„}t          dt          |¦  «        dz
  ¦  «        D ].} |||         ||         ||dz            ||dz            ¦  «         Œ/‰                      ‰t          j        d ¦  «        }|S )Nr:   r   c                 ó  •— t          |t          j        ¦  «        r: ‰                     |¦  «        ‰‰| ¦  «        }t	          j        ‰|j        ¦  «        S t          |t          j        ¦  «        rt	          j        ‰| ¦  «        S | gS rh   )r[   r   ri   Ú
make_arrayr   Úunpack_tupleÚshaperj   )rm   ÚatyÚaryrG   rF   s      €€rX   Úunpack_shapesz4assert_equiv.<locals>.codegen.<locals>.unpack_shapes°   s|   ø€ Ý˜#�uÔ4Ñ5Ô5ð Ø-�g×(Ò(¨Ñ-Ô-¨g°wÀÑBÔB�ÝÔ+¨G°S´YÑ?Ô?Ð?Ý˜C¥¤Ñ1Ô1ð ÝÔ+¨G°QÑ7Ô7Ð7à�s�
rZ   c                 óä  •—  ‰| |¦  «        } ‰||¦  «        }t          |¦  «        t          |¦  «        k    sJ ‚t          ||¦  «        D ]£\  }}‰                     d||¦  «        }‰                     |¦  «        5 \  }	}
|	5  	 d d d ¦  «         n# 1 swxY w Y   |
5  ‰j                             ‰t          ‰f¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   Œ¤d S )Nz==)ÚlenÚzipÚicmp_unsignedÚif_elseÚ	call_convÚreturn_user_excÚAssertionError)rm   rt   ÚbÚbtyÚashapesÚbshapesÚmÚnÚm_eq_nÚthenÚorelserG   rF   Úmsgrv   s              €€€€rX   Úpairwisez/assert_equiv.<locals>.codegen.<locals>.pairwise¹   sÆ  ø€ Ø#�m A sÑ+Ô+ˆGØ#�m A sÑ+Ô+ˆGÝ�w‘<”<¥3 w¡<¤<Ò/Ð/Ð/Ð/Ý˜g wÑ/Ô/ð ð ‘��AØ ×.Ò.¨t°Q¸Ñ:Ô:�Ø—_’_ VÑ,Ô,ð ±°°vØð ð Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àð ð ØÔ)×9Ò9Ø#¥^°c°Vñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øðð sZ   Á=C$ÂBÂC$ÂBÂC$ÂBÂC$Â#CÃC$ÃCÃC$ÃCÃC$Ã$C(	Ã+C(	)	rx   r   rr   rI   Úliteral_valueÚrangeÚget_constant_genericr   ÚNoneType)rF   rG   rH   rI   ÚtupÚtup_typer‰   ÚiÚrrˆ   rv   s   ``       @@rX   rY   zassert_equiv.<locals>.codegenª   s	  øøøø€ Ý�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~ÝÔ" 7¨D°¬GÑ4Ô4ˆØ”8˜A”;ˆØŒh�qŒk˜!ŒnÔ*ˆð	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ �q�#˜h™-œ-¨!Ñ+Ñ,Ô,ð 	Gð 	GˆAØˆH�S˜”V˜X aœ[¨#¨a°!©e¬*°h¸qÀ1¹u´oÑFÔFÐFÐFØ×(Ò(¨µ%´.À$ÑGÔGˆØˆrZ   )
rx   r   ÚStarArgTupleÚallr[   ÚStringLiteralr   ÚTypingErrorr   Únone)r`   ÚvalrY   s      rX   Úassert_equivr˜   Ž   sæ   € õ ˆ3�x„x�!‚|€|õ Ô! #Ñ&Ô&Ð(ˆåˆs�1Œv‰;Œ;˜Š?ˆ?ˆ?ˆ?åð ð ð �Q”˜˜˜”ðñ ô ñ ô ð ð ð õ �c˜!”f˜Q”i¥Ô!4Ñ5Ô5ð KÝÔ Ð!IÑJÔJÐJð ð  ð  õD •U”ZÐ& #Ð&Ð&Ð&¨Ð/Ð/rZ   c                   ób   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚEquivSetzPEquivSet keeps track of equivalence relations between
    a set of objects.
    Nr   c                 ó@   — |r|ni | _         |r|ni | _        || _        dS )zdCreate a new EquivSet object. Optional keyword arguments are for
        internal use only.
        N)Ú
obj_to_indÚ
ind_to_objÚnext_ind)Úselfrœ   r�   rž   s       rX   Ú__init__zEquivSet.__init__Õ   s1   € ð )3Ð:˜*˜*¸ˆŒà(2Ð:˜*˜*¸ˆŒð !ˆŒˆˆrZ   c                 ó   — t          ¦   «         S )z)Return an empty EquivSet object.
        )rš   ©rŸ   s    rX   r   zEquivSet.emptyã   s   € õ ‰zŒzÐrZ   c                 óŒ   — t          t          j        | j        ¦  «        t          j        | j        ¦  «        | j        ¬¦  «        S )úReturn a new copy.
        )rœ   r�   Únext_id)rš   ÚcopyÚdeepcopyrœ   r�   rž   r¢   s    rX   ÚclonezEquivSet.cloneè   s>   € õ Ý”} T¤_Ñ5Ô5Ý”} T¤_Ñ5Ô5Ø”Mð
ñ 
ô 
ð 	
rZ   c                 ó6   — d                      | j        ¦  «        S )NzEquivSet({}))Úformatr�   r¢   s    rX   Ú__repr__zEquivSet.__repr__ñ   s   € Ø×$Ò$ T¤_Ñ5Ô5Ð5rZ   c                 ó   — | j         i k    S )z=Return true if the set is empty, or false otherwise.
        )rœ   r¢   s    rX   Úis_emptyzEquivSet.is_emptyô   s   € ð Œ "Ò$Ð$rZ   c                 ó8   — | j                              |d¦  «        S )zkReturn the internal index (greater or equal to 0) of the given
        object, or -1 if not found.
        r   )rœ   Úget)rŸ   Úxs     rX   Ú_get_indzEquivSet._get_indù   s   € ð Œ×"Ò" 1 bÑ)Ô)Ð)rZ   c                 ób   — || j         v r| j         |         }n| j        }| xj        dz  c_        |S )zyReturn the internal index (greater or equal to 0) of the given
        object, or create a new one if not found.
        r:   )rœ   rž   )rŸ   r°   r�   s      rX   Ú_get_or_add_indzEquivSet._get_or_add_indÿ   s;   € ð �”ÐÐØ” Ô"ˆAˆAà”ˆAØˆMŒM˜QÑˆMŒMØˆrZ   c                 ó†  ‡ — t          |¦  «        dk    sJ ‚t          ˆ fd„|D ¦   «         ¦  «        }t          |¦  «        }t          j        dk    rt          d||¦  «         |‰ j        vr
g ‰ j        |<   t          ||¦  «        D ]»\  }}||k    r:|‰ j        |         vr*‰ j        |                              |¦  «         |‰ j	        |<   ŒE|‰ j        v rC‰ j        |         D ],}|‰ j	        |<   ‰ j        |                              |¦  «         Œ-‰ j        |= Œ‘|‰ j	        |<   ‰ j        |                              |¦  «         Œ¼dS )zXBase method that inserts a set of equivalent objects by modifying
        self.
        r:   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rh   )r³   ©rl   r°   rŸ   s     €rX   rn   z#EquivSet._insert.<locals>.<genexpr>  s1   øè è € Ð;Ð;°�T×)Ò)¨!Ñ,Ô,Ð;Ð;Ð;Ð;Ð;Ð;rZ   é   z_insert:N)
rx   ÚtupleÚminr   ÚDEBUG_ARRAY_OPTÚprintr�   ry   Úappendrœ   )rŸ   ÚobjsÚindsÚindr�   Úobjr°   s   `      rX   Ú_insertzEquivSet._insert
  sl  ø€ õ �4‰yŒy˜1Š}ˆ}ˆ}ˆ}åÐ;Ð;Ð;Ð;°dÐ;Ñ;Ô;Ñ;Ô;ˆÝ�$‰iŒiˆåÔ! QÒ&Ð&Ý�*˜d DÑ)Ô)Ð)à�t”Ð&Ð&Ø#%ˆDŒO˜CÑ å˜$ ‘o”oð 	5ð 	5‰FˆAˆsØ�CŠxˆxØ˜tœ¨sÔ3Ð3Ð3Ø”O CÔ(×/Ò/°Ñ4Ô4Ð4Ø+.�D”O CÑ(øà˜œÐ'Ð'à!œ_¨QÔ/ð 7ð 7˜Ø-0˜œ¨Ñ*Øœ¨Ô,×3Ò3°AÑ6Ô6Ð6Ð6Øœ¨Ð*Ð*ð ,/�D”O CÑ(Ø”O CÔ(×/Ò/°Ñ4Ô4Ð4Ð4ð	5ð 	5rZ   c                 óº   ‡ ‡‡— ˆ fd„‰D ¦   «         }t          |¦  «        Š‰dk    rt          ˆfd„|D ¦   «         ¦  «        S t          ˆfd„‰D ¦   «         ¦  «        S )zfTry to derive if given objects are equivalent, return true
        if so, or false otherwise.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   ©r±   r¶   s     €rX   ú
<listcomp>z%EquivSet.is_equiv.<locals>.<listcomp>.  s%   ø€ Ð/Ð/Ð/ Q�—’˜aÑ Ô Ð/Ð/Ð/rZ   r   c              3   ó$   •K  — | ]
}|‰k    V — Œd S rh   rd   )rl   r�   r¿   s     €rX   rn   z$EquivSet.is_equiv.<locals>.<genexpr>1  s'   øè è € Ð.Ð. A�q˜C’xÐ.Ð.Ð.Ð.Ð.Ð.rZ   c                 ó(   •— g | ]}|‰d          k    ‘ŒS )r   rd   )rl   r°   r½   s     €rX   rÅ   z%EquivSet.is_equiv.<locals>.<listcomp>3  s!   ø€ Ð3Ð3Ð3¨˜˜T !œWšÐ3Ð3Ð3rZ   )Úmaxr“   )rŸ   r½   r¾   r¿   s   `` @rX   Úis_equivzEquivSet.is_equiv*  sz   øøø€ ð 0Ð/Ð/Ð/¨$Ð/Ñ/Ô/ˆÝ�$‰iŒiˆØ�"Š9ˆ9ÝÐ.Ð.Ð.Ð.¨Ð.Ñ.Ô.Ñ.Ô.Ð.åÐ3Ð3Ð3Ð3¨dÐ3Ñ3Ô3Ñ4Ô4Ð4rZ   c                 ó’   — |                       |¦  «        }|dk    r+| j        |         }|D ]}t          |t          ¦  «        r|c S ŒdS )zvCheck if obj is equivalent to some int constant, and return
        the constant if found, or None otherwise.
        r   N)r±   r�   r[   Úint)rŸ   rÀ   r¿   r½   r°   s        rX   Úget_equiv_constzEquivSet.get_equiv_const5  s^   € ð �mŠm˜CÑ Ô ˆØ�!Š8ˆ8Ø”? 3Ô'ˆDØð ð �Ý˜a¥Ñ%Ô%ð Ø�H�H�HðàˆtrZ   c                 óˆ   — |                       |¦  «        }|dk    rt          | j        |         ¦  «        S t          ¦   «         S )ú.Return the set of equivalent objects.
        r   )r±   Úsetr�   )rŸ   rÀ   r¿   s      rX   Úget_equiv_setzEquivSet.get_equiv_setA  s<   € ð �mŠm˜CÑ Ô ˆØ�!Š8ˆ8Ý�t” sÔ+Ñ,Ô,Ð,Ý‰uŒuˆrZ   c                 ó,   — |                       |¦  «        S )z�Insert a set of equivalent objects by modifying self. This
        method can be overloaded to transform object type before insertion.
        )rÁ   )rŸ   r½   s     rX   Úinsert_equivzEquivSet.insert_equivI  s   € ð �|Š|˜DÑ!Ô!Ð!rZ   c                 ó¼  ‡ — ‰                       ¦   «         }‰ j        |_        |j                             ¦   «         D ] }t	          ˆ fd„|D ¦   «         ¦  «        }i }t          ||¦  «        D ]1\  }}||v r||                              |¦  «         Œ%|dk    r|g||<   Œ2|                     ¦   «         D ]*}t          |¦  «        dk    r|                     |¦  «         Œ+Œ¡|S )z± Return the intersection of self and the given equiv_set,
        without modifying either of them. The result will also keep
        old equivalence indices unchanged.
        c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rh   rÄ   r¶   s     €rX   rn   z%EquivSet.intersect.<locals>.<genexpr>X  s/   øè è € Ð8Ð8¨a˜Ÿš qÑ)Ô)Ð8Ð8Ð8Ð8Ð8Ð8rZ   r   r:   )	r   rž   r�   Úvaluesr¸   ry   r¼   rx   rÁ   )	rŸ   Ú	equiv_setÚnew_setr½   r¾   r�   r�   r°   Úvs	   `        rX   Ú	intersectzEquivSet.intersectO  sþ   ø€ ð
 —*’*‘,”,ˆØœ=ˆÔàÔ(×/Ò/Ñ1Ô1ð 	'ð 	'ˆDÝÐ8Ð8Ð8Ð8°4Ð8Ñ8Ô8Ñ8Ô8ˆDØˆJå˜D $™œð (ð (‘��1Ø˜
�?�?Ø˜q”M×(Ò(¨Ñ+Ô+Ð+Ð+Ø˜!’V�VØ%& C�J˜q‘Møà×&Ò&Ñ(Ô(ð 'ð '�Ý�q‘6”6˜A’:�:Ø—O’O AÑ&Ô&Ð&øð'ð ˆrZ   )NNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r   r¨   r«   r­   r±   r³   rÁ   rÉ   rÌ   rÐ   rÒ   rÙ   rd   rZ   rX   rš   rš   Ï   sç   € € € € € ðð ð!ð !ð !ð !ðð ð ð

ð 
ð 
ð6ð 6ð 6ð%ð %ð %ð
*ð *ð *ð	ð 	ð 	ð5ð 5ð 5ð@	5ð 	5ð 	5ð
ð 
ð 
ðð ð ð"ð "ð "ðð ð ð ð rZ   rš   c                   ó®   ‡ — e Zd ZdZ	 	 	 	 	 	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Zˆ fd	„Z	ˆ fd
„Z
d„ Zˆ fd„Zˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚShapeEquivSetad  Just like EquivSet, except that it accepts only numba IR variables
    and constants as objects, guided by their types. Arrays are considered
    equivalent as long as their shapes are equivalent. Scalars are
    equivalent only when they are equal in value. Tuples are equivalent
    when they are of the same size, and their elements are equivalent.
    Nr   c                 ó¬   •— || _         |r|ni | _        |r|ni | _        |r|ni | _        t	          t
          | ¦  «                             |||¦  «         dS )zÕCreate a new ShapeEquivSet object, where typemap is a dictionary
        that maps variable names to their types, and it will not be modified.
        Optional keyword arguments are for internal use only.
        N)ÚtypemapÚdefsÚ
ind_to_varÚind_to_constÚsuperrß   r    )	rŸ   rá   râ   rã   rœ   r�   r¥   rä   Ú	__class__s	           €rX   r    zShapeEquivSet.__init__q  si   ø€ ð ˆŒð !Ð(�D�D bˆŒ	ð )3Ð:˜*˜*¸ˆŒà,8Ð@˜L˜L¸bˆÔå�m˜TÑ"Ô"×+Ò+¨J¸
ÀGÑLÔLÐLÐLÐLrZ   c                 ó,   — t          | j        i ¦  «        S )z'Return an empty ShapeEquivSet.
        )rß   rá   r¢   s    rX   r   zShapeEquivSet.empty�  s   € õ ˜Tœ\¨2Ñ.Ô.Ð.rZ   c                 ó(  — t          | j        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        | j        t          j        | j	        ¦  «        ¬¦  «        S )r¤   )râ   rã   rœ   r�   r¥   rä   )
rß   rá   r¦   râ   rã   r§   rœ   r�   rž   Úind_toconstr¢   s    rX   r¨   zShapeEquivSet.clone’  sq   € õ ØŒLÝ”˜4œ9Ñ%Ô%Ý”y ¤Ñ1Ô1Ý”} T¤_Ñ5Ô5Ý”} T¤_Ñ5Ô5Ø”MÝœ tÔ'7Ñ8Ô8ð
ñ 
ô 
ð 	
rZ   c                 óN   — d                      | j        | j        | j        ¦  «        S )Nz1ShapeEquivSet({}, ind_to_var={}, ind_to_const={}))rª   r�   rã   rä   r¢   s    rX   r«   zShapeEquivSet.__repr__Ÿ  s(   € ØB×IÒIØŒO˜Tœ_¨dÔ.?ñ
ô 
ð 	
rZ   c                 ól  ‡ ‡‡— t          |t          j        ¦  «        st          |t          ¦  «        rÁt          |t          ¦  «        r|n|j        Š‰‰ j        vr‰fS ‰ j        ‰         }t          |t          j        t          j        f¦  «        rat          |t          j        ¦  «        r|j	        nt          |¦  «        }|dk    r‰fS t          ˆfd„t          |¦  «        D ¦   «         ¦  «        S ‰fS t          |t          j        ¦  «        r)t          |j        t          ¦  «        r|j        S |j        fS t          |t          ¦  «        r ˆ fd„Št          ˆfd„|D ¦   «         ¦  «        S t          |t          ¦  «        r|fS t           j        dk    r t%          dt'          |¦  «        › d�¦  «         dS )	zÞReturn a set of names for the given obj, where array and tuples
        are broken down to their individual shapes or elements. This is
        safe because both Numba array shapes and Python tuples are immutable.
        r   c              3   óD   •K  — | ]}d                       ‰|¦  «        V — ŒdS )z{}#{}N)rª   )rl   r�   Únames     €rX   rn   z+ShapeEquivSet._get_names.<locals>.<genexpr>·  s1   øè è € Ð NÐ N¸Q §¢°°aÑ!8Ô!8Ð NÐ NÐ NÐ NÐ NÐ NrZ   c                 óh   •— ‰                      | ¦  «        }t          |¦  «        dk    r|d         S |S rc   )Ú
_get_namesrx   )r°   ÚnamesrŸ   s     €rX   Ú	get_namesz+ShapeEquivSet._get_names.<locals>.get_namesÁ  s1   ø€ ØŸš¨Ñ*Ô*�Ý�u‘:”: ’?�?Ø  œ8�OØ�rZ   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S rh   rd   )rl   r°   rñ   s     €rX   rn   z+ShapeEquivSet._get_names.<locals>.<genexpr>Ç  s+   øè è € Ð3Ð3¨!˜˜ 1™œÐ3Ð3Ð3Ð3Ð3Ð3rZ   r:   zIgnoring untracked object type z in ShapeEquivSetrd   )r[   r   ÚVarÚstrrí   rá   r   rj   ri   Úndimrx   r¸   r‹   ÚConstÚvaluerË   r   rº   r»   Útype)rŸ   rÀ   Útyprõ   rñ   rí   s   `   @@rX   rï   zShapeEquivSet._get_names¤  sÌ  øøø€ õ
 �c�2œ6Ñ"Ô"ð  	¥j°µcÑ&:Ô&:ð  	Ý$ S­#Ñ.Ô.Ð<�3�3°C´HˆDØ˜4œ<Ð'Ð'Ø�w�à”,˜tÔ$ˆCÝ˜#¥¤µÔ1FÐGÑHÔHð 
å% c­5Ô+@ÑAÔAð&˜œ˜å  ™XœXð ð ˜1’9�9Ø ˜7�Nå Ð NÐ NÐ NÐ NÅ%ÈÁ+Ä+Ð NÑ NÔ NÑNÔNÐNà�w�Ý˜�RœXÑ&Ô&ð 	Ý˜#œ)¥UÑ+Ô+ð $Ø”yÐ àœ	�|Ð#Ý˜�UÑ#Ô#ð 
	ðð ð ð ð õ Ð3Ð3Ð3Ð3¨sÐ3Ñ3Ô3Ñ3Ô3Ð3Ý˜�SÑ!Ô!ð 	Ø�6ˆMÝÔ! QÒ&Ð&ÝØNµ$°s±)´)ÐNÐNÐNñPô Pð PàˆrrZ   c                 óÜ  •‡ ‡‡— t          |¦  «        dk    sJ ‚ˆ fd„|D ¦   «         }d„ |D ¦   «         }t          |¦  «        dk    rdS d„ |D ¦   «         }|d         Št          ˆfd„|D ¦   «         ¦  «        s4t          j        dk    r"t	          d                     |¦  «        ¦  «         dS t          ‰¦  «        D ]0Šˆfd	„|D ¦   «         } t          t          ‰ ¦  «        j	        |Ž s dS Œ1d
S )zWOverload EquivSet.is_equiv to handle Numba IR variables and
        constants.
        r:   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   ©rï   r¶   s     €rX   rÅ   z*ShapeEquivSet.is_equiv.<locals>.<listcomp>Ô  ó%   ø€ Ð6Ð6Ð6¨A�T—_’_ QÑ'Ô'Ð6Ð6Ð6rZ   c                 ó   — g | ]
}|d k    ¯|‘ŒS ©rd   rd   ©rl   r°   s     rX   rÅ   z*ShapeEquivSet.is_equiv.<locals>.<listcomp>Õ  ó   € Ð5Ð5Ð5˜1¨Q°"ªW¨W�Q¨W¨W¨WrZ   Fc                 ó,   — g | ]}t          |¦  «        ‘ŒS rd   ©rx   )rl   rð   s     rX   rÅ   z*ShapeEquivSet.is_equiv.<locals>.<listcomp>Ø  s   € Ð3Ð3Ð3 •�U‘”Ð3Ð3Ð3rZ   r   c              3   ó$   •K  — | ]
}‰|k    V — Œd S rh   rd   ©rl   r°   rõ   s     €rX   rn   z)ShapeEquivSet.is_equiv.<locals>.<genexpr>Ú  s'   øè è € Ð,Ð, �4˜1’9Ð,Ð,Ð,Ð,Ð,Ð,rZ   z#is_equiv: Dimension mismatch for {}c                 ó    •— g | ]
}|‰         ‘ŒS rd   rd   ©rl   Úobj_namer�   s     €rX   rÅ   z*ShapeEquivSet.is_equiv.<locals>.<listcomp>ß  ó   ø€ Ð;Ð;Ð; X�X˜a”[Ð;Ð;Ð;rZ   T)
rx   r“   r   rº   r»   rª   r‹   rå   rß   rÉ   )rŸ   r½   Ú	obj_namesÚndimsrð   r�   rõ   ræ   s   `    @@€rX   rÉ   zShapeEquivSet.is_equivÏ  s)  øøøø€ õ �4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø6Ð6Ð6Ð6°Ð6Ñ6Ô6ˆ	Ø5Ð5 	Ð5Ñ5Ô5ˆ	Ýˆy‰>Œ>˜QÒÐØ�5Ø3Ð3¨Ð3Ñ3Ô3ˆØ�QŒxˆÝÐ,Ð,Ð,Ð, eÐ,Ñ,Ô,Ñ,Ô,ð 	ÝÔ%¨Ò*Ð*ÝÐ;×BÒBÀ4ÑHÔHÑIÔIÐIØ�5Ý�t‘”ð 	ð 	ˆAØ;Ð;Ð;Ð;°Ð;Ñ;Ô;ˆEØ6•5�¨Ñ-Ô-Ô6¸Ð>ð Ø�u�uðàˆtrZ   c                 ó´   •— |                       |¦  «        }t          |¦  «        dk    rdS t          t          | ¦  «                             |d         ¦  «        S )ztIf the given object is equivalent to a constant scalar,
        return the scalar value, or None otherwise.
        r:   Nr   )rï   rx   rå   rß   rÌ   ©rŸ   rÀ   rð   ræ   s      €rX   rÌ   zShapeEquivSet.get_equiv_constä  sL   ø€ ð —’ Ñ$Ô$ˆÝˆu‰:Œ:˜Š?ˆ?Ø�4Ý•] DÑ)Ô)×9Ò9¸%À¼(ÑCÔCÐCrZ   c                 óâ   — |                       |¦  «        }t          |¦  «        dk    rdS |                      |d         ¦  «        }| j                             |g ¦  «        }|g k    r|d         ndS )ztIf the given object is equivalent to some defined variable,
        return the variable, or None otherwise.
        r:   Nr   )rï   rx   r±   rã   r¯   )rŸ   rÀ   rð   r¿   Úvss        rX   Úget_equiv_varzShapeEquivSet.get_equiv_varí  sk   € ð —’ Ñ$Ô$ˆÝˆu‰:Œ:˜Š?ˆ?Ø�4Ø�mŠm˜E !œHÑ%Ô%ˆØŒ_× Ò   bÑ)Ô)ˆØ˜bš˜ˆr�!Œuˆu dÐ*rZ   c                 ó´   •— |                       |¦  «        }t          |¦  «        dk    rdS t          t          | ¦  «                             |d         ¦  «        S )rÎ   r:   Nr   )rï   rx   rå   rß   rÐ   r  s      €rX   rÐ   zShapeEquivSet.get_equiv_setø  sL   ø€ ð —’ Ñ$Ô$ˆÝˆu‰:Œ:˜Š?ˆ?Ø�4Ý•] DÑ)Ô)×7Ò7¸¸a¼ÑAÔAÐArZ   c                 ór  •— g }|D ]+}|| j         v r |                     | j         |         ¦  «         Œ,g }d}t          ¦   «         }t          |¦  «        D ]m}|| j        v rH| j        |         D ]:}|j        |vr/|                     |¦  «         |                     |j        ¦  «         Œ;|| j        v r|�J ‚| j        |         }Œnt          t          | ¦  «         
                    |¦  «         | j         |d                  }	t          |¦  «        D ]}|| j        v r| j        |= Œ|| j        |	<   |�|| j        |	<   dS dS )zCOverload EquivSet._insert to manage ind_to_var dictionary.
        Nr   )rœ   r¼   rÏ   Úsortedrã   rí   rE   rä   rå   rß   rÁ   )rŸ   r½   r¾   rÀ   ÚvarlistÚconstvalrð   r�   r°   Únew_indræ   s             €rX   rÁ   zShapeEquivSet._insert   sm  ø€ ð ˆØð 	2ð 	2ˆCØ�d”oÐ%Ð%Ø—’˜DœO¨CÔ0Ñ1Ô1Ð1øØˆØˆÝ‘”ˆÝ˜‘”ð 	0ð 	0ˆAØ�D”OÐ#Ð#Øœ¨Ô+ð *ð *�AØœF e˜O˜OØŸš qÑ)Ô)Ð)ØŸ	š	 !¤&Ñ)Ô)Ð)øØ�DÔ%Ð%Ð%ØÐ'Ð'Ð'ØÔ,¨QÔ/�øÝ�m˜TÑ"Ô"×*Ò*¨4Ñ0Ô0Ð0Ø”/ $ q¤'Ô*ˆÝ�T‘”ð 	'ð 	'ˆAØ�D”OÐ#Ð#Ø”O AÐ&øØ#*ˆŒ˜Ñ ØÐØ)1ˆDÔ˜gÑ&Ð&Ð&ð  ÐrZ   c                 ó¸  •‡ ‡‡— t          |¦  «        dk    sJ ‚ˆ fd„|D ¦   «         }d„ |D ¦   «         }t          |¦  «        dk    rdS t          d„ |D ¦   «         g ¦  «        }d„ |D ¦   «         }|d         Št          ˆfd„|D ¦   «         ¦  «        sJ d	                     |¦  «        ¦   «         ‚g }g }|D ]¹}t	          |t
          ¦  «        s|f}|D ]œ}t	          |t          j        ¦  «        rC|j        |vr:|j        ‰ j	        v r| 
                    d|¦  «         n|                     |¦  «         t	          |t          j        ¦  «        r#|j        |vr|                     |j        ¦  «         Œ�Œº|D ]U}|j        }	|	|v rH|	‰ j        vr?|	g‰ j        ‰ j        <   ‰ j        ‰ j        |	<   |g‰ j        ‰ j        <   ‰ xj        dz  c_        ŒV|D ]M}
|
|v rG|
‰ j        vr>|
g‰ j        ‰ j        <   ‰ j        ‰ j        |
<   |
‰ j        ‰ j        <   ‰ xj        dz  c_        ŒNd
}t'          ‰¦  «        D ]1Šˆfd„|D ¦   «         } t)          t*          ‰ ¦  «        j        |Ž }|p|}Œ2|S )zºOverload EquivSet.insert_equiv to handle Numba IR variables and
        constants. Input objs are either variable or constant, and at least
        one of them must be variable.
        r:   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   rü   r¶   s     €rX   rÅ   z.ShapeEquivSet.insert_equiv.<locals>.<listcomp>"  rý   rZ   c                 ó   — g | ]
}|d k    ¯|‘ŒS rÿ   rd   r   s     rX   rÅ   z.ShapeEquivSet.insert_equiv.<locals>.<listcomp>#  r  rZ   Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS rd   )Úlistr   s     rX   rÅ   z.ShapeEquivSet.insert_equiv.<locals>.<listcomp>&  s   € Ð0Ð0Ð0 •T˜!‘W”WÐ0Ð0Ð0rZ   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rd   r  r   s     rX   rÅ   z.ShapeEquivSet.insert_equiv.<locals>.<listcomp>'  s   € Ð+Ð+Ð+˜A•�Q‘”Ð+Ð+Ð+rZ   r   c              3   ó$   •K  — | ]
}‰|k    V — Œd S rh   rd   r  s     €rX   rn   z-ShapeEquivSet.insert_equiv.<locals>.<genexpr>)  s8   øè è € ð 
ð 
ØˆD�AŠIð
ð 
ð 
ð 
ð 
ð 
rZ   zDimension mismatch for {}Fc                 ó    •— g | ]
}|‰         ‘ŒS rd   rd   r  s     €rX   rÅ   z.ShapeEquivSet.insert_equiv.<locals>.<listcomp>O  r	  rZ   )rx   Úsumr“   rª   r[   r¸   r   ró   rí   râ   Úinsertr¼   rö   r÷   rœ   r�   rž   rã   rä   r‹   rå   rß   rÒ   )rŸ   r½   r
  rð   r  r  Ú	constlistrÀ   Úvarrí   ÚconstÚsome_changeÚie_resr�   rõ   ræ   s   `            @@€rX   rÒ   zShapeEquivSet.insert_equiv  sù  øøøø€ õ
 �4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø6Ð6Ð6Ð6°Ð6Ñ6Ô6ˆ	Ø5Ð5 	Ð5Ñ5Ô5ˆ	Ýˆy‰>Œ>˜QÒÐØˆFÝÐ0Ð0 iÐ0Ñ0Ô0°"Ñ5Ô5ˆØ+Ð+ Ð+Ñ+Ô+ˆØ�QŒxˆÝð 
ð 
ð 
ð 
Ø$ð
ñ 
ô 
ñ 
ô 
ð 	4ð 	4à&×-Ò-¨dÑ3Ô3ñ	4ô 	4ð 	4ð ˆØˆ	Øð 	0ð 	0ˆCÝ˜c¥5Ñ)Ô)ð Ø�f�Øð 0ð 0�Ý˜c¥2¤6Ñ*Ô*ð ,°C´HÀÐ4GÐ4Gà”x 4¤9Ð,Ð,ØŸš q¨#Ñ.Ô.Ð.Ð.àŸš sÑ+Ô+Ð+Ý˜c¥2¤8Ñ,Ô,ð 0°c´iÀ9Ð6LÐ6LØ×$Ò$ S¤YÑ/Ô/Ð/øð0ð ð 	#ð 	#ˆCØ”8ˆDØ�uˆ}ˆ} d¨d¬oÐ&=Ð&=Ø26°�” ¤Ñ.Ø(,¬�” Ñ%Ø25°�” ¤Ñ.Ø�” Ñ"�”øð ð 	#ð 	#ˆEØ˜ˆ~ˆ~ u°´Ð'?Ð'?Ø27°�” ¤Ñ.Ø)-¬�” Ñ&Ø38�Ô! $¤-Ñ0Ø�” Ñ"�”øàˆå�t‘”ð 	0ð 	0ˆAØ;Ð;Ð;Ð;°Ð;Ñ;Ô;ˆEØ<•U�=¨$Ñ/Ô/Ô<¸eÐDˆFØ%Ð/¨ˆKˆKàÐrZ   c                 ó0   — |                       |¦  «        duS )zEReturn true if the shape of the given variable is available.
        N©Ú	get_shape©rŸ   rí   s     rX   Ú	has_shapezShapeEquivSet.has_shapeU  s   € ð �~Š~˜dÑ#Ô#¨4Ð/Ð/rZ   c                 ó,   — t          | j        |¦  «        S )ztReturn a tuple of variables that corresponds to the shape
        of the given array, or None if not found.
        )r   Ú
_get_shaper)  s     rX   r(  zShapeEquivSet.get_shapeZ  s   € õ �T”_ dÑ+Ô+Ð+rZ   c                 óx  — |                       |¦  «        }t          |dk    ¦  «         g }|D ]}t          || j        v ¦  «         | j        |         }|g k    r|                     |d         ¦  «         ŒGt          || j        v ¦  «         | j        |         }|                     |¦  «         Œ€t          |¦  «        S )z„Return a tuple of variables that corresponds to the shape
        of the given array, or raise GuardException if not found.
        rd   r   )Úget_shape_classesr   rã   r¼   rä   r¸   )rŸ   rí   r¾   rs   r�   r  s         rX   r,  zShapeEquivSet._get_shape`  sÄ   € ð ×%Ò% dÑ+Ô+ˆÝ�˜’
ÑÔÐØˆØð 	!ð 	!ˆAÝ�A˜œÐ(Ñ)Ô)Ð)Ø” Ô#ˆBØ�RŠxˆxØ—’˜R œUÑ#Ô#Ð#Ð#å˜˜TÔ.Ð.Ñ/Ô/Ð/ØÔ& qÔ)�Ø—’˜RÑ Ô Ð Ð Ý�U‰|Œ|ÐrZ   c                 óŽ  ‡ — t          |t          j        ¦  «        r|j        }|‰ j        v r‰ j        |         nd}t          |t
          j        t
          j        t
          j        f¦  «        sg S t          |t
          j        ¦  «        r|j	        dk    rg S ‰  
                    |¦  «        }t          ˆ fd„|D ¦   «         ¦  «        }|S )zùInstead of the shape tuple, return tuple of int, where
        each int is the corresponding class index of the size object.
        Unknown shapes are given class index -1. Return empty tuple
        if the input name is a scalar variable.
        Nr   c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rh   rÄ   )rl   rí   rŸ   s     €rX   rn   z2ShapeEquivSet.get_shape_classes.<locals>.<genexpr>…  s/   øè è € Ð;Ð;¨T�T—]’] 4Ñ(Ô(Ð;Ð;Ð;Ð;Ð;Ð;rZ   )r[   r   ró   rí   rá   r   rj   rk   ri   rõ   rï   r¸   )rŸ   rí   rù   rð   r¾   s   `    rX   r.  zShapeEquivSet.get_shape_classesr  sÇ   ø€ õ �d�BœFÑ#Ô#ð 	Ø”9ˆDØ$(¨D¬LÐ$8Ð$8ˆdŒl˜4Ô Ð ¸dˆå�sÝ”¥¤µ%Ô2Gðñ ô ð	ð
 ˆIå�c�5Ô0Ñ1Ô1ð 	°c´hÀ!²m°mØˆIØ—’ Ñ%Ô%ˆÝÐ;Ð;Ð;Ð;°UÐ;Ñ;Ô;Ñ;Ô;ˆØˆrZ   c                 ó  •— t          t          | ¦  «                             |¦  «        }i }|j                             ¦   «         D ]´\  }}t          |¦  «        dk    sJ ‚|d         }|| j        v sJ ‚||j        v sJ ‚| j        |         }|j        |         }|| j        v sJ ‚||j        v sJ ‚g }	d„ |j        |         D ¦   «         }
| j        |         D ] }|j        |
v r|	 	                    |¦  «         Œ!|	||<   Œµ||_        |S )z<Overload the intersect method to handle ind_to_var.
        r   c                 ó   — g | ]	}|j         ‘Œ
S rd   ©rí   r   s     rX   rÅ   z+ShapeEquivSet.intersect.<locals>.<listcomp>—  s   € Ð=Ð=Ð= �Q”VÐ=Ð=Ð=rZ   )
rå   rß   rÙ   r�   Úitemsrx   rœ   rã   rí   r¼   )rŸ   rÖ   Únewsetrã   r�   r½   rÀ   ÚjÚkr  rð   r°   ræ   s               €rX   rÙ   zShapeEquivSet.intersectˆ  s8  ø€ õ •} dÑ+Ô+×5Ò5°iÑ@Ô@ˆØˆ
ØÔ(×.Ò.Ñ0Ô0ð 	$ð 	$‰GˆAˆtÝ�t‘9”9˜q’=�=�=�=Ø�q”'ˆCØ˜$œ/Ð)Ð)Ð)Ð)Ø˜)Ô.Ð.Ð.Ð.Ð.Ø” Ô$ˆAØÔ$ SÔ)ˆAØ˜œÐ'Ð'Ð'Ð'Ø˜	Ô,Ð,Ð,Ð,Ð,ØˆGØ=Ð= YÔ%9¸!Ô%<Ð=Ñ=Ô=ˆEØ”_ QÔ'ð &ð &�Ø”6˜U�?�?Ø—N’N 1Ñ%Ô%Ð%øØ#ˆJ�q‰MˆMØ&ˆÔØˆrZ   c                 óÚ  — t          |t          j        ¦  «        r|j        }|| j        v �r5| j        |xx         dz  cc<   t          |                      |¦  «        ¦  «        }|D ]ù}|| j        v rî|                     |¦  «         | j        |         }| j        |= | j	        |          
                    |¦  «         | j	        |         g k    r| j	        |= || j        v sJ ‚d„ | j        |         D ¦   «         }||v re|                     |¦  «        }| j        |         |= | j        |         g k    r1| j        |= || j	        v r | j	        |         D ]
}| j        |= Œ| j	        |= ŒúdS d| j        |<   dS )a  Increment the internal count of how many times a variable is being
        defined. Most variables in Numba IR are SSA, i.e., defined only once,
        but not all of them. When a variable is being re-defined, it must
        be removed from the equivalence relation and added to the redefined
        set but only if that redefinition is not known to have the same
        equivalence classes. Those variables redefined are removed from all
        the blocks' equivalence sets later.

        Arrays passed to define() use their whole name but these do not
        appear in the equivalence sets since they are stored there per
        dimension. Calling _get_names() here converts array names to
        dimensional names.

        This function would previously invalidate if there were any multiple
        definitions of a variable.  However, we realized that this behavior
        is overly restrictive.  You need only invalidate on multiple
        definitions if they are not known to be equivalent. So, the
        equivalence insertion functions now return True if some change was
        made (meaning the definition was not equivalent) and False
        otherwise. If no change was made, then define() need not be
        called. For no change to have been made, the variable must
        already be present. If the new definition of the var has the
        case where lhs and rhs are in the same equivalence class then
        again, no change will be made and define() need not be called
        or the variable invalidated.
        r:   c                 ó   — g | ]	}|j         ‘Œ
S rd   r3  r   s     rX   rÅ   z(ShapeEquivSet.define.<locals>.<listcomp>Í  s   € Ð@Ð@Ð@¨˜QœVÐ@Ð@Ð@rZ   N)r[   r   ró   rí   râ   r  rï   rœ   rE   r�   Úremoverã   Úindex)	rŸ   rí   Ú	redefinedÚname_resÚone_namer�   rð   r6  rÀ   s	            rX   ÚdefinezShapeEquivSet.defineŸ  s«  € õ6 �d�BœFÑ#Ô#ð 	Ø”9ˆDØ�4”9ÐÑØŒI�dˆOˆOŒO˜qÑ ˆOˆO‰OÝ˜DŸOšO¨DÑ1Ô1Ñ2Ô2ˆHØ$ð 7ð 7�ð ˜tœÐ.Ð.Ø—M’MØ ñô ð ð œ¨Ô1�AØœ¨Ð1Ø”O AÔ&×-Ò-¨hÑ7Ô7Ð7Ø” qÔ)¨RÒ/Ð/Ø œO¨AÐ.Ø ¤Ð/Ð/Ð/Ð/Ø@Ð@¨T¬_¸QÔ-?Ð@Ñ@Ô@�EØ˜u�}�}Ø!ŸKšK¨Ñ-Ô-˜Ø œO¨AÔ.¨qÐ1Øœ?¨1Ô-°Ò3Ð3Ø $¤°Ð 2à  D¤OÐ3Ð3Ø+/¬?¸1Ô+=ð !=ð != CØ(,¬¸Ð(<Ð(<Ø$(¤O°AÐ$6øð17ð 7ð4  ˆDŒI�d‰OˆOˆOrZ   c                 ór   — |                      ¦   «         D ]!\  }}|dk    r|                      ||¦  «         Œ"dS )z«Union with the given defs dictionary. This is meant to handle
        branch join-point, where a variable may have been defined in more
        than one branches.
        r   N)r4  r?  )rŸ   râ   r<  r7  rØ   s        rX   Ú
union_defszShapeEquivSet.union_defsÛ  sG   € ð
 —J’J‘L”Lð 	*ð 	*‰DˆAˆqØ�1ŠuˆuØ—’˜A˜yÑ)Ô)Ð)øð	*ð 	*rZ   )NNNNr   N)rÚ   rÛ   rÜ   rÝ   r    r   r¨   r«   rï   rÉ   rÌ   r  rÐ   rÁ   rÒ   r*  r(  r,  r.  rÙ   r?  rA  Ú__classcell__©ræ   s   @rX   rß   rß   h  s©  ø€ € € € € ðð ð ØØØØØðMð Mð Mð Mð Mð Mð8/ð /ð /ð

ð 
ð 
ð
ð 
ð 
ð
)ð )ð )ðVð ð ð ð ð*Dð Dð Dð Dð Dð	+ð 	+ð 	+ðBð Bð Bð Bð Bð2ð 2ð 2ð 2ð 2ð87ð 7ð 7ð 7ð 7ðr0ð 0ð 0ð
,ð ,ð ,ðð ð ð$ð ð ð,ð ð ð ð ð.: ð : ð : ðx*ð *ð *ð *ð *ð *ð *rZ   rß   c                   ó~   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Zdˆ fd	„	Z	dˆ fd
„	Z
ˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚSymbolicEquivSeta/  Just like ShapeEquivSet, except that it also reasons about variable
    equivalence symbolically by using their arithmetic definitions.
    The goal is to automatically derive the equivalence of array ranges
    (slicing). For instance, a[1:m] and a[0:m-1] shall be considered
    size-equivalence.
    Nr   c
                 óÀ   •— |r|ni | _         |r|ni | _        |r|ni | _        i | _        i | _        t          t          | ¦  «                             ||||||	¦  «         dS )zØCreate a new SymbolicEquivSet object, where typemap is a dictionary
        that maps variable names to their types, and it will not be modified.
        Optional keyword arguments are for internal use only.
        N)Údef_byÚref_byÚ
ext_shapesÚrel_mapÚwrap_maprå   rE  r    )rŸ   rá   rG  rH  rI  râ   rã   rœ   r�   r¥   ræ   s             €rX   r    zSymbolicEquivSet.__init__î  s…   ø€ ð& !'Ð.�f�f¨BˆŒð
 !'Ð.�f�f¨BˆŒð )3Ð:˜*˜*¸ˆŒð
 ˆŒð ˆŒÝÕ Ñ%Ô%×.Ò.Ø�T˜: z°:¸wñ	
ô 	
ð 	
ð 	
ð 	
rZ   c                 ó*   — t          | j        ¦  «        S )z*Return an empty SymbolicEquivSet.
        )rE  rá   r¢   s    rX   r   zSymbolicEquivSet.empty  s   € õ   ¤Ñ-Ô-Ð-rZ   c                 óf   — d                      | j        | j        | j        | j        | j        ¦  «        S )NzHSymbolicEquivSet({}, ind_to_var={}, def_by={}, ref_by={}, ext_shapes={}))rª   r�   rã   rG  rH  rI  r¢   s    rX   r«   zSymbolicEquivSet.__repr__   s4   € ð(ß(.ªØ”Ø”Ø”Ø”Ø”ñ)ô )ð		
rZ   c                 óˆ  — t          | j        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j        ¦  «        t          j        | j	        ¦  «        t          j        | j
        ¦  «        | j        ¬¦	  «	        S )r¤   )rG  rH  rI  râ   rã   rœ   r�   r¥   )rE  rá   r¦   rG  rH  rI  râ   rã   r§   rœ   r�   rž   r¢   s    rX   r¨   zSymbolicEquivSet.clone,  sŽ   € õ  ØŒLÝ”9˜Tœ[Ñ)Ô)Ý”9˜Tœ[Ñ)Ô)Ý”y ¤Ñ1Ô1Ý”˜4œ9Ñ%Ô%Ý”y ¤Ñ1Ô1Ý”} T¤_Ñ5Ô5Ý”} T¤_Ñ5Ô5Ø”Mð

ñ 

ô 

ð 
	
rZ   c                 ó,   — t          | j        |¦  «        S )zjRetrieve a definition pair for the given variable,
        or return None if it is not available.
        )r   Ú_get_or_set_relr)  s     rX   Úget_relzSymbolicEquivSet.get_rel;  s   € õ �TÔ)¨4Ñ0Ô0Ð0rZ   c                 óà  •‡ ‡‡‡— t          |t          j        ¦  «        r|j        }t	          ‰ j                             |d¦  «        dk    ¦  «         |‰ j        v r‰ j        |         S t	          |du¦  «         d„ Šˆˆfd„Št          ||¦  «        }|df}t          |t          j	        ¦  «        �rE|j
        dk    r¯t          ||‰ j        ¬¦  «        \  }}|dk    rŽ|d	k    rˆt          ˆ fd
„|j        D ¦   «         ¦  «        }d|v rdS ‰ j                             |g ¦  «        }|                     |¦  «         t#          |¦  «        dk    r‰                      |¦  «         |‰ j        |<   nÆ|j
        dk    r‰                      |j        |¦  «        }	‰                      |j        |¦  «        }
|	�|
€dS |j        t.          j        k    r ‰|	|
¦  «        }n]|j        t.          j        k    r ‰|	|
¦  «        }n;t          |t          j        ¦  «        r!t          |j        t8          ¦  «        r|j        }t	          |du¦  «         |‰ j        |<   t          |t8          ¦  «        s-t          |t          ¦  «        r÷|d         |k    s|d         dk    rßt          |t          ¦  «        rÊ|\  }Š|‰ j        vr
g ‰ j        |<   ‰ j        |                              |‰ f¦  «         ‰                      |¦  «        }|dk    rt‰ j        |         }g }|D ]'}|‰ j        v r|ˆfd„‰ j        |         D ¦   «         z  }Œ(t#          |¦  «        dk    r(tA          tB          ‰ ¦  «                             |¦  «         |S )z·Retrieve a definition pair for the given variable,
        and if it is not already available, try to look it up
        in the given func_ir, and remember it for future use.
        r   r:   Nc                 ó    — t          | t          ¦  «        }t          |t          ¦  «        }|r|r| |z   S |\  }}|| |z   fS | \  }}|r|||z   fS d S rh   ©r[   rË   )r°   ÚyÚ
x_is_constÚ
y_is_constr"  Úoffsets         rX   Úplusz.SymbolicEquivSet._get_or_set_rel.<locals>.plusN  sv   € Ý'¨­3Ñ/Ô/�
Ý'¨­3Ñ/Ô/�
Øð $Ø!ð 1Ø  1™u˜à()™˜˜fØ # Q¨¡ZÐ0Ð0à$%‘M�S˜&Ø!ð $Ø # Q¨¡ZÐ0Ð0à#˜trZ   c                 óô   •— t          |t          ¦  «        r ‰| | ¦  «        S t          | t          ¦  «        r?t          |t          ¦  «        r*| d         |d         k    r ‰| d         |d         ¦  «        S d S ©Nr   r:   )r[   rË   r¸   )r°   rU  ÚminusrY  s     €€rX   r\  z/SymbolicEquivSet._get_or_set_rel.<locals>.minus^  s}   ø€ Ý˜a¥Ñ%Ô%ð 	 Ø˜4  A 2™;œ;Ð&å˜q¥%Ñ(Ô(ð å" 1¥eÑ,Ô,ð ð ˜!œ  !¤š˜à ˜5  1¤ q¨¤tÑ,Ô,Ð,à˜4rZ   Úcall©rá   ra   znumba.parfors.array_analysisc              3   óX   •K  — | ]$}‰j                              |j        d ¦  «        V — Œ%dS )r   N)rœ   r¯   rí   r¶   s     €rX   rn   z3SymbolicEquivSet._get_or_set_rel.<locals>.<genexpr>u  sH   øè è € ð &ð &Ø@A˜DœO×/Ò/°´¸Ñ;Ô;ð&ð &ð &ð &ð &ð &rZ   r   Úbinopc                 ó(   •— g | ]\  }}|‰ k    ¯|‘ŒS rd   rd   )rl   r°   r�   rX  s      €rX   rÅ   z4SymbolicEquivSet._get_or_set_rel.<locals>.<listcomp>¥  s0   ø€ ð *"ð *"ð *"á(.¨¨AØ'(¨V¨G¢| |ð %&à'3 | |rZ   )"r[   r   ró   rí   r   râ   r¯   rG  r   ÚExprÚopr   rá   r¸   rI   rI  r¼   rx   rÁ   rP  ÚlhsÚrhsÚfnÚoperatorrE   Úsubrö   r÷   rË   rH  r±   r�   rå   rE  )rŸ   rí   Úfunc_irÚexprr÷   ÚfnameÚmod_namer;  rð   rd  re  r"  r¿   r½   rÀ   r\  rX  rY  ræ   s   `              @@@€rX   rP  z SymbolicEquivSet._get_or_set_relA  sØ  øøøøø€ õ
 �d�BœFÑ#Ô#ð 	Ø”9ˆDÝ�”	—’˜d AÑ&Ô&¨!Ò+Ñ,Ô,Ð,Ø�4”;ÐÐØ”;˜tÔ$Ð$å�G 4Ð'Ñ(Ô(Ð(ð$ð $ð $ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 õ " '¨4Ñ0Ô0ˆDØ˜1�IˆEÝ˜$¥¤Ñ(Ô(ñ $#Ø”7˜fÒ$Ð$Ý&3Ø ¨t¬|ð'ñ 'ô '‘O�E˜8ð  Ò-Ð-Ø$Ð(FÒFÐFå %ð &ð &ð &ð &ØEIÄYð&ñ &ô &ñ !ô !˜ð  ˜;˜;Ø#' 4Ø $¤× 3Ò 3°E¸2Ñ >Ô >˜ØŸš TÑ*Ô*Ð*Ý˜u™:œ:¨š>˜>Ø ŸLšL¨Ñ/Ô/Ð/Ø16˜œ¨Ñ.øØ”W Ò'Ð'Ø×.Ò.¨t¬x¸ÑAÔA�CØ×.Ò.¨t¬x¸ÑAÔA�Cð �{ c kØ#˜tØœ¥H¤LÒ0Ð0Ø $  S¨#¡¤˜˜Øœ¥H¤LÒ0Ð0Ø %  c¨3¡¤˜øÝ˜D¥"¤(Ñ+Ô+ð #µ
¸4¼:ÅsÑ0KÔ0Kð #Øœ
�Ý�E Ð%Ñ&Ô&Ð&à %ˆDŒK˜ÑÝ˜%¥Ñ%Ô%ð IÝ˜5¥%Ñ(Ô(ðIà˜1”X Ò%Ð%¨¨q¬°Qª¨õ ˜e¥UÑ+Ô+ð IØ$)‘M�S˜&Ø 4¤;Ð.Ð.Ø+-˜œ CÑ(Ø”K Ô$×+Ò+¨T°F°7¨OÑ<Ô<Ð<àŸ-š-¨Ñ,Ô,�CØ˜a’x�xØ#œ¨sÔ3˜Ø "˜Ø#'ð "ð "˜CØ" d¤kÐ1Ð1Ø %ð *"ð *"ð *"ð *"à26´+¸cÔ2Bð*"ñ *"ô *"ñ !" øõ
 ˜u™:œ:¨š>˜>Ý!Õ"2°DÑ9Ô9×AÒAÀ%ÑHÔHÐHØˆLrZ   c                 ó¬  •— t          |t          j        ¦  «        r|j        }n|}t	          t
          | ¦  «                             ||¦  «         |rÿ| j                             |d¦  «        dk    rât          |t          j
        ¦  «        rÊt          | j        ||¦  «        }t          |t          ¦  «        r|                      ||g¦  «         t          |t          j        ¦  «        rh|                      |¦  «        }|| j        vr|g| j        |<   || j        |<   || j        v r!| j        |                              |¦  «         n|g| j        |<   dS dS dS dS )af  Besides incrementing the definition count of the given variable
        name, it will also retrieve and simplify its definition from func_ir,
        and remember the result for later equivalence comparison. Supported
        operations are:
          1. arithmetic plus and minus with constants
          2. wrap_index (relative to some given size)
        r   r:   TN)r[   r   ró   rí   rå   rE  r?  râ   r¯   r   ÚNumberr   rP  rË   rÁ   r³   r�   rœ   rã   r¼   )	rŸ   r"  r<  ri  rù   rí   r÷   r¿   ræ   s	           €rX   r?  zSymbolicEquivSet.define®  s_  ø€ õ �c�2œ6Ñ"Ô"ð 	Ø”8ˆDˆDàˆDÝÕ Ñ%Ô%×,Ò,¨T°9Ñ=Ô=Ð=àð	à”	—’˜d AÑ&Ô&¨!Ò+Ð+Ý˜3¥¤Ñ-Ô-ð ,õ ˜$Ô.°°gÑ>Ô>ˆEå˜%¥Ñ%Ô%ð ,Ø—’˜d E˜]Ñ+Ô+Ð+Ý˜#�rœvÑ&Ô&ð 1Ø×*Ò*¨4Ñ0Ô0�Ø˜tœÐ.Ð.Ø,0¨6�D”O CÑ(Ø,/�D”O DÑ)Ø˜$œ/Ð)Ð)Ø”O CÔ(×/Ò/°Ñ4Ô4Ð4Ð4à,/¨5�D”O CÑ(Ø�4ð%	ð 	à+Ð+Ð+Ð+rZ   c                 óì  •— t          ¦   «         }t          ¦   «         }|D ]a}|                      |¦  «        }|dk    r|                     |¦  «         Œ3||vr*|                     |¦  «         |                     |¦  «         Œbt          |¦  «        dk    rdS t	          |¦  «        }t          t          | ¦  «                             |¦  «         | j        |                      |d         ¦  «                 }i }d„ }|D ]Ì}|| j	        v r†| j	        |         }t          |t          ¦  «        rd|\  }	}
 |||
 ¦  «                             |	¦  «         |	| j        v r6| j        |	         D ](\  }} |||
|z    ¦  «                             |¦  «         Œ)|| j        v r2| j        |         D ]$\  }	}
 |||
¦  «                             |	¦  «         Œ%ŒÍ|                     ¦   «         D ]}|                      |¦  «         ŒdS )z�Overload _insert method to handle ind changes between relative
        objects.  Returns True if some change is made, false otherwise.
        r   r:   Fr   c                 ó.   — || v r	| |         }ng }|| |<   |S rh   rd   )Údr7  rØ   s      rX   Ú
get_or_setz,SymbolicEquivSet._insert.<locals>.get_or_setå  s)   € Ø�AˆvˆvØ�a”D��à�Ø��!‘ØˆHrZ   T)rÏ   r±   rE   rx   r  rå   rE  rÁ   r�   rG  r[   r¸   r¼   rH  rÕ   )rŸ   r½   ÚindsetÚuniqsrÀ   r¿   Úoffset_dictrr  r÷   rí   rX  rØ   r�   rð   ræ   s                 €rX   rÁ   zSymbolicEquivSet._insertÏ  s'  ø€ õ ‘”ˆÝ‘”ˆØð 	 ð 	 ˆCØ—-’- Ñ$Ô$ˆCØ�bŠyˆyØ—	’	˜#‘”��Ø˜V�m�mØ—	’	˜#‘”�Ø—
’
˜3‘”�øÝˆu‰:Œ:˜Š?ˆ?Ø�5Ý�U‘”ˆÝÕ Ñ%Ô%×-Ò-¨eÑ4Ô4Ð4ØŒ˜tŸ}š}¨U°1¬XÑ6Ô6Ô7ˆð ˆð	ð 	ð 	ð ð 	Að 	AˆCØ�d”kÐ!Ð!Øœ CÔ(�Ý˜e¥UÑ+Ô+ð MØ%*‘N�T˜6Ø�J˜{¨V¨GÑ4Ô4×;Ò;¸DÑAÔAÐAØ˜tœ{Ð*Ð*Ø&*¤k°$Ô&7ð Mð M™F˜Q Ø&˜J {°f¸q±j°MÑBÔB×IÒIÈ!ÑLÔLÐLÐLØ�d”kÐ!Ð!Ø&*¤k°#Ô&6ð Að A‘N�T˜6Ø�J˜{¨FÑ3Ô3×:Ò:¸4Ñ@Ô@Ð@Ð@øØ ×'Ò'Ñ)Ô)ð 	 ð 	 ˆEØ�LŠL˜ÑÔÐÐØˆtrZ   c                 ój   — t          |t          j        t          j        f¦  «        sJ ‚|| j        |<   dS )z-remember shapes of SetItem IR nodes.
        N)r[   r   ÚStaticSetItemÚSetItemrI  )rŸ   rÀ   rs   s      rX   Úset_shape_setitemz"SymbolicEquivSet.set_shape_setitemý  s6   € õ ˜#¥Ô 0µ"´*Ð=Ñ>Ô>Ð>Ð>Ð>Ø$ˆŒ˜ÑÐÐrZ   c                 ó|  •— t          |t          j        t          j        f¦  «        r#t	          || j        v ¦  «         | j        |         S t          |t          j        ¦  «        sJ ‚| j        |j                 }t          |t          j
        ¦  «        r|fS t          t          | ¦  «                             |¦  «        S )zGOverload _get_shape to retrieve the shape of SetItem IR nodes.
        )r[   r   rw  rx  r   rI  ró   rá   rí   r   rk   rå   rE  r,  )rŸ   rÀ   rù   ræ   s      €rX   r,  zSymbolicEquivSet._get_shape  s¥   ø€ õ �c�BÔ,­b¬jÐ9Ñ:Ô:ð 
	EÝ�C˜4œ?Ð*Ñ+Ô+Ð+Ø”? 3Ô'Ð'å˜c¥2¤6Ñ*Ô*Ð*Ð*Ð*Ø”,˜sœxÔ(ˆCå˜#�uœÑ/Ô/ð EØ�v�åÕ-¨tÑ4Ô4×?Ò?ÀÑDÔDÐDrZ   )NNNNNNNr   rh   ©NN)rÚ   rÛ   rÜ   rÝ   r    r   r«   r¨   rQ  rP  r?  rÁ   ry  r,  rB  rC  s   @rX   rE  rE  å  s-  ø€ € € € € ðð ð ØØØØØØØð+
ð +
ð +
ð +
ð +
ð +
ðZ.ð .ð .ð


ð 

ð 

ð
ð 
ð 
ð1ð 1ð 1ðkð kð kð kð kð kðZð ð ð ð ð ðB,ð ,ð ,ð ,ð ,ð\%ð %ð %ðEð Eð Eð Eð Eð Eð Eð Eð ErZ   rE  c                   ó   — e Zd ZdZd„ ZdS )ÚWrapIndexMetaa  
      Array analysis should be able to analyze all the function
      calls that it adds to the IR.  That way, array analysis can
      be run as often as needed and you should get the same
      equivalencies.  One modification to the IR that array analysis
      makes is the insertion of wrap_index calls.  Thus, repeated
      array analysis passes should be able to analyze these wrap_index
      calls.  The difficulty of these calls is that the equivalence
      class of the left-hand side of the assignment is not present in
      the arguments to wrap_index in the right-hand side.  Instead,
      the equivalence class of the wrap_index output is a combination
      of the wrap_index args.  The important thing to
      note is that if the equivalence classes of the slice size
      and the dimension's size are the same for two wrap index
      calls then we can be assured of the answer being the same.
      So, we maintain the wrap_map dict that maps from a tuple
      of equivalence class ids for the slice and dimension size
      to some new equivalence class id for the output size.
      However, when we are analyzing the first such wrap_index
      call we don't have a variable there to associate to the
      size since we're in the process of analyzing the instruction
      that creates that mapping.  So, instead we return an object
      of this special class and analyze_inst will establish the
      connection between a tuple of the parts of this object
      below and the left-hand side variable.
    c                 ó"   — || _         || _        d S rh   )Ú
slice_sizeÚdim_size)rŸ   r  r€  s      rX   r    zWrapIndexMeta.__init__/  s   € Ø$ˆŒØ ˆŒˆˆrZ   N)rÚ   rÛ   rÜ   rÝ   r    rd   rZ   rX   r}  r}    s-   € € € € € ðð ð6!ð !ð !ð !ð !rZ   r}  c                   óh  — e Zd ZdZ	 d„ Zd„ Zd„ Zdcd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Z G d„ de¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Z	 ddd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Z d!„ Z!d"„ Z"d#„ Z#d$„ Z$d%„ Z%d&„ Z&d'„ Z'd(„ Z(d)„ Z)d*„ Z*d+„ Z+d,„ Z,d-„ Z-d.„ Z.d/„ Z/d0„ Z0d1„ Z1d2„ Z2d3„ Z3d4„ Z4d5„ Z5d6„ Z6d7„ Z7d8„ Z8d9„ Z9d:„ Z:d;„ Z;d<„ Z<d=„ Z=d>„ Z>d?„ Z?d@„ Z@dA„ ZAdB„ ZBdC„ ZCdD„ ZDdE„ ZEdF„ ZFdG„ ZGdH„ ZHdI„ ZIdJ„ ZJdK„ ZKdL„ ZLdM„ ZMdN„ ZNdO„ ZOdP„ ZPdQ„ ZQdR„ ZRdS„ ZSdT„ ZTdU„ ZUdV„ ZVdW„ ZWdX„ ZXdY„ ZYdZ„ ZZd[„ Z[d\„ Z\ded]„Z]ded^„Z^d_„ Z_d`„ Z`da„ Zadb„ ZbdS )fÚArrayAnalysisr   c                 ó„   — || _         || _        || _        || _        i | _        i | _        i | _        i | _        i | _        d S rh   )	rF   ri  rá   Ú	calltypesÚ
equiv_setsÚarray_attr_callsÚobject_attrsÚprependsÚpruned_predecessors)rŸ   rF   ri  rá   r„  s        rX   r    zArrayAnalysis.__init__>  sL   € ØˆŒØˆŒØˆŒØ"ˆŒð ˆŒà "ˆÔàˆÔàˆŒà#%ˆÔ Ð Ð rZ   c                 ó   — | j         |         S )zAReturn the equiv_set object of an block given its label.
        )r…  )rŸ   Úblock_labels     rX   rÐ   zArrayAnalysis.get_equiv_setO  s   € ð Œ˜{Ô+Ð+rZ   c                 ó†   — t          ¦   «         }|D ]/}| j        D ]%}| j        |         }|                     ||¦  «         Œ&Œ0dS )zõTake a set of variables in redefineds and go through all
        the currently existing equivalence sets (created in topo order)
        and remove that variable from all of them since it is multiply
        defined within the function.
        N)rÏ   r…  r?  )rŸ   Ú
redefinedsÚunusedr‘   ÚeslabelÚess         rX   Úremove_redefinedszArrayAnalysis.remove_redefinedsT  s_   € õ ‘”ˆØð 	%ð 	%ˆAØœ?ð %ð %�Ø”_ WÔ-�Ø—	’	˜!˜VÑ$Ô$Ð$Ð$ð%ð	%ð 	%rZ   Nc                 ó  — |€| j         j        }t          | j         j        ¦  «        | j         _        |€t	          | j        ¦  «        }n|}t          || j         j        | j        | j         ¦  «        \  | _        | _	        t          j        }t          xj        dz  c_        t          j        dk    rt          d|¦  «         t          | j         d|¦  «         t          j        dk    rIt          dt!          | j                             ¦   «         ¦  «        ¦  «         t          d| j        ¦  «         t'          |¦  «        }t)          ||¬¦  «        }|                      ||||¦  «         t          j        dk    r]|                      ¦   «          t          dt!          | j                             ¦   «         ¦  «        ¦  «         t          d	| j        ¦  «         t          | j         d
|¦  «         t          j        dk    rt          d|¦  «         dS dS )z�run array shape analysis on the given IR blocks, resulting in
        modified IR and finalized EquivSet for each block.
        Nr:   zStarting ArrayAnalysis:zbefore array analysiszArrayAnalysis variable types: zArrayAnalysis call types: )Úcfgz#ArrayAnalysis post variable types: zArrayAnalysis post call types: zafter array analysiszEnding ArrayAnalysis:)ri  Úblocksr   Ú_definitionsrE  rá   r   Ú	arg_namesÚ	alias_mapÚarg_aliasesr‚  Úaa_countr   rº   r»   r
   r  r4  r„  r   r	   Ú_run_on_blocksÚdump)rŸ   r”  rÖ   Úinit_equiv_setÚaa_count_saver“  Ú
topo_orders          rX   ÚrunzArrayAnalysis.run`  sï  € ð ˆ>Ø”\Ô(ˆFå$5°d´lÔ6IÑ$JÔ$JˆŒÔ!àÐÝ-¨d¬lÑ;Ô;ˆNˆNà&ˆNå+AØØŒLÔ"ØŒLØŒLñ	,
ô ,
Ñ(ˆŒ˜Ô(õ &Ô.ˆÝÐÔ !Ñ#ÐÔÝÔ! QÒ&Ð&ÝÐ+¨]Ñ;Ô;Ð;Ý�t”|Ð%<¸fÑEÔEÐEåÔ! QÒ&Ð&ÝØ0µ&¸¼×9KÒ9KÑ9MÔ9MÑ2NÔ2Nñô ð õ Ð.°´Ñ?Ô?Ð?å% fÑ-Ô-ˆÝ$ V°Ð5Ñ5Ô5ˆ
à×Ò˜J¨°°^ÑDÔDÐDåÔ! QÒ&Ð&Ø�IŠI‰KŒKˆKÝØ5Ý�t”|×)Ò)Ñ+Ô+Ñ,Ô,ñô ð õ Ð3°T´^ÑDÔDÐDå�t”|Ð%;¸VÑDÔDÐDÝÔ! QÒ&Ð&ÝÐ)¨=Ñ9Ô9Ð9Ð9Ð9ð 'Ð&rZ   c                 óÌ   — |D ]`}t           j        dk    rt          d|¦  «         ||         }|j        }|                      |||||¦  «        }|                      ||¦  «         Œad S )Nr·   zProcessing block:)r   rº   r»   ÚscopeÚ_determine_transformÚ_combine_to_new_block)	rŸ   rž  r”  r“  rœ  ÚlabelÚblockr¡  Úpending_transformss	            rX   rš  zArrayAnalysis._run_on_blocks’  s‹   € Øð 	Bð 	BˆEÝÔ%¨Ò*Ð*ÝÐ)¨5Ñ1Ô1Ð1Ø˜5”MˆEØ”KˆEØ!%×!:Ò!:Ø�U˜E 5¨.ñ"ô "Ðð ×&Ò& uÐ.@ÑAÔAÐAÐAð	Bð 	BrZ   c                 ó¼   — g }|D ]O\  }}}|D ]}|                      |¦  «         Œ|                      |¦  «         |D ]}|                      |¦  «         ŒŒP||_        dS )zWCombine the new instructions from previous pass into a new block
        body.
        N)r¼   Úbody)rŸ   r¥  r¦  Únew_bodyÚinstÚpreÚpostÚinstrs           rX   r£  z#ArrayAnalysis._combine_to_new_block�  sˆ   € ð ˆØ1ð 	'ð 	'‰OˆD�#�tØð 'ð '�Ø—’ Ñ&Ô&Ð&Ð&Ø�OŠO˜DÑ!Ô!Ð!Øð 'ð '�Ø—’ Ñ&Ô&Ð&Ð&ð'àˆŒ
ˆ
ˆ
rZ   c           	      ó  — d}|                      |¦  «        }|| j        v r| j        |         }ng }t          j        dk    rt	          d|¦  «         |D �]'\  }	}
t          j        dk    rt	          d|	|
¦  «         |	|v rŒ,|	| j        v rò| j        |	                              ¦   «         }t          j        dk    rt	          d|¦  «         |	|f| j        v rP| j        |	|f         }|D ]>}t          ¦   «         }|  	                    |||||¦  «         |  
                    |¦  «         Œ?|€|}ŒÔ|                     |¦  «        }t          ¦   «         }|                     |j        |¦  «         |  
                    |¦  «         �Œ)|€|}|| j        |<   g }|j        D ]l}t          ¦   «         }|  	                    |||||¦  «        \  }}t          |¦  «        dk    r|  
                    |¦  «         |                     |||f¦  «         Œm|S )zGDetermine the transformation for each instruction in the block
        Nr·   zpreds:zp, q:zp in equiv_setsr   )Úpredecessorsr‰  r   rº   r»   r…  r¨   rˆ  rÏ   Ú_analyze_instr‘  rÙ   rA  râ   r¨  rx   r¼   )rŸ   r“  r¥  r¤  r¡  rœ  rÖ   ÚpredsÚprunedÚpÚqÚfrom_setÚinstrsrª  r<  r¦  r«  r¬  s                     rX   r¢  z"ArrayAnalysis._determine_transformª  sX  € ð ˆ	à× Ò  Ñ'Ô'ˆà�DÔ,Ð,Ð,ØÔ-¨eÔ4ˆFˆFàˆFõ Ô! QÒ&Ð&Ý�(˜EÑ"Ô"Ð"Øð 	6ñ 	6‰FˆQ�ÝÔ%¨Ò*Ð*Ý�g˜q !Ñ$Ô$Ð$Ø�Fˆ{ˆ{ØØ�D”OÐ#Ð#Øœ?¨1Ô-×3Ò3Ñ5Ô5�ÝÔ)¨QÒ.Ð.ÝÐ+¨XÑ6Ô6Ð6Ø�u�: ¤Ð.Ð.Ø!œ]¨A¨u¨:Ô6�FØ &ð :ð :˜Ý$'¡E¤E˜	Ø×*Ò*Ø! 5¨(°D¸)ñô ð ð ×.Ò.¨yÑ9Ô9Ð9Ð9ØÐ$Ø (�I�Ià )× 3Ò 3°HÑ =Ô =�IÝ #¡¤�IØ×(Ò(¨¬¸	ÑBÔBÐBð ×*Ò*¨9Ñ5Ô5Ð5ùð ÐØ&ˆIØ!*ˆŒ˜Ñð  ÐØ”Jð 
	9ð 
	9ˆDÝ™œˆIØ×*Ò*Ø�u˜i¨¨yñô ‰IˆC�õ
 �9‰~Œ~ Ò!Ð!Ø×&Ò& yÑ1Ô1Ð1à×%Ò% t¨S°$Ð&7Ñ8Ô8Ð8Ð8Ø!Ð!rZ   c                 ó0   — t          d| j        ¦  «         dS )z@dump per-block equivalence sets for debugging purposes.
        zArray Analysis: N)r»   r…  r¢   s    rX   r›  zArrayAnalysis.dumpî  s   € õ 	Ð  $¤/Ñ2Ô2Ð2Ð2Ð2rZ   c                 ó¤   — || j         |j        <   |g| j        j        |j        <   t	          ¦   «         }|                     ||| j        |¦  «         d S rh   )rá   rí   ri  r•  rÏ   r?  )rŸ   rÖ   r"  rù   r÷   r�  s         rX   Ú_definezArrayAnalysis._defineó  sN   € Ø!$ˆŒ�S”XÑØ/4¨gˆŒÔ! #¤(Ñ+Ý‘U”Uˆ
Ø×Ò˜˜j¨$¬,¸Ñ<Ô<Ð<Ð<Ð<rZ   c                   ó   — e Zd Zd„ ZdS )úArrayAnalysis.AnalyzeResultc                 ó   — || _         d S rh   )Úkwargs)rŸ   r½  s     rX   r    z$ArrayAnalysis.AnalyzeResult.__init__ú  s   € Ø ˆDŒKˆKˆKrZ   N)rÚ   rÛ   rÜ   r    rd   rZ   rX   ÚAnalyzeResultr»  ù  s#   € € € € € ð	!ð 	!ð 	!ð 	!ð 	!rZ   r¾  c                 óŠ  ‡ ‡‡‡‡‡%‡&— g }g }t           j        dk    rt          d‰¦  «         t          ‰t          j        ¦  «        �r‰j        }‰ j        |j                 }	d }
t          |	t          j
        ¦  «        r|	j        dk    rd}
�n<t          ‰j        t          j        ¦  «        rË‰                      ‰‰‰j        |¦  «        }|rªt          t          |t           j        ¦  «        ¦  «         d|j        v r|j        d         }
d|j        v r |                     |j        d         ¦  «         d|j        v r |                     |j        d         ¦  «         d|j        v r|j        d         ‰_        �nRt          ‰j        t          j        t          j        f¦  «        r	‰j        }
�nt          ‰j        t          j        ¦  «        rV‰j        j        }t          |t.          ¦  «        rt1          d	„ |D ¦   «         ¦  «        r|}
nÂt          |t2          ¦  «        r|f}
n©t          ‰j        t          j        ¦  «        rŠt          |	t          j        j        ¦  «        r't          |	j        t          j        ¦  «        r‰j        }
nDt          |	t          j        j        ¦  «        r%t1          d
„ |	j	        D ¦   «         ¦  «        r‰j        }
t          |
t          j        ¦  «        rct          |
j        t.          ¦  «        r(|
j         Š&t/          ˆ&fd„|
j        D ¦   «         ¦  «        }
nÖt          |
j        t2          ¦  «        r|
f}
n¸d }
nµt          |
t          j        ¦  «        r.t          ‰ j        |
j                 t          j        ¦  «        r|
f}
nmt          |
tB          ¦  «        rX	 ‰ "                    ||‰ j#        |	¦  «         ‰ $                    |j        ¦  «        }|dk    r|‰j%        |
j&        |
j'        f<   ||fS t          |	t          j
        ¦  «        r²|
�Kt          |
t          j        ¦  «        r1t          ‰ j        |
j                 t          j        j(        ¦  «        r�n*|
�Dt          |
t.          ¦  «        s/t          |
t          j        ¦  «        r3‰ )                    |
¦  «        s‰  *                    ‰||	j        |
|¦  «        }
nÅt          |	t          j        ¦  «        rH|
rEt          |	j        t          j        ¦  «        r&‰  *                    ‰|tW          |	¦  «        |
|¦  «        }
nct          |	t          j        j        ¦  «        rDt1          d„ |	j	        D ¦   «         ¦  «        r&‰  *                    ‰|tW          |	¦  «        |
|¦  «        }
	 d}|
�‰ ,                    ||
¦  «        }|r‰ "                    ||‰ j#        |	¦  «         �n{t          ‰t          j-        t          j.        f¦  «        �rìt          ‰t          j.        ¦  «        r‰j/        n‰j0        }tc          ‰ j2        ‰‰‰j        |¦  «        }|sg g fS |d         �5t          ‰t          j-        t          j.        f¦  «        sJ ‚|d         ‰_/        |d         }|j        d         }d|j        v r|j        d         }‰ 3                    ‰j        ¦  «        }|dk    r‰ 4                    ‰|¦  «         |g fS |�ù‰ j        ‰j        j                 }t          t          |t          j
        ¦  «        ¦  «         |j        }||g}‰j        j        ‰j        j        g}‰  5                    ‰‰‰j         ||¦  «        }t          d|j        v ¦  «         t          d|j        v ¦  «         |j        d         }
|j        d         }tW          |
¦  «        }||k    sJ ‚‰ 4                    ‰|
¦  «         ||z   g fS |g fS t          ‰t          j6        ¦  «        �rˆ%ˆˆˆˆˆ fd„}‰j7        Š%tc          tp          ‰ j#        ‰%¦  «        }|�sO‰ 9                    ‰%¦  «        }g }|D ]‹}t          |tt          ¦  «        r_|‰ j        v rVtc          tp          ‰ j#        |d¬¦  «        }t          |t          j        ¦  «        r|j        }|r| ;                    |¦  «         Œv| ;                    |¦  «         ŒŒty          t{          d„ |¦  «        ¦  «        }ty          |¦  «         >                    |¦  «        } tW          | ¦  «        dk    rt          | ¦  «        d         }nAtW          |¦  «        dk    r.tc          tp          ‰ j#        t          |¦  «        d         ¦  «        }t          |t          j        ¦  «        r|j@        dk    r ||¦  «         �n�t          |t          j        ¦  «        r¬|j@        dk    r¡tc          tp          ‰ j#        |jA        ¦  «        }!|!�~|!j        t„          u rptW          |jC        ¦  «        dk    rXtc          tp          ‰ j#        |jC        d         ¦  «        }"|"�0t          |"t          j        ¦  «        r|"j@        dk    r ||"¦  «         n×t          |t          j        ¦  «        r|j        }t          |t2          ¦  «        st          |t„          ¦  «        rE|r‰jD        n‰jE        }#|#‰ jF        v r!‰ jF        |#          ;                    ‰¦  «         nR‰g‰ jF        |#<   nFt�          ‰¦  «        t�          v r0t�          t�          ‰¦  «                 }$ |$‰‰‰ j        ‰ ¦  «        \  }}||fS )Nr·   zanalyze_inst:r   rd   rs   r«  r¬  re  c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rh   rT  )rl   rØ   s     rX   rn   z.ArrayAnalysis._analyze_inst.<locals>.<genexpr>  s,   è è € ÐCÐC°q¥
¨1­cÑ 2Ô 2ÐCÐCÐCÐCÐCÐCrZ   c                 óZ   — g | ](}t          |t          j        t          j        f¦  «        ‘Œ)S rd   ©r[   r   r]   ÚIntegerLiteralr   s     rX   rÅ   z/ArrayAnalysis._analyze_inst.<locals>.<listcomp>(  sC   € ð ,ð ,ð ,àõ (¨Ý"œ]­EÔ,@ÐAñCô Cð ,ð ,ð ,rZ   c              3   óB   •K  — | ]}t          j        |‰¦  «        V — Œd S rh   )r   rö   )rl   r°   Úlocs     €rX   rn   z.ArrayAnalysis._analyze_inst.<locals>.<genexpr>2  s/   øè è € Ð!HÐ!H°q¥"¤(¨1¨cÑ"2Ô"2Ð!HÐ!HÐ!HÐ!HÐ!HÐ!HrZ   r   c                 óZ   — g | ](}t          |t          j        t          j        f¦  «        ‘Œ)S rd   rÂ  r   s     rX   rÅ   z/ArrayAnalysis._analyze_inst.<locals>.<listcomp>f  sA   € ð (ð (ð (àõ $ AÝœ­Ô(<Ð=ñ?ô ?ð (ð (ð (rZ   Tr:   c                 ó8  •— d }| j         t          j        k    r‰j        }‰j        }d}n%| j         t          j        k    r‰j        }‰j        }d}‰j        | j        j                 }‰j        | j	        j                 }|��t          |t          j        ¦  «        rt          |t          j        ¦  «        s4t          |t          j        ¦  «        rÊt          |t          j        ¦  «        r²‰j        }| j        | j	        f}‰                     ‰|‰
|¦  «        }|                     t#          j        t#          j        ||¦  «        ‰	|¦  «        ¦  «         |‰j        ‰|f<   t#          j        t#          j        d|z
  |¦  «        ‰	|¦  «        g‰j        ‰|f<   d S d S d S d S )Nr:   r   )rf  rg  ÚeqÚtruebrÚfalsebrÚnerá   rd  rí   re  r[   r   r]   rj   rÅ  Ú_make_assert_equivr¼   r   ÚAssignrö   rˆ  )Úcond_defÚbrÚotherbrÚcond_valÚlhs_typÚrhs_typrÅ  rI   ÚassertsÚcond_varrÖ   rª  r¤  r¡  rŸ   s            €€€€€€rX   Úhandle_call_binopz6ArrayAnalysis._analyze_inst.<locals>.handle_call_binop¬  s�  ø€ Ø�Ø”;¥(¤+Ò-Ð-Øœ�BØ"œl�GØ �H�HØ”[¥H¤KÒ/Ð/Øœ�BØ"œk�GØ �HØœ, x¤|Ô'8Ô9�Øœ, x¤|Ô'8Ô9�Ø‘>å" 7­E¬MÑ:Ô:ð "õ ' wµ´Ñ>Ô>ð "õ # 7­E¬OÑ<Ô<ð "õ ' wµ´Ñ@Ô@ð "ð œ(�CØ$œL¨(¬,Ð7�DØ"×5Ò5Ø˜s I¨tñô �Gð —N’NÝœ	¥"¤(¨8°SÑ"9Ô"9¸8ÀSÑIÔIñô ð ð 29�D”M 5¨" +Ñ.åœ	¥"¤(¨1¨x©<¸Ñ"=Ô"=¸xÈÑMÔMð7�D”M 5¨'Ð"2Ñ3Ð3Ð3ð' "�>�>�>�>�>rZ   )Úlhs_onlyc                 ó,   — t          | t          ¦  «        S rh   )r[   rô   )r°   s    rX   ú<lambda>z-ArrayAnalysis._analyze_inst.<locals>.<lambda>à  s   € ­z¸!½SÑ/AÔ/A€ rZ   r`  r]  )Ir   rº   r»   r[   r   rÍ  Útargetrá   rí   r   ri   rõ   r÷   rb  Ú_analyze_exprr   r‚  r¾  r½  Úextendró   rö   ÚGlobalr¸   r“   rË   ÚArgÚ
containersÚUniTupleÚdtyper]   ÚTuplerÅ  r}  r?  ri  r±   rK  r  r€  rj   r*  Ú_gen_shape_callrx   rÒ   rw  rx  r;  Ú	index_varr   Ú_index_to_shaper(  ry  Ú_broadcast_assert_shapesÚBranchÚcondr   rÐ   rô   r¼   rÏ   ÚfilterÚ
differencer  rc  ÚfuncÚboolrI   rÊ  rÉ  r‰  rø   Úarray_analysis_extensions)'rŸ   r¤  r¡  rÖ   rª  r<  r«  r¬  rd  rù   rs   ÚresultÚgvalueÚlhs_indÚneeds_definer;  Útarget_shapeÚvalue_shapeÚ
target_typÚtarget_ndimÚshapesrð   Úbroadcast_resultrÔ  r„   rÖ  rÎ  Úequivsrâ   rí   Úvar_defÚdefvarsÚ	defconstsÚ	glbl_boolÚ	conditionÚ	pruned_brr2   rÕ  rÅ  s'   `````                                @@rX   r°  zArrayAnalysis._analyze_instý  s4  øøøøøøø€ ØˆØˆÝÔ! QÒ&Ð&Ý�/ 4Ñ(Ô(Ð(Ý�d�BœIÑ&Ô&ñ A	?Ø”+ˆCØ”,˜sœxÔ(ˆCØˆEÝ˜#�uÔ4Ñ5Ô5ð ''¸#¼(Àaº-¸-Ø�‘Ý˜DœJ­¬Ñ0Ô0ð %'Ø×+Ò+¨E°9¸d¼jÈ#ÑNÔN�Øð 	:Ý�J v­}Ô/JÑKÔKÑLÔLÐLØ &¤-Ð/Ð/Ø &¤¨gÔ 6˜Ø ¤Ð-Ð-ØŸ
š
 6¤=°Ô#7Ñ8Ô8Ð8Ø ¤Ð.Ð.ØŸš F¤M°&Ô$9Ñ:Ô:Ð:Ø ¤Ð-Ð-Ø%+¤]°5Ô%9˜œ
ùÝ˜DœJ­¬µ´Ð(:Ñ;Ô;ð 'Øœ
�‘Ý˜DœJ­¬	Ñ2Ô2ð 'ØœÔ)�õ ˜v¥uÑ-Ô-ð &ÝÐCÐC¸FÐCÑCÔCÑCÔCð&à"�E�EÝ ­Ñ,Ô,ð &Ø#˜I�EøÝ˜DœJ­¬Ñ/Ô/ð 'å˜s¥EÔ$4Ô$=Ñ>Ô>ð'å" 3¤9­e¬mÑ<Ô<ð'ð !œJ�E�Eå˜s¥EÔ$4Ô$:Ñ;Ô;ð'åð ,ð ,à!$¤ð,ñ ,ô ,ñ ô ð'ð !œJ�Eå˜%¥¤Ñ*Ô*ð !Ý˜eœk­5Ñ1Ô1ð !Øœ)�CÝ!Ð!HÐ!HÐ!HÐ!H¸E¼KÐ!HÑ!HÔ!HÑHÔH�E�EÝ ¤­SÑ1Ô1ð !Ø"˜H�E�Eà �E�EÝ˜E¥2¤6Ñ*Ô*ð !­zØ”˜UœZÔ(­%¬-ñ0ô 0ð !ð ˜��Ý˜E¥=Ñ1Ô1ð !ðð × Ò   i°´¸sÑCÔCÐCØ#×,Ò,¨S¬XÑ6Ô6�Ø˜b’=�=ð  ð Ô&ØÔ)¨5¬>Ð:ñð ˜D�yÐ å˜#�uÔ4Ñ5Ô5ð "àÐ%Ý" 5­"¬&Ñ1Ô1ð &å"Øœ U¤ZÔ0µ%Ô2BÔ2Lñô ð &ñ à�MÝ! %­Ñ/Ô/ð "õ # 5­"¬&Ñ1Ô1ð "ð !*× 3Ò 3°EÑ :Ô :ð	 "ð !×0Ò0Ø! 3¨¬°%¸ñô �Eøõ ˜C¥¤Ñ0Ô0ð Øð �Z¨¬	µ5´=ÑAÔAð Ø ×0Ò0Ø! 3­¨C©¬°%¸ñô �Eøõ ˜3¥Ô 0Ô 6Ñ7Ô7ð	åð (ð (à œYð(ñ (ô (ñ ô ð	ð ×,Ò,Ø˜s¥C¨¡H¤H¨e°Tñô �ðð  ˆLØÐ Ø(×5Ò5°c¸5ÑAÔA�Øð DØ× Ò   i°´¸sÑCÔCÐCùÝ˜�rÔ/µ´Ð<Ñ=Ô=ñ A	?å(¨­r¬zÑ:Ô:ÐN�”
�
ÀÄð õ ØÔ$ e¨Y¸¼ÀUñô ˆFð ð Ø˜2�v�Ø�aŒyÐ$Ý! $­Ô)9½2¼:Ð(FÑGÔGÐGÐGÐGØ# AœY�”
Ø˜A”YˆFØ!œ=¨Ô1ˆLØ˜œÐ%Ð%Ø”m EÔ*�Ø#×-Ò-¨d¬jÑ9Ô9ˆKØ˜bÒ Ð Ø×+Ò+¨D°,Ñ?Ô?Ð?Ø˜B�w�ØÐ(Ø!œ\¨$¬+Ô*:Ô;�
Ý�
 :­uÔ/DÑEÔEÑFÔFÐFØ(œo�Ø&¨Ð4�ØœÔ)¨4¬:¬?Ð;�Ø#'×#@Ò#@Ø˜9 d¤h°¸ñ$ô $Ð õ ˜Ð#3Ô#:Ð:Ñ;Ô;Ð;Ý˜Ð!1Ô!8Ð8Ñ9Ô9Ð9Ø(Ô/°Ô8�Ø*Ô1°%Ô8�Ý˜‘J”J�à" aÒ'Ð'Ð'Ð'Ø×+Ò+¨D°%Ñ8Ô8Ð8Ø˜W‘} bÐ(Ð(à˜B�w�Ý˜�bœiÑ(Ô(ñ Y	?ð!ð !ð !ð !ð !ð !ð !ð !ð !ð !ðF ”yˆHÝ�^¨T¬\¸8ÑDÔDˆHØñ à"×0Ò0°Ñ:Ô:�Ø�Ø"ð 
*ð 
*�DÝ! $­Ñ,Ô,ð 	*°¸¼Ð1EÐ1EÝ"'Ý*¨D¬L¸$Èð#ñ #ô #˜õ & g­r¬vÑ6Ô6ð 3Ø&-¤l˜GØ"ð 1Ø ŸKšK¨Ñ0Ô0Ð0øàŸš DÑ)Ô)Ð)Ð)Ý�fÐ%AÐ%AÀ4ÑHÔHÑIÔI�Ý ™IœI×0Ò0°Ñ9Ô9�	Ý�y‘>”> QÒ&Ð&Ý# I™œ¨qÔ1�H�HÝ˜‘\”\ QÒ&Ð&Ý$Ý&¨¬µd¸7±m´mÀAÔ6Fñ ô  �Hõ ˜(¥B¤GÑ,Ô,ð F°´ÀÒ1GÐ1GØ!Ð! (Ñ+Ô+Ð+Ñ+Ý˜H¥b¤gÑ.Ô.ð F°8´;À&Ò3HÐ3Hå!¥.°$´,ÀÄÑNÔN�	ØÐ(¨Y¬_ÅÐ-DÐ-DÝ˜8œ=Ñ)Ô)¨QÒ.Ð.Ý$)­.¸$¼,Ø*2¬-¸Ô*:ñ%<ô %<˜	à%Ð1Ý& yµ"´'Ñ:Ô:ð 2à )¤°Ò 7Ð 7Ø-Ð-¨iÑ8Ô8Ð8øå˜h­¬Ñ1Ô1ð .Ø'œ~�HÝ˜h­Ñ,Ô,ð Fµ
¸8ÅTÑ0JÔ0Jð Fà08Ð I ¤ ¸d¼k�IØ  DÔ$<Ð<Ð<ØÔ0°Ô;×BÒBÀ5ÑIÔIÐIÐIà?D¸g˜Ô0°Ñ;øå�$‰ZŒZÕ4Ð4Ð4å)­$¨t©*¬*Ô5ˆAØ˜˜$ 	¨4¬<¸Ñ>Ô>‰IˆC�à�DˆyÐrZ   c                 ó¢   — d                      |j        ¦  «        }	 t          | |¦  «        }n# t          $ r Y d S w xY wt	          |||||¦  «        S )Nz_analyze_op_{})rª   rc  ÚgetattrÚAttributeErrorr   )rŸ   r¡  rÖ   rj  rd  rk  rf  s          rX   rÛ  zArrayAnalysis._analyze_expr  se   € Ø ×'Ò'¨¬Ñ0Ô0ˆð	Ý˜˜uÑ%Ô%ˆBˆBøÝð 	ð 	ð 	Ø�4�4ð	øøøå�R˜ 	¨4°Ñ5Ô5Ð5s   œ- ­
;º;c                 ó\  — |j         dk    rC|                      |j        j        ¦  «        r$|                      |||j        |j        gi ¦  «        S |j         dk    r5|                     |j        ¦  «        }t                               |¬¦  «        S |j         dv r?|                      |j        j        ¦  «        r t                               |j        ¬¦  «        S |                      |j        ¦  «        r»t          |j        j        | j
        ¦  «        }||j         f| j        v r-t                               | j        ||j         f         ¬¦  «        S | j        |j                 }g }|                      |||j        d |¦  «        }|| j        ||j         f<   t                               ||¬¦  «        S d S )NÚTrs   ©rs   )ÚrealÚimag)rs   r¬  )ÚattrÚ_isarrayr÷   rí   Ú _analyze_op_call_numpy_transposerÅ  r(  r‚  r¾  r   r—  r‡  rá   rã  rõ   )	rŸ   r¡  rÖ   rj  rd  rs   Úcanonical_valuerù   r¬  s	            rX   Ú_analyze_op_getattrz!ArrayAnalysis._analyze_op_getattr  sª  € àŒ9˜ÒÐ §¢¨d¬j¬oÑ >Ô >ÐØ×8Ò8Ø�y $¤(¨T¬Z¨L¸"ñô ð ð ŒY˜'Ò!Ð!Ø×'Ò'¨¬
Ñ3Ô3ˆEÝ ×.Ò.°UÐ.Ñ;Ô;Ð;ØŒYÐ*Ð*Ð*¨t¯}ª}¸T¼Z¼_Ñ/MÔ/MÐ*õ !×.Ò.°T´ZÐ.Ñ@Ô@Ð@Ø�]Š]˜3œ8Ñ$Ô$ð 	KÝ1Ø”
” ¤ñô ˆOð   ¤Ð+¨tÔ/@Ð@Ð@Ý$×2Ò2ØÔ+¨_¸d¼iÐ,HÔIð 3ñ ô ð ð ”l 3¤8Ô,�Ø�Ø×,Ò,Ø˜s C¤H¨d°Dñô �ð CH�Ô! ?°D´IÐ">Ñ?Ý$×2Ò2¸ÀTÐ2ÑJÔJÐJàˆtrZ   c                 óB   — t                                |j        ¬¦  «        S ©Nr  )r‚  r¾  r÷   ©rŸ   r¡  rÖ   rj  rd  s        rX   Ú_analyze_op_castzArrayAnalysis._analyze_op_cast/  s   € Ý×*Ò*°´Ð*Ñ<Ô<Ð<rZ   c                 ó0  — |j         }| j        |j                 }t          |t          j        ¦  «        rbt          t          |¦  «        |j        k    ¦  «         t          | 	                    |¦  «        ¦  «         t                               |¬¦  «        S d S r  )r÷   rá   rí   r[   r   rj   r   rx   Úcountr*  r‚  r¾  )rŸ   r¡  rÖ   rj  rd  r"  rù   s          rX   Ú_analyze_op_exhaust_iterz&ArrayAnalysis._analyze_op_exhaust_iter2  s~   € ØŒjˆØŒl˜3œ8Ô$ˆÝ�c�5œ?Ñ+Ô+ð 	:Ý•C˜‘H”H ¤
Ò*Ñ+Ô+Ð+Ý�I×'Ò'¨Ñ,Ô,Ñ-Ô-Ð-Ý ×.Ò.°SÐ.Ñ9Ô9Ð9ØˆtrZ   Ústatic_literal_slice_partc                 ó&  — t          j        |t          |¦  «        |¦  «        }t          j        ||¦  «        }t	          j        |¦  «        }	|                     t          j        |||¬¦  «        ¦  «         |                      |||	|¦  «         ||	fS )N©r÷   rÚ  rÅ  )	r   ró   r   rö   r   rÃ  r¼   rÍ  r¹  )
rŸ   Úarg_valrÅ  r¡  ÚstmtsrÖ   rí   Ústatic_literal_slice_part_varÚstatic_literal_slice_part_valÚstatic_literal_slice_part_typs
             rX   Úgen_literal_slice_partz$ArrayAnalysis.gen_literal_slice_part;  s¨   € õ )+¬¨uµmÀDÑ6IÔ6IÈ3Ñ(OÔ(OÐ%Ý(*¬°¸#Ñ(>Ô(>Ð%Ý(-Ô(<¸WÑ(EÔ(EÐ%à�ŠÝŒIØ3Ø4Øðñ ô ñ	
ô 	
ð 	
ð 	�ŠØØ)Ø)Ø)ñ		
ô 	
ð 	
ð -Ð.KÐKÐKrZ   c                 óF   — |                       ||z
  ||||d¬¦  «        ^}}|S )NÚstatic_slice_sizer3  )r  )	rŸ   Úlhs_relÚrhs_relrÅ  r¡  r  rÖ   Úthe_varÚ_s	            rX   Úgen_static_slice_sizez#ArrayAnalysis.gen_static_slice_sizeX  s@   € ð ×1Ò1Ø�gÑØØØØØ$ð 2ñ 
ô 
ˆˆ�!ð ˆrZ   c
                 ó¦  — t          |t          ¦  «        rJ ‚t          j        |t	          d¦  «        |¦  «        }
t          j                             t          j        |||¬¦  «        }t          j
        }t          |||¦  «        | j        |<   |                     t          j        ||
|¬¦  «        ¦  «         |                      |	|
||¦  «         |
|fS )NÚexplicit_neg©rÅ  r  )r[   rË   r   ró   r   rb  r`  rg  rE   r   r^   r   r„  r¼   rÍ  r¹  )rŸ   ÚargÚarg_relÚarg_typÚsize_typrÅ  r¡  Údsizer  rÖ   Úexplicit_neg_varÚexplicit_neg_valÚexplicit_neg_typs                rX   Úgen_explicit_negzArrayAnalysis.gen_explicit_nege  sÜ   € õ ˜h­Ñ,Ô,Ð,Ð,Ð,åœ6 %­°~Ñ)FÔ)FÈÑLÔLÐÝœ7Ÿ=š=­¬°u¸cÀs˜=ÑKÔKÐõ !œ:ÐÝ+4Ø˜h¨ñ,
ô ,
ˆŒÐ'Ñ(ð 	�ŠÝŒIÐ,Ð5EÈ3ÐOÑOÔOñ	
ô 	
ð 	
ð 	�ŠØÐ'Ð)9Ð;Kñ	
ô 	
ð 	
ð  Ð!1Ð1Ð1rZ   c                 ó"  — d}t          |t          ¦  «        �rp|dk    rd}�nft          |t          ¦  «        r·d}t          ||¦  «        }||k    ržt          j        dk    rt          d¦  «         d}|                      |||	|
|¦  «        \  }}|dk    s|dk    sJ ‚|dk    r||j        d         f|_        n|j        d         |f|_        |j        |         }|}|                     |¦  «        }nš|dk     r”d}t          j        dk    rt          d¦  «         |  	                    ||||||	||
|¦	  «	        \  }}|dk    r||j        d         f|_        n|j        d         |f|_        |j        |         }|}|                     |¦  «        }||||||fS )NFr   Tr·   z.Replacing slice to hard-code known slice size.r:   z,Replacing slice due to known negative index.)
r[   rË   re   r   rº   r»   r  rI   rQ  r.  )rŸ   rd  rÒ  r  Ú	dsize_relÚreplacement_sliceÚslice_indexÚneed_replacementrÅ  r¡  r  rÖ   r)  r*  ÚknownÚwilÚliteral_varÚliteral_typr+  r-  s                       rX   Úupdate_replacement_slicez&ArrayAnalysis.update_replacement_slice„  s  € ð$ ˆÝ�g�sÑ#Ô#ñ @	1ð ˜!Š|ˆ|à�‘Ý˜I¥sÑ+Ô+ð :1Ø�å(¨°)Ñ<Ô<�ð ˜'’>�>ÝÔ-°Ò2Ð2ÝÐNÑOÔOÐOà'+Ð$Ø/3×/JÒ/JØ˜S %¨°	ñ0ô 0Ñ,�K ð '¨!Ò+Ð+¨{¸aÒ/?Ð/?Ð/?Ð/?Ø" aÒ'Ð'à'Ø-Ô2°1Ô5ð2Ð)Ô.Ð.ð .Ô2°1Ô5Ø'ð2Ð)Ô.ð
 ,Ô0°Ô=�CØ)�GØ'×/Ò/°Ñ4Ô4�GøØ˜1’�à#'Ð ÝÔ)¨QÒ.Ð.ÝÐHÑIÔIÐIØ59×5JÒ5JØØØØØØØØØñ
6ô 
6Ñ2Ð Ð"2ð  !Ò#Ð#à(Ø)Ô.¨qÔ1ð.Ð%Ô*Ð*ð *Ô.¨qÔ1Ø(ð.Ð%Ô*ð
 (Ô,¨[Ô9�Ø*�Ø#×+Ò+¨CÑ0Ô0�àØØØØØð
ð 	
rZ   c                 ó  ‡ ‡‡‡‡-‡.‡/— |j         Š-t          ‰ j        |¦  «        }t          ‰ j        |‰ j        ¬¦  «        \  }}t          |dk    o|dv ¦  «         t          t          |j        ¦  «        dk    ¦  «         |j        d         }	|j        d         }
‰ j        ‰j                 }‰ j        |	j                 }‰ j        |
j                 }t          j
        dk    r't          d|› d‰› d	|› d
|	› d|
› d|› d|› d|› �¦  «         t          j        |¦  «        }d}t          |t          j        ¦  «        r×t#          j        ‰t'          d¦  «        ‰-¦  «        }t#          j        d‰-¦  «        }|                     t#          j        ||‰-¬¦  «        ¦  «         ‰                      ‰|t          j        d¦  «        |¦  «         |}	t          j        d¦  «        }|	|j        d         f|_        d}t          j
        dk    rt          d¦  «         t          |t          j        ¦  «        r9‰}
|}|j        d         |
f|_        d}t          j
        dk    rt          d¦  «         ‰                     |	¦  «        }‰                     |
¦  «        }‰                     ‰¦  «        }t          j
        dk    rt          d|d|d|¦  «         ‰                      |	||||d|‰-‰|‰|‰¦  «        \  }	}}}}}‰                      |
||||d|‰-‰|‰|‰¦  «        \  }
}}}}}t          j
        dk    r t          d|¦  «         t          d|¦  «         |sd}n¿t#          j        ‰t'          d¦  «        ‰-¦  «        }t          j        t          j        f}‰ j        |j        j                                      ‰ j        |i ¦  «        }|‰ j        |<   |                     t#          j        ||‰-¬¦  «        ¦  «         ‰ j        |j                 ‰ j        |j        <   t          j
        dk    rt          dd|d|¦  «         |r=|r;t          j
        dk    rt          d¦  «         ‰                       ||‰-‰|‰¦  «        |fS |dk    rAt          |tB          ¦  «        r,‰ "                    ‰|d         ¦  «        r|d         dk    r‰dfS t          j        }|}t#          j        ‰t'          d¦  «        ‰-¦  «        }t"          j#         $                    tJ          j&        |
|	‰-¬¦  «        }tO          |||¦  «        ‰ j        |<   ‰                      ‰|||¦  «         ‰                     |¦  «        }t          j
        dk    rt          d|tQ          |¦  «        ¦  «         t#          j        ‰t'          d ¦  «        ‰-¦  «        Š/t#          j)        d!tT          ‰-¬¦  «        }tW          tT          ¦  «        } ‰ j         ,                    | ||fi ¦  «        Š.‰                      ‰‰/| |¦  «         ˆˆˆ-ˆˆ ˆ.ˆ/fd"„}! |!|	||¦  «        \  }"}#}$ |!|
||¦  «        \  }%}&}'|                     t#          j        ||‰-¬¦  «        ¦  «         |                     t#          j        |‰/‰-¬¦  «        ¦  «         |$�*|                     t#          j        |$|"‰-¬¦  «        ¦  «         |'�*|                     t#          j        |'|%‰-¬¦  «        ¦  «         t#          j        ‰t'          d#¦  «        ‰-¦  «        }(t"          j#         $                    tJ          j&        |%|"‰-¬¦  «        })tO          ||&|#¦  «        ‰ j        |)<   ‰                      ‰|(||)¦  «         |                     t#          j        |)|(‰-¬¦  «        ¦  «         t          |tB          ¦  «        råt          j
        dk    rt          d$‰j-        ¦  «         d}*‰j-         .                    ¦   «         D ]=\  }+},|+d         |d         k    r&‰ "                    |+d         |d         ¦  «        r|,}* nŒ>|*�Yt          j
        dk    rt          d%|*¦  «         ‰ /                    ||*d         ¦  «         ‰ /                    |(|*d         ¦  «         n||(f‰j-        |<   |(|fS )&a¹  Reason about the size of a slice represented by the "index"
        variable, and return a variable that has this size data, or
        raise GuardException if it cannot reason about it.

        The computation takes care of negative values used in the slice
        with respect to the given dimensional size ("dsize").

        Extra statements required to produce the result are appended
        to parent function's stmts list.
        r^  ÚsliceÚbuiltinsr·   r   r:   zslice_size index=z dsize=z index_def=z lhs=z rhs=z
 size_typ=z	 lhs_typ=z	 rhs_typ=FrO   r  Tz$Replacing slice because lhs is None.r  r  r0  z
lhs_known:z
rhs_known:Nr1  zafter rewriting negativesz'lhs and rhs known so return static sizer  r%  Úsize_relÚwrapra   c                 ó  •— |szt          j        ‰	t          d¦  «        ‰¦  «        }t          j        }t           j                             ‰| ‰gi ‰¦  «        }‰
                     ‰|||¦  «         ‰‰
j        |<   |||fS | |d fS )Nr"  )	r   ró   r   r   r^   rb  r]  r¹  r„  )r—   Úval_typr4  r"  Úvar_typÚ	new_valuer*  rÖ   rÅ  r¡  rŸ   rH   Úwrap_vars         €€€€€€€rX   Úgen_wrap_if_not_knownz7ArrayAnalysis.slice_size.<locals>.gen_wrap_if_not_known¢  sŠ   ø€ Øð 
,Ý”f˜U¥M°%Ñ$8Ô$8¸#Ñ>Ô>�Ýœ*�ÝœGŸLšL¨°C¸°<ÀÀSÑIÔI�	ð —’˜Y¨¨W°iÑ@Ô@Ð@Ø,/�”˜yÑ)Ø˜W iÐ0Ð0à˜W dÐ+Ð+rZ   Úpost_wrap_slice_sizezsize_rel is tuplezestablishing equivalence to)0rÅ  r   ri  r   rá   r   rx   rI   rí   r   rº   r»   r¦   r§   r[   r   r�   r   ró   r   rö   r¼   rÍ  r¹  rÃ  rQ  r8  r^   rë  Úget_call_typerF   r„  r"  r¸   rÉ   rb  r`  rg  rh  r   rø   rÝ  ra   r   Úresolve_function_typerJ  r4  rÒ   )0rŸ   r;  r*  rÖ   r¡  r  Ú	index_defrk  rl  rd  re  r)  rÒ  rÓ  r1  r3  Úzero_varrO   r  r  r0  Ú	lhs_knownÚ	rhs_knownÚreplacement_slice_varÚnew_arg_typsÚrs_calltypeÚ	slice_typÚorig_slice_typÚsize_varÚsize_valr<  Úwrap_defÚfntyrC  Úvar1Úvar1_typÚvalue1Úvar2Úvar2_typÚvalue2Úpost_wrap_size_varÚpost_wrap_size_valÚrel_map_entryÚrmeÚ	rme_tuplerÅ  rH   rB  s0   ` ```                                        @@@rX   r  zArrayAnalysis.slice_sizeá  s¨	  øøøøøøø€ ð Œiˆå" 4¤<°Ñ7Ô7ˆ	Ý'ØŒL˜)¨T¬\ð
ñ 
ô 
‰ˆˆxõ 	�˜Ò Ð= X°*Ð%=Ñ>Ô>Ð>Ý•�I”NÑ#Ô# qÒ(Ñ)Ô)Ð)ØŒn˜QÔˆØŒn˜QÔˆØ”< ¤
Ô+ˆØ”,˜sœxÔ(ˆØ”,˜sœxÔ(ˆåÔ! QÒ&Ð&Ýð M eð Mð M°Eð Mð MØ(ðMð MØ/2ðMð MØ9<ðMð Mà&ðMð Mà18ðMð MàCJðMð Mñ Nô Nð Nõ !œM¨)Ñ4Ô4ÐØ Ðõ �g�uœ~Ñ.Ô.ð 
	>Ý”v˜e¥]°6Ñ%:Ô%:¸CÑ@Ô@ˆHÝ”8˜A˜sÑ#Ô#ˆDØ�LŠL�œ¨°hÀCÐHÑHÔHÑIÔIÐIØ�LŠL˜ H­eÔ.BÀ1Ñ.EÔ.EÀtÑLÔLÐLØˆCÝÔ*¨1Ñ-Ô-ˆGØ&)Ð+<Ô+AÀ!Ô+DÐ%EÐÔ"Ø#ÐÝÔ%¨Ò*Ð*ÝÐ<Ñ=Ô=Ð=õ �g�uœ~Ñ.Ô.ð 	>ØˆCØˆGØ&7Ô&<¸QÔ&?ÀÐ%EÐÔ"Ø#ÐÝÔ%¨Ò*Ð*ÝÐ<Ñ=Ô=Ð=à×#Ò# CÑ(Ô(ˆØ×#Ò# CÑ(Ô(ˆØ×%Ò% eÑ,Ô,ˆ	ÝÔ! QÒ&Ð&ÝØ˜7 I¨w¸ÀYñô ð ð ×)Ò)ØØØØØØØØØØØØØñ
ô 
ñ	
ØØØØØØð. ×)Ò)ØØØØØØØØØØØØØñ
ô 
ñ	
ØØØØØØõ  Ô! QÒ&Ð&Ý�, 	Ñ*Ô*Ð*Ý�, 	Ñ*Ô*Ð*ð  ð 	PØ$(Ð!Ð!õ %'¤FØ•}Ð%8Ñ9Ô9¸3ñ%ô %Ð!õ "œJ­¬
Ð3ˆLØœ, y¤~Ô':Ô;×IÒIØ”˜l¨Bñô ˆKð 1<ˆDŒNÐ,Ñ-Ø�LŠLÝ”	Ø+Ø0Øðñ ô ñô ð ð 8<´|ÀEÄJÔ7OˆDŒLÐ.Ô3Ñ4åÔ! QÒ&Ð&ÝØ+ØØØØñô ð ð ð 	˜ð 	ÝÔ%¨Ò*Ð*ÝÐ?Ñ@Ô@Ð@à×*Ò*Ø˜W c¨5°%¸ñô ð &ð	ð ð �qŠLˆLÝ˜7¥EÑ*Ô*ð à×"Ò" 5¨'°!¬*Ñ5Ô5ð ð ˜”
˜a’�à˜$�;Ðå”Jˆ	Ø"ˆå”6˜%¥¨|Ñ!<Ô!<¸cÑBÔBˆÝ”7—=’=¥¤¨s°C¸S�=ÑAÔAˆÝ#,¨Y¸ÀÑ#IÔ#IˆŒ�xÑ Ø�Š�Y ¨)°XÑ>Ô>Ð>Ø×$Ò$ XÑ.Ô.ˆÝÔ! QÒ&Ð&Ý�*˜h­¨X©¬Ñ7Ô7Ð7å”6˜%¥¨vÑ!6Ô!6¸Ñ<Ô<ˆÝ”9˜\­:¸3Ð?Ñ?Ô?ˆÝ"¥:Ñ.Ô.ˆØŒl×0Ò0Ø�> 8Ð,¨bñ
ô 
ˆð 	�Š�Y ¨$°Ñ9Ô9Ð9ð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð "7Ð!6°s¸GÀYÑ!OÔ!OÑˆˆh˜Ø!6Ð!6°s¸GÀYÑ!OÔ!OÑˆˆh˜à�Š•R”Y X°hÀCÐHÑHÔHÑIÔIÐIØ�Š•R”Y X°hÀCÐHÑHÔHÑIÔIÐIØÐØ�LŠL�œ¨¸À#ÐFÑFÔFÑGÔGÐGØÐØ�LŠL�œ¨¸À#ÐFÑFÔFÑGÔGÐGåœVØ•=Ð!7Ñ8Ô8¸#ñ
ô 
Ðõ  œWŸ]š]­8¬<Ø+/Ø+/Ø/2ð +ñ 4ô 4Ðõ .7Ø�x ñ.
ô .
ˆŒÐ)Ñ*ð 	�ŠØÐ)¨9Ð6Hñ	
ô 	
ð 	
ð 	�ŠÝŒIØ(Ð1CÈðñ ô ñ	
ô 	
ð 	
õ �h¥Ñ&Ô&ð 	MÝÔ%¨Ò*Ð*ÝÐ)¨9Ô+<Ñ=Ô=Ð=Ø ˆMØ"+Ô"3×"9Ò"9Ñ";Ô";ð ð ‘��YØ�q”6˜X aœ[Ò(Ð(¨Y×-?Ò-?Ø˜”F˜H QœKñ.ô .Ð(ð %.�MØ�EøàÐ(õ Ô)¨QÒ.Ð.ÝÐ7¸ÑGÔGÐGØ×&Ò& x°¸qÔ1AÑBÔBÐBØ×&Ò&Ð'9¸=ÈÔ;KÑLÔLÐLÐLð 08Ð9KÐ.L�	Ô! (Ñ+à!Ð#8Ð8Ð8rZ   c                 óê  ‡ ‡‡‡— ‰ j         |j                 }t          t          |t          j        ¦  «        ¦  «         ‰ j         |j                 }‰                     |¦  «        }‰                     |¦  «        }t          |t          j        ¦  «        r|f}	|f}
nmt          t          |t          j        ¦  «        ¦  «         t          ‰ j
        |¦  «        \  }
}t          |dk    ¦  «         t          ˆ fd„|
D ¦   «         ¦  «        }	t          t          |¦  «        t          |	¦  «        cxk    ot          |¦  «        k    nc ¦  «         g Šˆˆˆ ˆfd„}g }g }d}t          |	|||
¦  «        D ][\  }}}} ||||¦  «        \  }}|                     |¦  «         |�d}|                     |¦  «         ŒF|                     |¦  «         Œ\|rºt          |¦  «        dk    ržt          j        ‰t#          d¦  «        |d	         j        ¦  «        }t          j                             ||d	         j        ¦  «        }‰                     t          j        |||d	         j        ¬
¦  «        ¦  «         |‰ j         |j        <   n|d	         }nd}t          |¦  «        }t          t-          d„ |D ¦   «         ¦  «         ¦  «         t          d„ |D ¦   «         ¦  «        }|t.                               |‰¬¦  «        fS )a„  For indexing like var[index] (either write or read), see if
        the index corresponds to a range/slice shape.
        Returns a 2-tuple where the first item is either None or a ir.Var
        to be used to replace the index variable in the outer getitem or
        setitem instruction.  The second item is also a tuple returning
        the shape and prepending instructions.
        Úbuild_tuplec              3   ó<   •K  — | ]}‰j         |j                 V — Œd S rh   ©rá   rí   r¶   s     €rX   rn   z0ArrayAnalysis._index_to_shape.<locals>.<genexpr>þ  s,   øè è € Ð?Ð?°a˜Tœ\¨!¬&Ô1Ð?Ð?Ð?Ð?Ð?Ð?rZ   c                 óÄ   •— t          | t          j        ¦  «        r‰                     ||‰‰‰¦  «        S t          | t          j        ¦  «        rdS t          d¦  «         d S )Nr{  F)r[   r   rk   r  rn  r   )rù   r;  r*  rÖ   r¡  rŸ   r  s      €€€€rX   Úto_shapez/ArrayAnalysis._index_to_shape.<locals>.to_shape  s[   ø€ Ý˜#�uœÑ/Ô/ð Ø—’ u¨e°YÀÀuÑMÔMÐMÝ˜C¥¤Ñ.Ô.ð Ø!�zõ ˜‘”���rZ   FNTr:   Úreplacement_build_tupler   r  c              3   ó   K  — | ]}|d u V — Œ	d S rh   rd   r   s     rX   rn   z0ArrayAnalysis._index_to_shape.<locals>.<genexpr>?  s&   è è € Ð1Ð1 a˜˜T˜	Ð1Ð1Ð1Ð1Ð1Ð1rZ   c              3   ó   K  — | ]}|®|V — Œ	d S rh   rd   r   s     rX   rn   z0ArrayAnalysis._index_to_shape.<locals>.<genexpr>@  s"   è è € Ð8Ð8˜A¨!¨-�a¨-¨-¨-¨-Ð8Ð8rZ   ©rs   r«  )rá   rí   r   r[   r   ri   r,  rk   rj   r   ri  r¸   rx   ry   r¼   r   ró   r   rÅ  rb  r`  rÍ  r“   r‚  r¾  )rŸ   r¡  rÖ   r"  Úind_varrù   Úind_typÚ	ind_shapeÚ	var_shapeÚseq_typsÚseqrc  rd  Ú
shape_listÚindex_var_listÚreplace_indexrM   r*  Úorig_indÚ
shape_partÚindex_var_partÚreplacement_build_tuple_varÚnew_build_tuplers   r  s   ```                     @rX   rå  zArrayAnalysis._index_to_shapeê  sH  øøøø€ ð Œl˜3œ8Ô$ˆÝ•
˜3¥Ô 5Ñ6Ô6Ñ7Ô7Ð7Ø”,˜wœ|Ô,ˆØ×(Ò(¨Ñ1Ô1ˆ	Ø×(Ò(¨Ñ-Ô-ˆ	Ý�g�uœÑ/Ô/ð 	@Ø�zˆHØ�*ˆCˆCå•J˜w­¬Ñ8Ô8Ñ9Ô9Ð9Ý)¨$¬,¸Ñ@Ô@‰GˆC�Ý�B˜-Ò'Ñ(Ô(Ð(ÝÐ?Ð?Ð?Ð?¸3Ð?Ñ?Ô?Ñ?Ô?ˆHÝ•�I‘”¥# h¡-¤-ÐAÐAÒAÐAµ3°y±>´>ÒAÐAÐAÐAÑBÔBÐBØˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ˆ
ØˆØˆÝ,/°Ø09Ø09Ø03ñ-5ô -5ð 	0ð 	0Ñ(ˆS�$˜˜xð
 *2¨°#°t¸UÑ)CÔ)CÑ&ˆJ˜Ø×Ò˜jÑ)Ô)Ð)ð
 Ð)à $�Ø×%Ò% nÑ5Ô5Ð5Ð5à×%Ò% hÑ/Ô/Ð/Ð/ð ð 	/å�>Ñ"Ô" QÒ&Ð&å.0¬fØÝ!Ð";Ñ<Ô<Ø˜a”LÔ$ñ/ô /Ð+õ #%¤'×"5Ò"5Ø" I¨a¤LÔ$4ñ#ô #�ð —’Ý”IØ-Ø:Ø% aœLÔ,ðñ ô ñô ð ð BI�”Ð8Ô=Ñ>Ð>à.<¸QÔ.?Ð+Ð+à*.Ð'å�jÑ!Ô!ˆÝ•CÐ1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1Ð1Ñ2Ô2Ð2ÝÐ8Ð8 Ð8Ñ8Ô8Ñ8Ô8ˆØ+Ý×+Ò+°%¸UÐ+ÑCÔCðEð 	ErZ   c                 ó€   — |                       |||j        |j        ¦  «        }|d         �|d         |_        |d         S r[  )rå  r÷   r;  )rŸ   r¡  rÖ   rj  rd  rî  s         rX   Ú_analyze_op_getitemz!ArrayAnalysis._analyze_op_getitemD  s>   € Ø×%Ò% e¨Y¸¼
ÀDÄJÑOÔOˆØ�!Œ9Ð Ø œˆDŒJØ�aŒyÐrZ   c                 ó|  — |j         }| j        |j                 }t          |t          j        ¦  «        s?|                      |||j         |j        ¦  «        }|d         �|d         |_        |d         S |                     |¦  «        }t          |j	        t          ¦  «        rKt          |j	        t          |¦  «        k     ¦  «         t                               ||j	                 ¬¦  «        S t          |j	        t          ¦  «        r&t                               ||j	                 ¬¦  «        S t          d¦  «         d S )Nr   r:   r  F)r÷   rá   rí   r[   r   rj   rå  rä  r,  r;  rË   r   rx   r‚  r¾  r:  )	rŸ   r¡  rÖ   rj  rd  r"  rù   rî  rs   s	            rX   Ú_analyze_op_static_getitemz(ArrayAnalysis._analyze_op_static_getitemJ  s  € ØŒjˆØŒl˜3œ8Ô$ˆÝ˜#�uœÑ/Ô/ð 	Ø×)Ò)Ø�y $¤*¨d¬nñô ˆFð �aŒyÐ$Ø!'¨¤�”Ø˜!”9ÐØ×$Ò$ SÑ)Ô)ˆÝ�d”j¥#Ñ&Ô&ð 	HÝ�D”J¥ U¡¤Ò+Ñ,Ô,Ð,Ý ×.Ò.°U¸4¼:Ô5FÐ.ÑGÔGÐGÝ˜œ
¥EÑ*Ô*ð 	HÝ ×.Ò.°U¸4¼:Ô5FÐ.ÑGÔGÐGÝ�‰ŒˆˆˆrZ   c                 óä   — t          |j        t          v ¦  «         |                      |j        j        ¦  «        s|j        t          j        k    r t           	                    |j        ¬¦  «        S d S r  )
r   rf  ÚUNARY_MAP_OPr  r÷   rí   rg  rE   r‚  r¾  r  s        rX   Ú_analyze_op_unaryzArrayAnalysis._analyze_op_unary\  s^   € Ý�”�<Ð'Ñ(Ô(Ð(ð �=Š=˜œœÑ)Ô)ð 	A¨T¬W½¼Ò-DÐ-DÝ ×.Ò.°T´ZÐ.Ñ@Ô@Ð@ØˆtrZ   c                 ó–   — t          |j        t          v ¦  «         |                      |||j        |j        |j        g|j        ¦  «        S rh   )r   rf  ÚBINARY_MAP_OPÚ_analyze_broadcastrÅ  rd  re  r  s        rX   Ú_analyze_op_binopzArrayAnalysis._analyze_op_binopd  sG   € Ý�”�=Ð(Ñ)Ô)Ð)Ø×&Ò&Ø�9˜dœh¨¬°4´8Ð(<¸d¼gñ
ô 
ð 	
rZ   c                 ó–   — t          |j        t          v ¦  «         |                      |||j        |j        |j        g|j        ¦  «        S rh   )r   rf  ÚINPLACE_BINARY_MAP_OPr€  rÅ  rd  re  r  s        rX   Ú_analyze_op_inplace_binopz'ArrayAnalysis._analyze_op_inplace_binopj  sH   € Ý�”Õ0Ð0Ñ1Ô1Ð1Ø×&Ò&Ø�9˜dœh¨¬°4´8Ð(<¸d¼gñ
ô 
ð 	
rZ   c                 ób   — |                       |||j        |                     ¦   «         d ¦  «        S rh   )r€  rÅ  Ú	list_varsr  s        rX   Ú_analyze_op_arrayexprz#ArrayAnalysis._analyze_op_arrayexprp  s1   € Ø×&Ò&Ø�9˜dœh¨¯ªÑ(8Ô(8¸$ñ
ô 
ð 	
rZ   c                 ón  ‡— ‰j         D ]d}t          |t          j        ¦  «        rHt          | j        |j                 t          j        ¦  «        r| j        |j                 j        dk    r d S Œeg }‰j         D ]6}t          t          | j        |¦  «        }|�|                     |¦  «         Œ5 n\t          ˆfd„|D ¦   «         ¦  «        }t                               |t          j        t          |¦  «        ‰j        ¦  «        ¬¦  «        S t                               t          ‰j         ¦  «        ¬¦  «        S )Nr:   c                 óD   •— g | ]}t          j        |‰j        ¦  «        ‘ŒS rd   )r   rö   rÅ  )rl   r°   rj  s     €rX   rÅ   z9ArrayAnalysis._analyze_op_build_tuple.<locals>.<listcomp>Š  s'   ø€ Ð?Ð?Ð?°1�œ ! T¤XÑ.Ô.Ð?Ð?Ð?rZ   ©rs   re  r  )r4  r[   r   ró   rá   rí   r   ri   rõ   r   r   ri  r¼   r¸   r‚  r¾  rö   rÅ  )	rŸ   r¡  rÖ   rj  rd  r°   Úconstsr"  Úouts	      `     rX   Ú_analyze_op_build_tuplez%ArrayAnalysis._analyze_op_build_tupleu  s-  ø€ ð
 ”ð 	ð 	ˆAå˜1�bœfÑ%Ô%ðå˜tœ|¨A¬FÔ3µUÔ5JÑKÔKðð ”L ¤Ô(Ô-°Ò1Ð1à�t�tøàˆØ”:ð 	ð 	ˆCÝ•j $¤,°Ñ4Ô4ˆAØˆ}Ø—’˜aÑ Ô Ð Ð à�åÐ?Ð?Ð?Ð?¸Ð?Ñ?Ô?Ñ@Ô@ˆCÝ ×.Ò.ØÝ”H�U 6™]œ]¨D¬HÑ5Ô5ð /ñ ô ð õ
 ×*Ò*µ°t´zÑ1BÔ1BÐ*ÑCÔCÐCrZ   c           
      ób  — ddl m} |j        }t          | j        |¦  «        }t          |t          j        t          j        f¦  «        rAt          |j
        ¦  «        r-t                               t          |j        ¦  «        ¬¦  «        S t          |t          j        t          j        f¦  «        rRt          |j
        |¦  «        r=|j        }|                      |||j
        |j        |t#          |j        ¦  «        ¦  «        S t'          | j        || j        ¬¦  «        \  }	}
d}t          |
t          j        ¦  «        r:t          | j        |
j                 t.          j        ¦  «        r|
g|j        z   }d}
d}n|j        }d                     |
|	¦  «                             d	d
¦  «        }	|	t6          v r|                      |||j        |d ¦  «        S 	 t;          | |	¦  «        }n# t<          $ r Y d S w xY wt?          ||||j        |t#          |j        ¦  «        ¬¦  «        }|r|dd …         |_        |S )Nr   )ÚStencilFuncr  r^  FÚnumpyTz_analyze_op_call_{}_{}ú.r!  )r¡  rÖ   rÅ  rI   Úkwsr:   ) Únumba.stencils.stencilr�  rë  r   ri  r[   r   rÝ  ÚFreeVarr   r÷   r‚  r¾  r¸   rI   Ú_analyze_stencilrÅ  Údictr’  r   rá   ró   rí   r   ri   rª   ÚreplaceÚUFUNC_MAP_OPr€  r   r  r   )rŸ   r¡  rÖ   rj  rd  r�  ÚcalleeÚ
callee_defrI   rk  rl  Úadded_mod_namerf  rî  s                 rX   Ú_analyze_op_callzArrayAnalysis._analyze_op_call’  sd  € Ø6Ð6Ð6Ð6Ð6Ð6à”ˆÝ# D¤L°&Ñ9Ô9ˆ
ÝØ�œ¥B¤JÐ/ñ
ô 
ð 	Gå! *Ô"2Ñ3Ô3ð	Gõ !×.Ò.µU¸4¼9Ñ5EÔ5EÐ.ÑFÔFÐFÝ�j¥2¤9­b¬jÐ"9Ñ:Ô:ð 	½zØÔ˜kñ@
ô @
ð 	ð ”9ˆDØ×(Ò(ØØØÔ Ø”ØÝ�T”X‘”ñô ð õ (ØŒL˜$¨¬ð
ñ 
ô 
‰ˆˆxð ˆå�h¥¤Ñ'Ô'ð 	­JØŒL˜œÔ'­Ô)>ñ-
ô -
ð 	ð �: ¤	Ñ)ˆDØˆHà!ˆNˆNà”9ˆDØ(×/Ò/°¸%Ñ@Ô@×HÒHØ�ñ
ô 
ˆð •LÐ Ð Ø×*Ò*¨5°)Ø+/¬8°T¸4ñAô Að AðÝ˜T 5Ñ)Ô)��øÝ!ð ð ð Ø�t�tðøøøåØØØ#Ø”HØÝ˜œ‘N”Nðñ ô ˆFð ð %Ø    œH�”	ØˆMs   ÇG! Ç!
G/Ç.G/c                 ó>  — t          t          |¦  «        dk    ¦  «         |d         }| j        |j                 }t          t	          |t
          j        ¦  «        ¦  «         |                     |¦  «        }t           	                    |d         |d         ¬¦  «        S )Nr:   r   rŠ  )
r   rx   rá   rí   r[   r   ri   r,  r‚  r¾  )	rŸ   r¡  rÖ   rÅ  rI   r’  r"  rù   rs   s	            rX   Ú_analyze_op_call_builtins_lenz+ArrayAnalysis._analyze_op_call_builtins_lenÑ  s€   € å•�D‘	”	˜Q’ÑÔÐØ�1ŒgˆØŒl˜3œ8Ô$ˆÝ•
˜3¥Ô 5Ñ6Ô6Ñ7Ô7Ð7Ø×$Ò$ SÑ)Ô)ˆÝ×*Ò*°°q´¸uÀQ¼xÐ*ÑHÔHÐHrZ   c                 ó*   —  |j         |dd …         Ž  d S ©Nr:   )rÒ   ©rŸ   r¡  rÖ   rÅ  rI   r’  s         rX   Ú:_analyze_op_call_numba_parfors_array_analysis_assert_equivzHArrayAnalysis._analyze_op_call_numba_parfors_array_analysis_assert_equivÚ  s!   € ð 	ˆ	Ô  Q R R¤Ð)Ð)ØˆtrZ   c                 ó   — t          t          |¦  «        dk    ¦  «         |d         j        }|d         j        }|                     |¦  «        }|                     |¦  «        }	||	f|j        v rg|j        ||	f         }
t          |
|j        v ¦  «         |j        |
         }t          |g k    ¦  «         t                               |d         f¬¦  «        S t                               t          ||	¦  «        ¬¦  «        S )zX Analyze wrap_index calls added by a previous run of
            Array Analysis
        r·   r   r:   r  )	r   rx   rí   r³   rK  rã   r‚  r¾  r}  )rŸ   r¡  rÖ   rÅ  rI   r’  r  r€  Úslice_eqÚdim_eqÚwrap_indr  s               rX   Ú8_analyze_op_call_numba_parfors_array_analysis_wrap_indexzFArrayAnalysis._analyze_op_call_numba_parfors_array_analysis_wrap_indexà  sý   € õ 	•�D‘	”	˜Q’ÑÔÐà˜!”W”\ˆ
à˜”7”<ˆà×,Ò,¨ZÑ8Ô8ˆØ×*Ò*¨8Ñ4Ô4ˆð �fÐ Ô!3Ð3Ð3Ø Ô)¨8°VÐ*<Ô=ˆHÝ�H 	Ô 4Ð4Ñ5Ô5Ð5ØÔ% hÔ/ˆBÝ�B˜"’HÑÔÐå ×.Ò.°b¸´e°XÐ.Ñ>Ô>Ð>õ
 !×.Ò.Ý# H¨fÑ5Ô5ð /ñ ô ð rZ   c                 ó¼   — d }t          |¦  «        dk    r	|d         }nd|v r|d         }|rt                               |¬¦  «        S t          j        d|¬¦  «        ‚)Nr   rs   r  z'Must specify a shape for array creationr%  )rx   r‚  r¾  r   ÚUnsupportedRewriteError)rŸ   r¡  rÖ   rÅ  rI   r’  Ú	shape_vars          rX   Ú_analyze_numpy_create_arrayz)ArrayAnalysis._analyze_numpy_create_arrayÿ  ss   € Øˆ	Ýˆt‰9Œ9�qŠ=ˆ=Ø˜QœˆIˆIØ˜ˆ^ˆ^Ø˜GœˆIØð 	@Ý ×.Ò.°YÐ.Ñ?Ô?Ð?ÝÔ,Ø5Øð
ñ 
ô 
ð 	
rZ   c                 ó4   — |                       |||||¦  «        S rh   ©r«  r¡  s         rX   Ú_analyze_op_call_numpy_emptyz*ArrayAnalysis._analyze_op_call_numpy_empty	  ó%   € Ø×/Ò/Ø�9˜c 4¨ñ
ô 
ð 	
rZ   c                 ó4   — |                       |||||¦  «        S rh   r­  r¡  s         rX   Ú7_analyze_op_call_numba_np_unsafe_ndarray_empty_inferredzEArrayAnalysis._analyze_op_call_numba_np_unsafe_ndarray_empty_inferred	  s'   € ð ×/Ò/Ø�9˜c 4¨ñ
ô 
ð 	
rZ   c                 ó4   — |                       |||||¦  «        S rh   r­  r¡  s         rX   Ú_analyze_op_call_numpy_zerosz*ArrayAnalysis._analyze_op_call_numpy_zeros	  r¯  rZ   c                 ó4   — |                       |||||¦  «        S rh   r­  r¡  s         rX   Ú_analyze_op_call_numpy_onesz)ArrayAnalysis._analyze_op_call_numpy_ones	  r¯  rZ   c                 óØ   — t          |¦  «        dk    r	|d         }n#d|v r	|d         }nt          j        d|¬¦  «        ‚d|v r	|d         }n|}t                               ||f¬¦  «        S )Nr   ÚNz,Expect one argument (or 'N') to eye functionr%  ÚMr  )rx   r   r©  r‚  r¾  )rŸ   r¡  rÖ   rÅ  rI   r’  r·  r¸  s           rX   Ú_analyze_op_call_numpy_eyez(ArrayAnalysis._analyze_op_call_numpy_eye"	  s†   € Ýˆt‰9Œ9�qŠ=ˆ=Ø�Q”ˆAˆAØ�CˆZˆZØ�C”ˆAˆAåÔ0Ø>Øðñ ô ð ð �#ˆ:ˆ:Ø�C”ˆAˆAàˆAÝ×*Ò*°!°Q°Ð*Ñ8Ô8Ð8rZ   c                 óv   — t          |¦  «        dk    sJ ‚|d         }t                               ||f¬¦  «        S ©Nr   r  ©rx   r‚  r¾  )rŸ   r¡  rÖ   rÅ  rI   r’  r·  s          rX   Ú_analyze_op_call_numpy_identityz-ArrayAnalysis._analyze_op_call_numpy_identity2	  s;   € õ �4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø�ŒGˆÝ×*Ò*°!°Q°Ð*Ñ8Ô8Ð8rZ   c                 óB  — t          |¦  «        dk    sJ ‚|d         }t          |t          j        ¦  «        sJ ‚| j        |j                 }t          |t          j        ¦  «        r¹|j        dk    rod|v r |d         }| 	                    |d¦  «        sd S | 
                    |¦  «        \  }	}
| 	                    |	|
¦  «        rt                               |	f¬¦  «        S n?|j        dk    r4| 
                    |¦  «        \  }	t                               |	|	f¬¦  «        S d S )Nr   r·   r7  r  r:   )rx   r[   r   ró   rá   rí   r   ri   rõ   rÉ   r,  r‚  r¾  )rŸ   r¡  rÖ   rÅ  rI   r’  rm   Úatypr7  rƒ   r„   s              rX   Ú_analyze_op_call_numpy_diagz)ArrayAnalysis._analyze_op_call_numpy_diag9	  s%  € õ �4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø�ŒGˆÝ˜!�RœVÑ$Ô$Ð$Ð$Ð$ØŒ|˜AœFÔ#ˆÝ�d�EÔ1Ñ2Ô2ð 	AØŒy˜AŠ~ˆ~Ø˜#�:�:Ø˜Cœ�AØ$×-Ò-¨a°Ñ3Ô3ð $Ø#˜tØ"×-Ò-¨aÑ0Ô0‘��AØ×%Ò% a¨Ñ+Ô+ð CÝ(×6Ò6¸a¸TÐ6ÑBÔBÐBðCà”˜a’�Ø ×+Ò+¨AÑ.Ô.‘�Ý$×2Ò2¸!¸Q¸Ð2Ñ@Ô@Ð@ØˆtrZ   c                 ób  — t          |¦  «        dk    sJ ‚|d         }| j        |j                 }t          |t          j        ¦  «        rt                               d¬¦  «        S t          |t          j        ¦  «        r0| 	                    |¦  «        rt                               |¬¦  «        S d S )Nr   )r:   r  )
rx   rá   rí   r[   r   r]   r‚  r¾  ri   r*  )rŸ   r¡  rÖ   rI   r’  r"  rù   s          rX   Ú_analyze_numpy_array_likez'ArrayAnalysis._analyze_numpy_array_likeN	  s¤   € Ý�4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø�1ŒgˆØŒl˜3œ8Ô$ˆÝ�c�5œ=Ñ)Ô)ð 	:Ý ×.Ò.°TÐ.Ñ:Ô:Ð:Ý˜�UÔ2Ñ3Ô3ð 	:¸	×8KÒ8KØñ9
ô 9
ð 	:õ !×.Ò.°SÐ.Ñ9Ô9Ð9ØˆtrZ   c                 ó`  — t          |¦  «        dk    sJ ‚|d         }| j        |j                 }t          |t          j        ¦  «        sJ ‚|j        dk    rW|                     |¦  «        rB|j        dk    rt           
                    ||¬¦  «        S t           
                    |¬¦  «        S d S )Nr:   r   ÚCrŠ  r  )rx   rá   rí   r[   r   ri   rõ   r*  Úlayoutr‚  r¾  )rŸ   r¡  rÖ   rÅ  rI   r’  r"  rù   s           rX   Ú_analyze_op_call_numpy_ravelz*ArrayAnalysis._analyze_op_call_numpy_ravelZ	  s¦   € Ý�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~Ø�1ŒgˆØŒl˜3œ8Ô$ˆÝ˜#�uÔ4Ñ5Ô5Ð5Ð5Ð5àŒ8�qŠ=ˆ=˜Y×0Ò0°Ñ5Ô5ˆ=ØŒz˜SÒ Ð õ %×2Ò2¸À#Ð2ÑFÔFÐFå$×2Ò2¸Ð2Ñ=Ô=Ð=àˆtrZ   c                 ó2   — |                       ||||¦  «        S rh   ©rÂ  r¡  s         rX   Ú_analyze_op_call_numpy_copyz)ArrayAnalysis._analyze_op_call_numpy_copyj	  s   € Ø×-Ò-¨e°YÀÀcÑJÔJÐJrZ   c                 ó2   — |                       ||||¦  «        S rh   rÈ  r¡  s         rX   Ú!_analyze_op_call_numpy_empty_likez/ArrayAnalysis._analyze_op_call_numpy_empty_likem	  ó   € ð ×-Ò-¨e°YÀÀcÑJÔJÐJrZ   c                 ó2   — |                       ||||¦  «        S rh   rÈ  r¡  s         rX   Ú!_analyze_op_call_numpy_zeros_likez/ArrayAnalysis._analyze_op_call_numpy_zeros_liker	  rÌ  rZ   c                 ó2   — |                       ||||¦  «        S rh   rÈ  r¡  s         rX   Ú _analyze_op_call_numpy_ones_likez.ArrayAnalysis._analyze_op_call_numpy_ones_likew	  rÌ  rZ   c                 ó2   — |                       ||||¦  «        S rh   rÈ  r¡  s         rX   Ú _analyze_op_call_numpy_full_likez.ArrayAnalysis._analyze_op_call_numpy_full_like|	  rÌ  rZ   c                 ó2   — |                       ||||¦  «        S rh   rÈ  r¡  s         rX   Ú%_analyze_op_call_numpy_asfortranarrayz3ArrayAnalysis._analyze_op_call_numpy_asfortranarray�	  rÌ  rZ   c                 ó¤  — t          |¦  «        }|dk    sJ ‚|dk    rS| j        |d         j                 }t          |t          j        ¦  «        r!t                               |d         ¬¦  «        S g }d}	t          dt          |¦  «        ¦  «        D ]p}
||
         }t          t          | j        |¦  «        }t          |t          j        ¦  «        r1|j        dk     r&|	dk    r|
}	ŒSd}t          j        ||j        ¬¦  «        ‚Œq|	dk    �r—|d         j        }t          j        |t'          d¦  «        |¦  «        }t          j        | j        |j        <   t          j        t          j                             |d         d	|¦  «        ||¦  «        }|                     |¦  «         t          dt          |¦  «        ¦  «        D ]Û}
|
|	k    rŒ	t          j        |t'          d¦  «        |¦  «        }t          j        | j        |j        <   t          j                             t4          j        |||
         |¦  «        }t          j        |||¦  «        }t9          t          j        t          j        t          j        ¦  «        | j        |<   |                     |¦  «         |}ŒÜ|||	<   t                               t=          |dd …         ¦  «        |¬
¦  «        S )Nr:   r·   r  r   r   z7The reshape API may only include one negative argument.r%  Úcalc_size_varrM   rh  )rx   rá   rí   r[   r   rj   r‚  r¾  r‹   r   r   ri  r   rö   r÷   r   r©  rÅ  ró   r   r^   rÍ  rb  r   r¼   r`  rg  Úfloordivr   r„  r¸   )rŸ   r¡  rÖ   rÅ  rI   r’  r„   rù   r  Úneg_one_indexÚ	arg_indexÚreshape_argÚreshape_arg_defrˆ   rÖ  Úinit_calc_varÚdiv_calc_size_varÚ	new_binopÚdiv_calcs                      rX   Ú_analyze_op_call_numpy_reshapez,ArrayAnalysis._analyze_op_call_numpy_reshape†	  s£  € Ý�‰IŒIˆØ�1ŠuˆuˆuˆuØ�Š6ˆ6Ø”,˜t Aœwœ|Ô,ˆCÝ˜#�uœÑ/Ô/ð BÝ$×2Ò2¸¸a¼Ð2ÑAÔAÐAð ˆØˆÝ˜q¥# d¡)¤)Ñ,Ô,ð 	ð 	ˆIØ˜yœ/ˆKÝ#¥N°D´LÀ+ÑNÔNˆOÝ˜/­2¬8Ñ4Ô4ð 	Ø"Ô(¨1Ò,Ð,Ø$¨Ò*Ð*Ø(1˜˜ð ,˜å$Ô<Ø [¤_ðñ ô ð øð ˜AÒÑð �q”'”+ˆCåœF 5­-¸Ñ*HÔ*HÈ#ÑNÔNˆMÝ/4¬zˆDŒL˜Ô+Ñ,åœIÝ”—’  Q¤¨°Ñ5Ô5°}Àcñô ˆMð �LŠL˜Ñ'Ô'Ð'õ # 1¥c¨$¡i¤iÑ0Ô0ð 2ð 2�	à Ò-Ð-ØÝ$&¤FØ�=¨Ñ9Ô9¸3ñ%ô %Ð!õ 8=´z�”Ð.Ô3Ñ4õ œGŸMšMÝÔ% }°d¸9´oÀsñô �	õ œ9 YÐ0AÀ3ÑGÔG�Ý,5Ý”J¥¤
­E¬Jñ-ô -�”˜yÑ)ð —’˜XÑ&Ô&Ð&Ø 1��ð #0ˆD�Ñå×*Ò*µ°t¸A¸B¸B´x±´ÀeÐ*ÑLÔLÐLrZ   c                 ó@  ‡ ‡
— |d         }‰ j         |j                 }t          |t          j        ¦  «        s
J d¦   «         ‚|                     |¦  «        Š
t          |¦  «        dk    r5t                               t          t          ‰
¦  «        ¦  «        ¬¦  «        S ˆ fd„|dd …         D ¦   «         }t          |d         t          ¦  «        rt          |d         ¦  «        }d |v rd S ˆ
fd„|D ¦   «         }	t                               t          |	¦  «        ¬¦  «        S )Nr   zInvalid np.transpose argumentr:   r  c                 óF   •— g | ]}t          t          ‰j        |¦  «        ‘ŒS rd   )r   r   ri  )rl   rm   rŸ   s     €rX   rÅ   zBArrayAnalysis._analyze_op_call_numpy_transpose.<locals>.<listcomp>Û	  s'   ø€ ÐEÐEÐE°q••j $¤,°Ñ2Ô2ÐEÐEÐErZ   c                 ó    •— g | ]
}‰|         ‘ŒS rd   rd   )rl   r�   rs   s     €rX   rÅ   zBArrayAnalysis._analyze_op_call_numpy_transpose.<locals>.<listcomp>à	  s   ø€ Ð&Ð&Ð&˜Aˆu�QŒxÐ&Ð&Ð&rZ   )rá   rí   r[   r   ri   r,  rx   r‚  r¾  r¸   Úreversedr  )rŸ   r¡  rÖ   rÅ  rI   r’  Úin_arrrù   ÚaxesÚretrs   s   `         @rX   r	  z.ArrayAnalysis._analyze_op_call_numpy_transposeÐ	  s!  øø€ ð �a”ˆØŒl˜6œ;Ô'ˆÝØ•Ô&ñ
ô 
ð 	+ð 	+à*ñ	+ô 	+ð 	+ð ×$Ò$ VÑ,Ô,ˆÝˆt‰9Œ9˜Š>ˆ>Ý ×.Ò.µU½8ÀE¹?¼?Ñ5KÔ5KÐ.ÑLÔLÐLØEÐEÐEÐE¸DÀÀÀ¼HÐEÑEÔEˆÝ�d˜1”g�uÑ%Ô%ð 	!Ý˜˜Qœ‘=”=ˆDØ�4ˆ<ˆ<Ø�4Ø&Ð&Ð&Ð& Ð&Ñ&Ô&ˆÝ×*Ò*µ°s±´Ð*Ñ<Ô<Ð<rZ   c                 ó|   — t          |¦  «        dk    r(t                               t          |¦  «        ¬¦  «        S d S r»  )rx   r‚  r¾  r¸   r¡  s         rX   Ú"_analyze_op_call_numpy_random_randz0ArrayAnalysis._analyze_op_call_numpy_random_randã	  s5   € õ ˆt‰9Œ9�qŠ=ˆ=Ý ×.Ò.µU¸4±[´[Ð.ÑAÔAÐAØˆtrZ   c                 ó4   — |                       |||||¦  «        S rh   )ré  r¡  s         rX   Ú#_analyze_op_call_numpy_random_randnz1ArrayAnalysis._analyze_op_call_numpy_random_randnê	  s'   € ð ×6Ò6Ø�9˜c 4¨ñ
ô 
ð 	
rZ   c                 ó¸   — d|v r!t                                |d         ¬¦  «        S t          |¦  «        |k    r!t                                ||         ¬¦  «        S d S )NrM   r  )r‚  r¾  rx   )rŸ   Úposr¡  rÖ   rI   r’  s         rX   Ú"_analyze_op_numpy_random_with_sizez0ArrayAnalysis._analyze_op_numpy_random_with_sizeñ	  sW   € ð �Sˆ=ˆ=Ý ×.Ò.°S¸´[Ð.ÑAÔAÐAÝˆt‰9Œ9�sŠ?ˆ?Ý ×.Ò.°T¸#´YÐ.Ñ?Ô?Ð?ØˆtrZ   c                 ó4   — |                       d||||¦  «        S rc   ©rî  r¡  s         rX   Ú"_analyze_op_call_numpy_random_ranfz0ArrayAnalysis._analyze_op_call_numpy_random_ranfú	  ó'   € ð ×6Ò6Øˆu�i  sñ
ô 
ð 	
rZ   c                 ó4   — |                       d||||¦  «        S rc   rð  r¡  s         rX   Ú+_analyze_op_call_numpy_random_random_samplez9ArrayAnalysis._analyze_op_call_numpy_random_random_sample
  rò  rZ   c                 ó4   — |                       d||||¦  «        S rc   rð  r¡  s         rX   Ú$_analyze_op_call_numpy_random_samplez2ArrayAnalysis._analyze_op_call_numpy_random_sample
  rò  rZ   c                 ó4   — |                       d||||¦  «        S rc   rð  r¡  s         rX   Ú$_analyze_op_call_numpy_random_randomz2ArrayAnalysis._analyze_op_call_numpy_random_random
  rò  rZ   c                 ó4   — |                       d||||¦  «        S rc   rð  r¡  s         rX   Ú-_analyze_op_call_numpy_random_standard_normalz;ArrayAnalysis._analyze_op_call_numpy_random_standard_normal
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú'_analyze_op_call_numpy_random_chisquarez5ArrayAnalysis._analyze_op_call_numpy_random_chisquare
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú%_analyze_op_call_numpy_random_weibullz3ArrayAnalysis._analyze_op_call_numpy_random_weibull$
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú#_analyze_op_call_numpy_random_powerz1ArrayAnalysis._analyze_op_call_numpy_random_power+
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú'_analyze_op_call_numpy_random_geometricz5ArrayAnalysis._analyze_op_call_numpy_random_geometric2
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú)_analyze_op_call_numpy_random_exponentialz7ArrayAnalysis._analyze_op_call_numpy_random_exponential9
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú%_analyze_op_call_numpy_random_poissonz3ArrayAnalysis._analyze_op_call_numpy_random_poisson@
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r   rð  r¡  s         rX   Ú&_analyze_op_call_numpy_random_rayleighz4ArrayAnalysis._analyze_op_call_numpy_random_rayleighG
  rò  rZ   c                 ó4   — |                       d||||¦  «        S ©Nr·   rð  r¡  s         rX   Ú$_analyze_op_call_numpy_random_normalz2ArrayAnalysis._analyze_op_call_numpy_random_normalN
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú%_analyze_op_call_numpy_random_uniformz3ArrayAnalysis._analyze_op_call_numpy_random_uniformU
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú"_analyze_op_call_numpy_random_betaz0ArrayAnalysis._analyze_op_call_numpy_random_beta\
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú&_analyze_op_call_numpy_random_binomialz4ArrayAnalysis._analyze_op_call_numpy_random_binomialc
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú_analyze_op_call_numpy_random_fz-ArrayAnalysis._analyze_op_call_numpy_random_fj
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú#_analyze_op_call_numpy_random_gammaz1ArrayAnalysis._analyze_op_call_numpy_random_gammaq
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú'_analyze_op_call_numpy_random_lognormalz5ArrayAnalysis._analyze_op_call_numpy_random_lognormalx
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú%_analyze_op_call_numpy_random_laplacez3ArrayAnalysis._analyze_op_call_numpy_random_laplace
  rò  rZ   c                 ó4   — |                       d||||¦  «        S r
  rð  r¡  s         rX   Ú%_analyze_op_call_numpy_random_randintz3ArrayAnalysis._analyze_op_call_numpy_random_randint†
  rò  rZ   c                 ó4   — |                       d||||¦  «        S )Né   rð  r¡  s         rX   Ú(_analyze_op_call_numpy_random_triangularz6ArrayAnalysis._analyze_op_call_numpy_random_triangular�
  rò  rZ   c           	      ó
  ‡‡— t          |¦  «        dk    sJ ‚|d         j        }t          | j        |d         ¦  «        \  }}t          |¦  «        }t	          |dk    ¦  «         d}	d|v r@t          |d         t          ¦  «        r	|d         }	nJt          | j        |d         ¦  «        }	n.t          |¦  «        dk    rt          | j        |d         ¦  «        }	t	          t          |	t          ¦  «        ¦  «         t	          |dk    ¦  «         ˆfd„|D ¦   «         }
|	dk     rt          |
d         ¦  «        |	z   }	t	          d|	cxk    ot          |
d         ¦  «        k     nc ¦  «         g }g }|dk    r¶|
d         }‰                     |
d         ¦  «        }| 	                    d¦  «         t          t          |¦  «        ¦  «        D ]KŠ‰|	k    r'‰                     |‰         ¦  «        }|r|r||z  nd }Œ/|                      ‰|
d         ¦  «        }ŒL|                     |¦  «         n¤t          t          |
d         ¦  «        ¦  «        D ]�Š‰|	k    r#|                      ‰ˆfd„|
D ¦   «         ¦  «        }nAˆfd„|
D ¦   «         }|                     |                      ||‰|¦  «        ¦  «         |d         }|                     |¦  «         Œ‚t                               t!          |¦  «        t#          |g ¦  «        ¬¦  «        S )	Nr   Úaxisr:   r`  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   ©r,  ©rl   r°   rÖ   s     €rX   rÅ   zDArrayAnalysis._analyze_op_call_numpy_concatenate.<locals>.<listcomp>¦
  ó'   ø€ Ð7Ð7Ð7¨a�)×&Ò& qÑ)Ô)Ð7Ð7Ð7rZ   c                 ó    •— g | ]
}|‰         ‘ŒS rd   rd   ©rl   rs   r�   s     €rX   rÅ   zDArrayAnalysis._analyze_op_call_numpy_concatenate.<locals>.<listcomp>¼
  s   ø€ Ð#AÐ#AÐ#A° E¨!¤HÐ#AÐ#AÐ#ArZ   c                 ó    •— g | ]
}|‰         ‘ŒS rd   rd   r&  s     €rX   rÅ   zDArrayAnalysis._analyze_op_call_numpy_concatenate.<locals>.<listcomp>¿
  s   ø€ Ð:Ð:Ð:¨%˜U 1œXÐ:Ð:Ð:rZ   rh  )rx   rÅ  r   ri  r   r[   rË   r   rÌ   Úpopr‹   Ú	_sum_sizer¼   Ú_call_assert_equivr‚  r¾  r¸   r  )rŸ   r¡  rÖ   rÅ  rI   r’  rn  rc  r„   r   rö  rÔ  Ú	new_shapers   rƒ   rM   Úsizesr�   s     `              @rX   Ú"_analyze_op_call_numpy_concatenatez0ArrayAnalysis._analyze_op_call_numpy_concatenate”
  s  øø€ õ �4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø�1ŒgŒkˆÝ% d¤l°D¸´GÑ<Ô<‰ˆˆRÝ�‰HŒHˆÝ��A’‰ŒˆØˆØ�Sˆ=ˆ=Ý˜#˜fœ+¥sÑ+Ô+ð =Ø˜6”{��å! $¤,°°F´Ñ<Ô<��Ý�‰YŒY˜Š]ˆ]Ý˜dœl¨D°¬GÑ4Ô4ˆDÝ•
˜4¥Ñ%Ô%Ñ&Ô&Ð&Ý��mÒ#Ñ$Ô$Ð$Ø7Ð7Ð7Ð7°3Ð7Ñ7Ô7ˆØ�!Š8ˆ8Ý�v˜a”y‘>”> DÑ(ˆDÝ��TÐ*Ð*Ò*Ð*�C  q¤	™NœNÒ*Ð*Ð*Ð*Ñ+Ô+Ð+ØˆØˆ	Ø�Š6ˆ6Ø˜1”IˆEà×)Ò)¨&°¬)Ñ4Ô4ˆAØ�IŠI�a‰LŒLˆLÝ�3˜u™:œ:Ñ&Ô&ð @ð @�Ø˜’9�9Ø!×1Ò1°%¸´(Ñ;Ô;�AØ%&Ð7¨1Ð7˜1˜q™5˜5°4�D�DàŸ>š>¨)°V¸A´YÑ?Ô?�D�DØ×Ò˜TÑ"Ô"Ð"Ð"å�3˜v aœy™>œ>Ñ*Ô*ð 'ð '�Ø˜’9�9ØŸ>š>Ø!Ð#AÐ#AÐ#AÐ#A¸&Ð#AÑ#AÔ#Añô �D�Dð ;Ð:Ð:Ð:°6Ð:Ñ:Ô:�EØ—N’NØ×/Ò/°°s¸IÀuÑMÔMñô ð ð ! œ8�DØ× Ò  Ñ&Ô&Ð&Ð&Ý×*Ò*Ý˜	Ñ"Ô"Ý�G˜RÑ Ô ð +ñ 
ô 
ð 	
rZ   c                 ó¸  ‡— t          |¦  «        dk    sJ ‚|d         j        }t          | j        |d         ¦  «        \  }}t          |¦  «        }t	          |dk    ¦  «         d}	d|v r@t          |d         t          ¦  «        r	|d         }	nJt          | j        |d         ¦  «        }	n.t          |¦  «        dk    rt          | j        |d         ¦  «        }	t	          t          |	t          ¦  «        ¦  «         t	          |dk    ¦  «         ˆfd„|D ¦   «         }
|                      ||‰|¦  «        }|
d         }|	dk     rt          |¦  «        |	z   dz   }	t	          d|	cxk    ot          |¦  «        k    nc ¦  «         t          |d|	…         ¦  «        |gz   t          ||	d …         ¦  «        z   }t                               t          |¦  «        |¬¦  «        S )Nr   r   r:   r`  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   r"  r#  s     €rX   rÅ   z>ArrayAnalysis._analyze_op_call_numpy_stack.<locals>.<listcomp>Û
  r$  rZ   rh  )rx   rÅ  r   ri  r   r[   rË   r   r*  r  r‚  r¾  r¸   )rŸ   r¡  rÖ   rÅ  rI   r’  rn  rc  r„   r   rö  rÔ  rs   r+  s     `           rX   Ú_analyze_op_call_numpy_stackz*ArrayAnalysis._analyze_op_call_numpy_stackÊ
  sÄ  ø€ Ý�4‰yŒy˜1Š}ˆ}ˆ}ˆ}Ø�1ŒgŒkˆÝ% d¤l°D¸´GÑ<Ô<‰ˆˆRÝ�‰HŒHˆÝ��A’‰ŒˆØˆØ�Sˆ=ˆ=Ý˜#˜fœ+¥sÑ+Ô+ð =Ø˜6”{��å! $¤,°°F´Ñ<Ô<��Ý�‰YŒY˜Š]ˆ]Ý˜dœl¨D°¬GÑ4Ô4ˆDÝ•
˜4¥Ñ%Ô%Ñ&Ô&Ð&å��mÒ#Ñ$Ô$Ð$Ø7Ð7Ð7Ð7°3Ð7Ñ7Ô7ˆØ×)Ò)¨%°°iÀÑEÔEˆØ�q”	ˆØ�!Š8ˆ8Ý�u‘:”: Ñ$ qÑ(ˆDÝ��TÐ'Ð'Ò'Ð'�S ™ZœZÒ'Ð'Ð'Ð'Ñ(Ô(Ð(Ý˜˜q ˜vœÑ'Ô'¨1¨#Ñ-µ°U¸4¸5¸5´\Ñ0BÔ0BÑBˆ	Ý×*Ò*µ°yÑ1AÔ1AÀwÐ*ÑOÔOÐOrZ   c                 ó®  — t          |¦  «        dk    sJ ‚t          | j        |d         ¦  «        \  }}t          |¦  «        }t          |dk    ¦  «         | j        |d         j                 }	t          t          |	t          j        ¦  «        ¦  «         |	j	        dk     r|  
                    |||||¦  «        S d|d<   |                      |||||¦  «        S ©Nr:   r   r·   r   )rx   r   ri  r   rá   rí   r[   r   ri   rõ   r0  r-  ©
rŸ   r¡  rÖ   rÅ  rI   r’  rn  rc  r„   rù   s
             rX   Ú_analyze_op_call_numpy_vstackz+ArrayAnalysis._analyze_op_call_numpy_vstackä
  sÑ   € Ý�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~Ý% d¤l°D¸´GÑ<Ô<‰ˆˆRÝ�‰HŒHˆÝ��A’‰ŒˆØŒl˜3˜qœ6œ;Ô'ˆÝ•
˜3¥Ô 5Ñ6Ô6Ñ7Ô7Ð7ØŒ8�aŠ<ˆ<Ø×4Ò4Ø�y # t¨Sñô ð ð ˆC�‰KØ×:Ò:Ø�y # t¨Sñô ð rZ   c                 óˆ  — t          |¦  «        dk    sJ ‚t          | j        |d         ¦  «        \  }}t          |¦  «        }t          |dk    ¦  «         | j        |d         j                 }	t          t          |	t          j        ¦  «        ¦  «         |	j	        dk     rd|d<   nd|d<   |  
                    |||||¦  «        S r2  )rx   r   ri  r   rá   rí   r[   r   ri   rõ   r-  r3  s
             rX   Ú_analyze_op_call_numpy_hstackz+ArrayAnalysis._analyze_op_call_numpy_hstackõ
  s·   € Ý�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~Ý% d¤l°D¸´GÑ<Ô<‰ˆˆRÝ�‰HŒHˆÝ��A’‰ŒˆØŒl˜3˜qœ6œ;Ô'ˆÝ•
˜3¥Ô 5Ñ6Ô6Ñ7Ô7Ð7ØŒ8�aŠ<ˆ<ØˆC�‰KˆKàˆC�‰KØ×6Ò6Ø�9˜c 4¨ñ
ô 
ð 	
rZ   c                 ó’  — t          |¦  «        dk    sJ ‚t          | j        |d         ¦  «        \  }}t          |¦  «        }t          |dk    ¦  «         | j        |d         j                 }	t          t          |	t          j        ¦  «        ¦  «         |	j	        dk    rbd|d<   |  
                    |||||¦  «        }
t          |
¦  «         t          dgt          |
j        d         ¦  «        z   ¦  «        |
j        d<   |
S |	j	        dk    rd|d<   |  
                    |||||¦  «        S d|d<   |                      |||||¦  «        S )Nr:   r   r   rs   r·   )rx   r   ri  r   rá   rí   r[   r   ri   rõ   r0  r¸   r  r½  r-  )rŸ   r¡  rÖ   rÅ  rI   r’  rn  rc  r„   rù   rî  s              rX   Ú_analyze_op_call_numpy_dstackz+ArrayAnalysis._analyze_op_call_numpy_dstack  sJ  € Ý�4‰yŒy˜AŠ~ˆ~ˆ~ˆ~Ý% d¤l°D¸´GÑ<Ô<‰ˆˆRÝ�‰HŒHˆÝ��A’‰ŒˆØŒl˜3˜qœ6œ;Ô'ˆÝ•
˜3¥Ô 5Ñ6Ô6Ñ7Ô7Ð7ØŒ8�qŠ=ˆ=ØˆC�‰KØ×6Ò6Ø�y # t¨Sñô ˆFõ �F‰OŒOˆOÝ%*¨A¨3µ°f´mÀGÔ6LÑ1MÔ1MÑ+MÑ%NÔ%NˆFŒM˜'Ñ"ØˆMØŒX˜Š]ˆ]ØˆC�‰KØ×4Ò4Ø�y # t¨Sñô ð ð ˆC�‰KØ×:Ò:Ø�y # t¨Sñô ð rZ   c                 ó   — d S rh   rd   r¡  s         rX   Ú_analyze_op_call_numpy_cumsumz+ArrayAnalysis._analyze_op_call_numpy_cumsum  ó   € àˆtrZ   c                 ó   — d S rh   rd   r¡  s         rX   Ú_analyze_op_call_numpy_cumprodz,ArrayAnalysis._analyze_op_call_numpy_cumprod"  r;  rZ   c                 ó’   — t          |¦  «        }d}|dk    r	|d         }nd|v r|d         }t                               |f¬¦  «        S )Né2   r·   Únumr  r¼  )rŸ   r¡  rÖ   rÅ  rI   r’  r„   r@  s           rX   Ú_analyze_op_call_numpy_linspacez-ArrayAnalysis._analyze_op_call_numpy_linspace&  sS   € õ �‰IŒIˆØˆØˆqŠ5ˆ5Ø�q”'ˆCˆCØ�cˆ\ˆ\Ø�e”*ˆCÝ×*Ò*°#°Ð*Ñ8Ô8Ð8rZ   c                 ó‚  ‡ ‡— t          |¦  «        }|dk    sJ ‚|d         j        }t          t          ˆ fd„|D ¦   «         ¦  «        ¦  «         ˆ fd„|D ¦   «         }d„ |D ¦   «         }t          t          d„ |D ¦   «         ¦  «        ¦  «         |d         dk    r|d         dk    rd S ˆfd„|D ¦   «         }	|d         dk    rz‰                      ||‰|	d         d         |	d         d	         g¦  «        }
t
                               t          |	d         dd	…         |	d         d
d …         z   ¦  «        |
¬¦  «        S |d         dk    ri‰                      ||‰|	d         d
         |	d         d         g¦  «        }
t
                               t          |	d         dd
…         ¦  «        |
¬¦  «        S |d         dk    rt|d         dk    rh‰                      ||‰|	d         d         |	d         d         g¦  «        }
t
                               |	d         d         |	d         d         f|
¬¦  «        S |d         dk    r	 d S )Nr·   r   c                 óD   •— g | ]}‰                      |j        ¦  «        ‘ŒS rd   ©r  rí   r¶   s     €rX   rÅ   z<ArrayAnalysis._analyze_op_call_numpy_dot.<locals>.<listcomp>5  s'   ø€ Ð9Ð9Ð9¨q�T—]’] 1¤6Ñ*Ô*Ð9Ð9Ð9rZ   c                 ó4   •— g | ]}‰j         |j                 ‘ŒS rd   rb  r¶   s     €rX   rÅ   z<ArrayAnalysis._analyze_op_call_numpy_dot.<locals>.<listcomp>6  s"   ø€ Ð3Ð3Ð3¨�”˜QœVÔ$Ð3Ð3Ð3rZ   c                 ó   — g | ]	}|j         ‘Œ
S rd   )rõ   )rl   Útys     rX   rÅ   z<ArrayAnalysis._analyze_op_call_numpy_dot.<locals>.<listcomp>7  s   € Ð'Ð'Ð'˜B�”Ð'Ð'Ð'rZ   c              3   ó"   K  — | ]
}|d k    V — ŒdS )r   Nrd   r   s     rX   rn   z;ArrayAnalysis._analyze_op_call_numpy_dot.<locals>.<genexpr>8  s&   è è € Ð(Ð(˜a�A˜’EÐ(Ð(Ð(Ð(Ð(Ð(rZ   r:   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   r"  r#  s     €rX   rÅ   z<ArrayAnalysis._analyze_op_call_numpy_dot.<locals>.<listcomp>;  s'   ø€ Ð8Ð8Ð8¨a�)×&Ò& qÑ)Ô)Ð8Ð8Ð8rZ   éþÿÿÿr   rh  )rx   rÅ  r   r“   r*  r‚  r¾  r¸   )rŸ   r¡  rÖ   rÅ  rI   r’  r„   ÚtypsÚdimsrö  rÔ  s   ` `        rX   Ú_analyze_op_call_numpy_dotz(ArrayAnalysis._analyze_op_call_numpy_dot1  s~  øø€ Ý�‰IŒIˆØ�AŠvˆvˆvˆvØ�1ŒgŒkˆÝ•Ð9Ð9Ð9Ð9°DÐ9Ñ9Ô9Ñ:Ô:Ñ;Ô;Ð;Ø3Ð3Ð3Ð3¨dÐ3Ñ3Ô3ˆØ'Ð' $Ð'Ñ'Ô'ˆÝ•Ð(Ð( 4Ð(Ñ(Ô(Ñ(Ô(Ñ)Ô)Ð)Ø�Œ7�aŠ<ˆ<˜D œG qšL˜LØ�4Ø8Ð8Ð8Ð8°4Ð8Ñ8Ô8ˆØ�Œ7�aŠ<ˆ<Ø×-Ò-Ø�s˜I¨¨q¬	°!¬°f¸Q´iÀ´mÐ'Dñô ˆGõ !×.Ò.Ý˜F 1œI a¨ dœO¨f°Q¬i¸¸¸¬nÑ<Ñ=Ô=Øð /ñ ô ð ð �Œ7�aŠ<ˆ<Ø×-Ò-Ø�s˜I¨¨q¬	°"¬°v¸a´yÀ´|Ð'Dñô ˆGõ !×.Ò.Ý˜F 1œI a¨ dœOÑ,Ô,Øð /ñ ô ð ð �Œ7�aŠ<ˆ<˜D œG qšL˜LØ×-Ò-Ø�s˜I¨¨q¬	°!¬°f¸Q´iÀ´lÐ'Cñô ˆGõ !×.Ò.Ø˜a”y ”| V¨A¤Y¨q¤\Ð2Øð /ñ ô ð ð �Œ7�QŠ;ˆ;ØØˆtrZ   c                 ó†  — |j                              dd¦  «        }|j        j        }t	          |t
          ¦  «        r|f}g }	t          |¦  «        dk    r t          |¦  «        t          |¦  «        k    sJ ‚t          ||¦  «        D ]J\  }
}| j        |j	                 }t	          |t          j        ¦  «        r|
|vr|	                     |¦  «         ŒKt          |	¦  «        }t          |dk    ¦  «         |                      ||||	¦  «        }|                     |	d         ¦  «        }t                                ||¬¦  «        S )NÚstandard_indexingrd   r   rh  )Úoptionsr¯   Ú	kernel_irr–  r[   rô   rx   ry   rá   rí   r   ri   r¼   r   r*  r(  r‚  r¾  )rŸ   r¡  rÖ   Ústencil_funcrÅ  rI   r’  Ústd_idx_arrsÚkernel_arg_namesÚrel_idx_arrsr&  r"  rù   r„   rÔ  rs   s                   rX   r•  zArrayAnalysis._analyze_stencilX  s;  € ð $Ô+×/Ò/Ð0CÀRÑHÔHˆØ'Ô1Ô;ÐÝ�l¥CÑ(Ô(ð 	+Ø(˜?ˆLØˆÝ�4‰yŒy˜1Š}ˆ}¥ T¡¤­cÐ2BÑ.CÔ.CÒ!CÐ!CÐ!CÐ!CÝÐ,¨dÑ3Ô3ð 	)ð 	)‰HˆC�Ø”,˜sœxÔ(ˆCÝ˜#�uÔ4Ñ5Ô5ð )Ø�|Ð#Ð#à×#Ò# CÑ(Ô(Ð(øÝ�ÑÔˆÝ��A’‰ŒˆØ×)Ò)¨%°°iÀÑNÔNˆØ×#Ò# L°¤OÑ4Ô4ˆÝ×*Ò*°¸GÐ*ÑDÔDÐDrZ   c                 óª   — t          t          |¦  «        dk    ¦  «         t                               |                     |d         ¦  «        ¬¦  «        S )Nr:   r   r  )r   rx   r‚  r¾  r,  r¡  s         rX   Ú!_analyze_op_call_numpy_linalg_invz/ArrayAnalysis._analyze_op_call_numpy_linalg_invm  sE   € õ 	•�D‘	”	˜Q’ÑÔÐÝ×*Ò*°×1EÒ1EÀdÈ1ÄgÑ1NÔ1NÐ*ÑOÔOÐOrZ   c           
      ó¸  ‡ ‡— t          t          ˆ fd„|¦  «        ¦  «        }t          |¦  «        dk    �r
|j        dk    rÿ‰ j        |d         j                 }‰ j        |d         j                 }|j        dk    r4t                               ‰ 	                    |d         ¦  «        ¬¦  «        S |j        dk    r4t                               ‰ 	                    |d         ¦  «        ¬¦  «        S 	 ˆfd„|D ¦   «         }	d|	v rdS t          |	d	¦  «        }
t                               |
¬¦  «        S # t          $ r Y dS w xY wt          t          ˆ fd
„|¦  «        ¦  «        }t          t          |¦  «        dk    ¦  «         d„ |D ¦   «         }ˆ fd„|D ¦   «         }t          |¦  «        }t          |dk    ¦  «         	 ˆfd„|D ¦   «         }	nH# t          $ r; t                               |d         ‰                      ||‰|¦  «        ¬¦  «        cY S w xY wg }d|	v r~g }t          |	¦  «        D ]j\  }}|€N||         }‰ j        |j                 }‰                      ‰||j        d|¦  «        }|                     |¦  «         ŒU|                     |¦  «         Œk|}	‰                      |‰||	|¦  «        }|r&d|j        v r|j        d         }ng }||z   |j        d<   |S )z¶Infer shape equivalence of arguments based on Numpy broadcast rules
        and return shape of output
        https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
        c                 ó8   •— ‰                      | j        ¦  «        S rh   )Ú_istuplerí   ©rm   rŸ   s    €rX   rÙ  z2ArrayAnalysis._analyze_broadcast.<locals>.<lambda>x  ó   ø€  T§]¢]°1´6Ñ%:Ô%:€ rZ   r·   rE   r   r:   r  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   r'  r#  s     €rX   rÅ   z4ArrayAnalysis._analyze_broadcast.<locals>.<listcomp>‰  s'   ø€ Ð?Ð?Ð?°Q˜)×-Ò-¨aÑ0Ô0Ð?Ð?Ð?rZ   Nrd   c                 ó8   •— ‰                      | j        ¦  «        S rh   rD  r[  s    €rX   rÙ  z2ArrayAnalysis._analyze_broadcast.<locals>.<lambda>”  r\  rZ   c                 ó   — g | ]	}|j         ‘Œ
S rd   r3  r   s     rX   rÅ   z4ArrayAnalysis._analyze_broadcast.<locals>.<listcomp>–  s   € Ð&Ð&Ð&˜A�”Ð&Ð&Ð&rZ   c                 ó>   •— g | ]}‰j         |j                 j        ‘ŒS rd   )rá   rí   rõ   r¶   s     €rX   rÅ   z4ArrayAnalysis._analyze_broadcast.<locals>.<listcomp>—  s%   ø€ Ð8Ð8Ð8¨a�”˜QœVÔ$Ô)Ð8Ð8Ð8rZ   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rd   r'  r#  s     €rX   rÅ   z4ArrayAnalysis._analyze_broadcast.<locals>.<listcomp>›  s'   ø€ Ð;Ð;Ð;°�i×)Ò)¨!Ñ,Ô,Ð;Ð;Ð;rZ   rh  r«  )r  ré  rx   rÚ   rá   rí   r  r‚  r¾  r(  r  r   r   rÈ   r*  Ú	enumeraterã  rõ   r¼   ræ  r½  )rŸ   r¡  rÖ   rÅ  rI   rf  ÚtupsÚtup0typÚtup1typrö  Úconcat_shapesÚarrsrð   rL  Úmax_dimr«  Ú
new_shapesr�   Úsr"  rù   rs   rî  Úprev_pres   ` `                     rX   r€  z ArrayAnalysis._analyze_broadcasts  so  øø€ õ
 •FÐ:Ð:Ð:Ð:¸DÑAÔAÑBÔBˆåˆt‰9Œ9˜Š>‰>˜bœk¨UÒ2Ð2ð ”l 4¨¤7¤<Ô0ˆGØ”l 4¨¤7¤<Ô0ˆGØŒ} Ò!Ð!Ý$×2Ò2Ø#×-Ò-¨d°1¬gÑ6Ô6ð 3ñ ô ð ð Œ} Ò!Ð!Ý$×2Ò2Ø#×-Ò-¨d°1¬gÑ6Ô6ð 3ñ ô ð ð	Ø?Ð?Ð?Ð?¸$Ð?Ñ?Ô?�Ø˜6�>�>Ø˜4Ý # F¨B¡¤�Ý$×2Ò2Ø'ð 3ñ ô ð øõ "ð ð ð Ø�t�tðøøøõ •FÐ:Ð:Ð:Ð:¸DÑAÔAÑBÔBˆÝ•�D‘	”	˜A’ÑÔÐØ&Ð& Ð&Ñ&Ô&ˆØ8Ð8Ð8Ð8°4Ð8Ñ8Ô8ˆÝ�d‘)”)ˆÝ�˜!’ÑÔÐð	Ø;Ð;Ð;Ð;°dÐ;Ñ;Ô;ˆFˆFøÝð 	ð 	ð 	Ý ×.Ò.Ø˜1”gØ×+Ò+¨E°3¸	À4ÑHÔHð /ñ ô ð ð ð ð	øøøð
 ˆØ�6ˆ>ˆ>ð ˆJÝ! &Ñ)Ô)ð 	)ð 	)‘��1Ø�9Ø˜qœ'�CØœ, s¤xÔ0�CØ ×0Ò0Ø! 3¨¬°$¸ñô �Eð ×%Ò% eÑ,Ô,Ð,Ð,à×%Ò% aÑ(Ô(Ð(Ð(ØˆFà×.Ò.Ø�9˜c 6¨5ñ
ô 
ˆð ð 	2ð ˜œÐ%Ð%Ø!œ=¨Ô/��à�Ø#&¨¡>ˆFŒM˜%Ñ Øˆs+   Ã1D0 Ä*D0 Ä0
D>Ä=D>Æ>G ÇAHÈHc           
      ó  — g }g }t          d„ |D ¦   «         ¦  «        }d}	t          |¦  «        D �]}
g }g }t          ||¦  «        D ]{\  }}|
t          |¦  «        k     rc|t          |¦  «        dz
  |
z
           }|                     |¦  «        }|dk    r|}	ŒQ|                     |¦  «         |                     |¦  «         Œ||g k    r.|	€J ‚|                     |	¦  «         |                     d¦  «         |                     |                      |||||¬¦  «        ¦  «         |                     |d         ¦  «         �Œt                               t          t          |¦  «        ¦  «        t          |g ¦  «        ¬¦  «        S )z„Produce assert_equiv for sizes in each dimension, taking into
        account of dimension coercion and constant size of 1.
        c                 ó,   — g | ]}t          |¦  «        ‘ŒS rd   r  )rl   rs   s     rX   rÅ   z:ArrayAnalysis._broadcast_assert_shapes.<locals>.<listcomp>Å  s   € Ð6Ð6Ð6 e•s˜5‘z”zÐ6Ð6Ð6rZ   Nr:   Ú1©rð   r   rh  )rÈ   r‹   ry   rx   rÌ   r¼   r*  r‚  r¾  r¸   rä  r  )rŸ   r¡  rÖ   rÅ  rö  rð   rÔ  r+  rh  Úconst_size_oner�   r,  Ú
size_namesrí   rs   rM   Ú
const_sizes                    rX   ræ  z&ArrayAnalysis._broadcast_assert_shapes¿  s«  € ð ˆØˆ	ÝÐ6Ð6¨vÐ6Ñ6Ô6Ñ7Ô7ˆØˆÝ�w‘”ð 	'ñ 	'ˆAØˆEØˆJÝ" 5¨&Ñ1Ô1ð 0ð 0‘��eØ•s˜5‘z”z’>�>Ø ¥ U¡¤¨a¡°!Ñ!3Ô4�DØ!*×!:Ò!:¸4Ñ!@Ô!@�JØ! Q’�Ø)-˜˜àŸš TÑ*Ô*Ð*Ø"×)Ò)¨$Ñ/Ô/Ð/øØ˜Š{ˆ{Ø%Ð1Ð1Ð1Ø—’˜^Ñ,Ô,Ð,Ø×!Ò! #Ñ&Ô&Ð&Ø�NŠNØ×'Ò'Ø˜3 	¨5¸
ð (ñ ô ñô ð ð
 ×Ò˜U 1œXÑ&Ô&Ð&Ñ&Ý×*Ò*Ý� Ñ+Ô+Ñ,Ô,Ý�G˜RÑ Ô ð +ñ 
ô 
ð 	
rZ   c                 ót   — |                       |||||¬¦  «        }t          |¦  «        dk    r
 |j        |Ž  |S )Nro  r:   )rÌ  rx   rÒ   )rŸ   r¡  rÅ  rÖ   rI   rð   Úinstss          rX   r*  z ArrayAnalysis._call_assert_equivâ  sM   € Ø×'Ò'Ø�3˜	 4¨uð (ñ 
ô 
ˆõ ˆt‰9Œ9�qŠ=ˆ=Ø"ˆIÔ" DÐ)Ð)ØˆrZ   c           
      óL  ‡ — t           j        dk    rt          d||¦  «         |€d„ |D ¦   «         }g }g }t          ||¦  «        D ]¨\  }}	t           j        dk    rt          d||	¦  «         d}
|D ]Q}t           j        dk    r%t          d||                     |	|¦  «        ¦  «         |                     |	|¦  «        rd}
 nŒR|
s*|                     |	¦  «         |                     |¦  «         Œ©t          |¦  «        dk     r!t           j        dk    rt          d¦  «         g S d	                     d
                     |¦  «        |¦  «        }t          j
        ||¦  «        }t          j        |¦  «        }t          j        |t          d¦  «        |¦  «        }|‰ j        |j        <   t#          |gˆ fd„|D ¦   «         z   ¦  «        }t          j                             |¦  «        }t          j        |t          d¦  «        |¦  «        }t          j        dt*          |¬¦  «        }t-          t*          ¦  «        }‰ j                             ||fi ¦  «        }‰                      ||||¦  «         t          j        |t          d¦  «        |¦  «        }t          j                             ||g|z   i |¬¦  «        }‰                      ||t          j        |¦  «         |‰ j        |<   t          j        |||¬¦  «        t          j        |||¬¦  «        t          j        |||¬¦  «        gS )Nr·   zmake_assert_equiv:c                 ó   — g | ]	}|j         ‘Œ
S rd   r3  r   s     rX   rÅ   z4ArrayAnalysis._make_assert_equiv.<locals>.<listcomp>ï  s   € Ð+Ð+Ð+ �Q”VÐ+Ð+Ð+rZ   zname, x:Fzis equiv to?Tz@Will not insert assert_equiv as args are known to be equivalent.zSizes of {} do not match on {}z, rˆ   c                 ó4   •— g | ]}‰j         |j                 ‘ŒS rd   rb  r¶   s     €rX   rÅ   z4ArrayAnalysis._make_assert_equiv.<locals>.<listcomp>  s"   ø€ Ð$HÐ$HÐ$H¸a T¤\°!´&Ô%9Ð$HÐ$HÐ$HrZ   Úassertr˜   r%  rç  r  )r   rº   r»   ry   rÉ   r¼   rx   rª   Újoinr   rö   r   r”   ró   r   rá   rí   r¸   r’   Ú
from_typesrÝ  r˜   r   rF   rF  r¹  rb  r]  r–   r„  rÍ  )rŸ   r¡  rÅ  rÖ   Ú_argsrð   rI   r–  rí   r°   ÚseenrU  rˆ   Úmsg_valÚmsg_typÚmsg_varÚargtypsÚtup_typÚ
assert_varÚ
assert_defrS  rH   r"  r÷   s   `                       rX   rÌ  z ArrayAnalysis._make_assert_equivê  s,  ø€ åÔ! QÒ&Ð&ÝÐ&¨¨uÑ5Ô5Ð5Øˆ=Ø+Ð+ UÐ+Ñ+Ô+ˆEØˆØˆ	Ý˜5 %Ñ(Ô(ð 	'ð 	'‰GˆD�!ÝÔ%¨Ò*Ð*Ý�j $¨Ñ*Ô*Ð*ØˆDØð ð �ÝÔ)¨QÒ.Ð.Ý˜.¨!¨Y×-?Ò-?ÀÀ1Ñ-EÔ-EÑFÔFÐFØ×%Ò% a¨Ñ+Ô+ð Ø�DØ�Eðð ð 'Ø—’˜A‘”�Ø× Ò  Ñ&Ô&Ð&øõ ˆt‰9Œ9�qŠ=ˆ=ÝÔ%¨Ò*Ð*Ýð"ñô ð ð ˆIà.×5Ò5Ø�IŠI�iÑ Ô  #ñ
ô 
ˆõ ”(˜3 Ñ$Ô$ˆÝÔ% cÑ*Ô*ˆÝ”&˜¥¨eÑ 4Ô 4°cÑ:Ô:ˆØ%,ˆŒ�W”\Ñ"Ý˜˜	Ð$HÐ$HÐ$HÐ$HÀ4Ð$HÑ$HÔ$HÑHÑIÔIˆõ Ô$×/Ò/°Ñ8Ô8ˆõ ”V˜E¥=°Ñ#:Ô#:¸CÑ@Ô@ˆ
Ý”Y˜~­|ÀÐEÑEÔEˆ
Ý"¥<Ñ0Ô0ˆØŒl×0Ò0°¸°zÀ2ÑFÔFˆØ�Š�Y 
¨D°*Ñ=Ô=Ð=õ Œf�U�M¨%Ñ0Ô0°#Ñ6Ô6ˆÝ”—’˜Z¨'¨°TÑ)9¸2À3�ÑGÔGˆØ�Š�Y ¥U¤Z°Ñ7Ô7Ð7Ø #ˆŒ�uÑõ ŒI˜G¨G¸Ð=Ñ=Ô=ÝŒI˜J¨z¸sÐCÑCÔCÝŒI˜E¨#°3Ð7Ñ7Ô7ð
ð 	
rZ   c           
      óØ  — t          |t          j        ¦  «        r|                     |¦  «        }t          |t          j        ¦  «        r|}d }d }n¶t          |t          j        ¦  «        r|}d }d }n•t          j                             |d|j        ¦  «        }t          j        |j        t          d 
                    |j        ¦  «        ¦  «        |j        ¦  «        }t          j                             t          j        |¦  «        }g }	d}
|r"t!          |¦  «        }||k     r|||z
  d …         }t#          |¦  «        D �]R}d}|�rj||         �rat          ||         t          j        ¦  «        rI| j        ||         j                 }t          |t          j        t          j        f¦  «        r
||         }d}nøt          ||         t*          ¦  «        r!t          j        ||         |j        ¦  «        }n||         }t          |t          j        ¦  «        sJ ‚t          j        |j        t          d 
                    |j        |¦  «        ¦  «        |j        ¦  «        }|                     t          j        |||j        ¦  «        ¦  «         |                      ||t          j        |¦  «         d}|sÉt          j        |j        t          d 
                    |j        |¦  «        ¦  «        |j        ¦  «        }t          j                             ||d |j        ¦  «        }d}
d | j        |<   |                     t          j        |||j        ¦  «        ¦  «         |                      ||t          j        |¦  «         |	                     |¦  «         �ŒT|
rI|rG|                     dt          j        |||j        ¦  «        ¦  «         |                      ||||¦  «         t;          |	¦  «        S )Nrs   z{}_shapeFTz	{}_size{}r   )r[   r   ró   r(  rÞ  rb  r   rÅ  r¡  r   rª   rí   r   rß  rà  r^   rx   r‹   rá   rn  rk   rË   rö   r¼   rÍ  r¹  Ústatic_getitemr„  r   r¸   )rŸ   rÖ   r"  r  rs   r¬  Úattr_varÚshape_attr_callÚshape_attr_typÚ	size_varsÚuse_attr_varÚnshapesr�   Úskiprù   rP  rQ  Úgetitems                     rX   rã  zArrayAnalysis._gen_shape_call(  s…  € å�e�RœVÑ$Ô$ð 	/Ø×'Ò'¨Ñ.Ô.ˆEõ �e�RœVÑ$Ô$ð 	JØˆHØ"ˆOØˆEˆEÝ˜�rœvÑ&Ô&ð 		JØˆHØ"ˆOØˆEˆEå œgŸošo¨c°7¸C¼GÑDÔDˆOÝ”vØ”	�=¨×):Ò):¸3¼8Ñ)DÔ)DÑEÔEÀsÄwñô ˆHõ #Ô-×6Ò6µu´zÀ5ÑIÔIˆNØˆ	Øˆàð 	3Ý˜%‘j”jˆGØ�wŠˆØ˜w¨™Ð1Ð1Ô2�Ý�u‘”ð "	'ñ "	'ˆAØˆDØñ  ˜˜qœñ  Ý˜e Aœh­¬Ñ/Ô/ð  Øœ, u¨Q¤x¤}Ô5�CÝ! #­¬µe´oÐ'FÑGÔGð $Ø#(¨¤8˜Ø#˜øå! %¨¤(­CÑ0Ô0ð ,Ý#%¤8¨E°!¬H°c´gÑ#>Ô#>˜˜à#(¨¤8˜Ý% hµ´Ñ9Ô9Ð9Ð9Ð9Ý!œvØœ	Ý% k×&8Ò&8¸¼À1Ñ&EÔ&EÑFÔFØœñ ô  �Hð
 —K’K¥¤	¨(°H¸c¼gÑ FÔ FÑGÔGÐGØ—L’L ¨Hµe´jÀ(ÑKÔKÐKØ�DØð Gåœ6Ø”IÝ! +×"4Ò"4°S´X¸qÑ"AÔ"AÑBÔBØ”Gñô �õ
 œ'×0Ò0°¸1¸dÀCÄGÑLÔL�Ø#�Ø*.�”˜wÑ'Ø—’�BœI g¨x¸¼ÑAÔAÑBÔBÐBØ—’˜Y¨µ%´*¸gÑFÔFÐFØ×Ò˜XÑ&Ô&Ð&Ñ&Øð 	O˜Oð 	Oà�KŠK˜�2œ9 _°hÀÄÑHÔHÑIÔIÐIØ�LŠL˜ H¨n¸oÑNÔNÐNÝ�YÑÔÐrZ   c                 óp   — | j         |         }t          |t          j        j        ¦  «        o
|j        dk    S rc   )rá   r[   r   ÚnpytypesÚArrayrõ   ©rŸ   Úvarnamerù   s      rX   r  zArrayAnalysis._isarrayl  s.   € ØŒl˜7Ô#ˆÝ˜#�uœ~Ô3Ñ4Ô4ÐE¸¼ÀAºÐErZ   c                 óP   — | j         |         }t          |t          j        ¦  «        S rh   )rá   r[   r   rj   r‘  s      rX   rZ  zArrayAnalysis._istuplep  s    € ØŒl˜7Ô#ˆÝ˜#�uœÑ/Ô/Ð/rZ   c                 óR   — d}|D ]!}|                      |¦  «        }|€ dS ||z  }Œ"|S )zzReturn the sum of the given list of sizes if they are all equivalent
        to some constant, or None otherwise.
        r   N)rÌ   )rŸ   rÖ   r,  rj  rM   r„   s         rX   r)  zArrayAnalysis._sum_sizet  sG   € ð ˆØð 	ð 	ˆDØ×)Ò)¨$Ñ/Ô/ˆAØˆyØ�t�tà�Q‘��ØˆrZ   r{  )r  rh   )crÚ   rÛ   rÜ   r™  r    rÐ   r‘  rŸ  rš  r£  r¢  r›  r¹  Úobjectr¾  r°  rÛ  r  r  r  r  r"  r.  r8  r  rå  rx  rz  r}  r�  r„  r‡  r�  rœ  rž  r¢  r§  r«  r®  r±  r³  rµ  r¹  r½  rÀ  rÂ  rÆ  rÉ  rË  rÎ  rÐ  rÒ  rÔ  rà  r	  ré  rë  rî  rñ  rô  rö  rø  rú  rü  rþ  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r-  r0  r4  r6  r8  r:  r=  rA  rM  r•  rW  r€  ræ  r*  rÌ  rã  r  rZ  r)  rd   rZ   rX   r‚  r‚  4  s,  € € € € € Ø€Hðð&ð &ð &ð",ð ,ð ,ð

%ð 
%ð 
%ð0:ð 0:ð 0:ð 0:ðd	Bð 	Bð 	Bðð ð ðB"ð B"ð B"ðH3ð 3ð 3ð
=ð =ð =ð!ð !ð !ð !ð !˜ñ !ô !ð !ðHð Hð HðT6ð 6ð 6ðð ð ð@=ð =ð =ðð ð ð  )ðLð Lð Lð Lð:ð ð ð2ð 2ð 2ð>[
ð [
ð [
ðzG9ð G9ð G9ðRXEð XEð XEðtð ð ðð ð ð$ð ð ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
Dð Dð Dð:=ð =ð =ð~Ið Ið Iðð ð ðð ð ð>
ð 
ð 
ð
ð 
ð 
ð

ð 
ð 
ð
ð 
ð 
ð

ð 
ð 
ð
9ð 9ð 9ð 9ð 9ð 9ðð ð ð*
ð 
ð 
ðð ð ð Kð Kð KðKð Kð Kð
Kð Kð Kð
Kð Kð Kð
Kð Kð Kð
Kð Kð Kð
HMð HMð HMðT=ð =ð =ð&ð ð ð
ð 
ð 
ðð ð ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð4
ð 4
ð 4
ðlPð Pð Pð4ð ð ð"
ð 
ð 
ðð ð ð4ð ð ðð ð ð	9ð 	9ð 	9ð%ð %ð %ðNEð Eð Eð*Pð Pð PðJð Jð JðX!
ð !
ð !
ðFð ð ð ð<
ð <
ð <
ð <
ð|B ð B ð B ðHFð Fð Fð0ð 0ð 0ðð ð ð ð rZ   r‚  c                 ó   — g | ]	}|j         ‘Œ
S rd   )rÚ   )rl   r2   s     rX   rÅ   rÅ   ‡  s   € Ð=Ð=Ð=˜q�”
Ð=Ð=Ð=rZ   )Ar�  rg  Ú
numba.corer   r   r   r   r   Únumba.core.ir_utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Únumba.core.analysisr   Únumba.core.typingr   r   r¦   Únumba.core.extendingr   rA   ÚUNKNOWN_CLASSÚCONST_CLASSÚufuncÚ	MAP_TYPESrí  Úarray_creationÚrandom_int_argsÚrandom_1arg_sizeÚrandom_2arg_sizelastÚrandom_3arg_sizelastÚrandom_callsra   re   r˜   r•  rš   rß   rE  r}  r‚  r  ÚNumpyRulesUnaryArrayOperatorÚ_op_mapÚkeysrí  r|  ÚNumpyRulesArrayOperatorr  ÚNumpyRulesInplaceArrayOperatorrƒ  Úsupported_ufuncsr˜  rd   rZ   rX   ú<module>r¬     s›  ðð €€€Ø €€€Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø €€€à€Ø€ØŒ[ˆM€	àÐ ð 4Ð3Ð3€à˜7Ð#€ðð ð Ð ðð ð Ð ð	ð 	ð 	Ð ð Øñàñð ñð �,Ðñ	 ð ð ð,5ð ,5ñ „ð,5ð^
ð 
ð 
ð ð=0ð =0ñ „ð=0ð@Vð Vð Vð Vð Vˆvñ Vô Vð Vðrz*ð z*ð z*ð z*ð z*�Hñ z*ô z*ð z*ðzkEð kEð kEð kEð kE�}ñ kEô kEð kEð\	!ð !ð !ð !ð !�Fñ !ô !ð !ðBK!ð K!ð K!ð K!ð K!�Fñ K!ô K!ð K!ð\B ˆt�GÔ8Ô@×EÒEÑGÔGÑHÔHØ„LðLñ €ð Ô/Ô7×<Ò<Ñ>Ô>€ØÔ>ÔF×KÒKÑMÔMÐ Ø=Ð= GÔ$<Ð=Ñ=Ô=€€€rZ   