§
    ƒÛgRÉ  ã                   óº  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZmZmZmZ d d	lmZ  ej        ¦   «         Z  G d
„ de!¦  «        Z" e"dd d ¦  «        Z#e G d„ de!¦  «        ¦   «         Z$e G d„ de!¦  «        ¦   «         Z% G d„ de!¦  «        Z& G d„ de!¦  «        Z' G d„ de%e'¦  «        Z( G d„ de(¦  «        Z) G d„ de)¦  «        Z* G d„ de(¦  «        Z+ G d„ de)¦  «        Z, G d„ d e)¦  «        Z- G d!„ d"e)¦  «        Z. G d#„ d$e)¦  «        Z/ G d%„ d&e)¦  «        Z0 G d'„ d(e)¦  «        Z1 G d)„ d*e)¦  «        Z2 G d+„ d,e*¦  «        Z3 G d-„ d.e*¦  «        Z4 G d/„ d0e*¦  «        Z5 G d1„ d2e)¦  «        Z6 G d3„ d4e)¦  «        Z7 G d5„ d6e)¦  «        Z8 G d7„ d8e*¦  «        Z9 G d9„ d:e*¦  «        Z: G d;„ d<e*¦  «        Z; G d=„ d>e)¦  «        Z< G d?„ d@e)¦  «        Z= G dA„ dBe(¦  «        Z> G dC„ dDe)¦  «        Z? G dE„ dFe)¦  «        Z@ G dG„ dHe%e'¦  «        ZA G dI„ dJe%e'¦  «        ZB G dK„ dLe%e'¦  «        ZC G dM„ dNe%e'¦  «        ZD G dO„ dPe%e'¦  «        ZE G dQ„ dRe%¦  «        ZF G dS„ dTe%¦  «        ZG G dU„ dVe$¦  «        ZH G dW„ dXe$¦  «        ZI G dY„ dZe!¦  «        ZJ G d[„ d\e%¦  «        ZK eK¦   «         ZLdS )]é    )ÚdefaultdictN)ÚFunctionTypeÚBuiltinFunctionType)Útotal_ordering)ÚStringIO)ÚerrorsÚconfig)ÚBINOPS_TO_OPERATORSÚINPLACE_BINOPS_TO_OPERATORSÚUNARY_BUITINS_TO_OPERATORSÚOPERATORS_TO_BUILTINS)ÚNotDefinedErrorÚRedefinedErrorÚVerificationErrorÚConstantInferenceError)Úconstsc                   ó–   — e Zd ZdZ ej        d¦  «        Zdd„Zd„ Zd„ Z	e
d„ ¦   «         Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ ZdS )ÚLoczSource location

    zdef\s+(\w+)\(.*NFc                 óL   — || _         || _        || _        d| _        || _        dS )zµ Arguments:
        filename - name of the file
        line - line in file
        col - column
        maybe_decorator - Set to True if location is likely a jit decorator
        N)ÚfilenameÚlineÚcolÚlinesÚmaybe_decorator)Úselfr   r   r   r   s        úC/granary/edev/quantum/lib/python3.11/site-packages/numba/core/ir.pyÚ__init__zLoc.__init__   s.   € ð !ˆŒØˆŒ	ØˆŒØˆŒ
Ø.ˆÔÐÐó    c                 ó²   — t          | ¦  «        t          |¦  «        urdS | j        |j        k    rdS | j        |j        k    rdS | j        |j        k    rdS dS ©NFT)Útyper   r   r   ©r   Úothers     r   Ú__eq__z
Loc.__eq__,   s[   € å�‰:Œ:�T %™[œ[Ð(Ð(°°ØŒ=˜EœNÒ*Ð*°5°5ØŒ9˜œ
Ò"Ð"¨5¨5ØŒ8�u”yÒ Ð ¨¨Øˆtr   c                 ó.   — |                       |¦  «         S ©N©r$   r"   s     r   Ú__ne__z
Loc.__ne__4   ó   € Ø—;’;˜uÑ%Ô%Ð%Ð%r   c                 ó2   —  | |j         |j        d¬¦  «        S )NT)r   )r   Úfirstlineno)ÚclsÚfunc_ids     r   Úfrom_function_idzLoc.from_function_id7   s   € àˆs�7Ô# WÔ%8È$ÐOÑOÔOÐOr   c                 ó8   — d| j         ›d| j        ›d| j        ›d�S )NzLoc(filename=z, line=z, col=ú))r   r   r   ©r   s    r   Ú__repr__zLoc.__repr__;   s*   € € Ø6:´m°m°mØ6:´i°i°iÀÄÀÀðKð 	Kr   c                 óh   — | j         �| j        ›d| j        ›d| j         ›d�S | j        ›d| j        ›d�S )Nz (ú:r0   )r   r   r   r1   s    r   Ú__str__zLoc.__str__?   s@   € ØŒ8ÐØ#'¤= = =°$´)°)°)¸T¼X¸X¸XÐFÐFà $¤  ¨t¬y¨y¨yÐ9Ð9r   c                 óÌ   — d }|                       ¦   «         }t          |d | j        dz
  …         ¦  «        D ]-}|                     ¦   «                              d¦  «        r|} nŒ.|S )Né   údef )Ú	get_linesÚreversedr   ÚstripÚ
startswith)r   Úfn_namer   Úxs       r   Ú_find_definitionzLoc._find_definitionE   sr   € àˆØ—’Ñ Ô ˆÝ˜%  ¤¨Q¡ Ô/Ñ0Ô0ð 	ð 	ˆAð �wŠw‰yŒy×#Ò# FÑ+Ô+ð Ø�Ø�ðð ˆr   c                 óº   — |                       ¦   «         }|rD| j                             |                     ¦   «         ¦  «                             ¦   «         d         S d S ©Nr   )r?   Ú_defmatcherÚmatchr;   Úgroups)r   Údefns     r   Ú_raw_function_namezLoc._raw_function_nameR   sR   € Ø×$Ò$Ñ&Ô&ˆØð 	ØÔ#×)Ò)¨$¯*ª*©,¬,Ñ7Ô7×>Ò>Ñ@Ô@ÀÔCÐCð �4r   c                 ót   — | j         €+t          j        |                      ¦   «         ¦  «        | _         | j         S r&   )r   Ú	linecacheÚgetlinesÚ	_get_pathr1   s    r   r9   zLoc.get_linesZ   s.   € ØŒ:Ðå"Ô+¨D¯NªNÑ,<Ô,<Ñ=Ô=ˆDŒJàŒzÐr   c                 ó¾   — d }	 t           j                             | j        ¦  «        }n4# t          $ r' t           j                             | j        ¦  «        }Y nw xY w|S r&   )ÚosÚpathÚrelpathr   Ú
ValueErrorÚabspath)r   rM   s     r   rJ   zLoc._get_patha   sb   € Øˆð	2õ ”7—?’? 4¤=Ñ1Ô1ˆDˆDøÝð 	2ð 	2ð 	2õ ”7—?’? 4¤=Ñ1Ô1ˆDˆDˆDð		2øøøð
 ˆs   „$) ©.AÁAé   c                 óF  — |                       ¦   «         }| j        }| j        rWdg|z   }|rO|rMd||         vrCt          d|¦  «        }|dz   }|||…         }d}t	          |¦  «        D ]\  }	}
d|
v r|	} nŒ||z   }g }|�r1|dk    �r*d„ }|t          d||z
  ¦  «        |…         }d}|D ]}
d|
v rd}Œ	|sgd }t          |d |dz
  …         ¦  «        D ]
}
d|
v r|
} nŒ|r>|                     |¦  «          ||
¦  «        }|                     d	d
|z   z  dz   ¦  «         |r”|                     |d d…         ¦  «         |                     t           	                    |d         ¦  «        ¦  «          ||d         ¦  «        }|                     d	|z  t           
                    d¦  «        z   ¦  «         |s|sd}n|dk    rd}t                               d¦  «        dz   }||                      ¦   «         |t                               d                     |¦  «        ¦  «        fz  }|S )NÚ r8   r   é
   c                 ór   — d}t          j        t          j        t          | ¦  «        ¦  «        D ]}|dz  }Œ|S )Nr   r7   )Ú	itertoolsÚ	takewhileÚstrÚisspace)ÚstringÚspacesr>   s      r   Úcount_spacesz#Loc.strformat.<locals>.count_spaces�   s;   € Ø�Ý"Ô,­S¬[½#¸f¹+¼+ÑFÔFð  ð  �AØ˜a‘K�F�FØ�r   FTr7   ú é   z<source elided>
éÿÿÿÿú^z#<source missing, REPL/exec in use?>z<source line number missing>z
File "%s", line %d:z
%s)r9   r   r   ÚmaxÚ	enumerater:   ÚappendÚextendÚ
_termcolorÚ	highlightÚindicater   rJ   ÚcodeÚjoin)r   Ú	nlines_upr   Úuse_lineÚtmplinesÚmin_lineÚmax_lineÚselectedÚindexÚidxr>   Úretr\   Ú	def_foundr=   r[   ÚerrÚtmps                     r   Ú	strformatzLoc.strformato   s»  € à—’Ñ Ô ˆà”9ˆàÔð 	,ð �t˜e‘|ˆHàð ,˜ð , f°H¸XÔ4FÐ&FÐ&Fõ ˜q (Ñ+Ô+�Ø# b™=�Ø# H¨xÐ$7Ô8�Ø�Ý'¨Ñ1Ô1ð ð ‘F�C˜Ø �{�{Ø #˜Ø˜ð #ð $ eÑ+�ð ˆØñ '	D�X ’\‘\ðð ð ð �S  H¨yÑ$8Ñ9Ô9¸(ÐBÔCˆHð ˆIØð %ð %�Ø˜Q�;�;Ø $�Iøð ð 
Gà�Ý! %¨¨°A©¨Ô"6Ñ7Ô7ð ð �AØ �{�{Ø"#˜Ø˜ð #ð ð GØ—J’J˜wÑ'Ô'Ð'Ø)˜\¨!™_œ_�FØ—J’J˜s A¨¡JÑ/Ð2EÑEÑFÔFÐFàð DØ—
’
˜8 C R Cœ=Ñ)Ô)Ð)Ø—
’
�:×/Ò/°¸´Ñ=Ô=Ñ>Ô>Ð>ð &˜ h¨r¤lÑ3Ô3�Ø—
’
˜3 ™<­*×*=Ò*=¸cÑ*BÔ*BÑBÑCÔCÐCð ð 	5Øð 5Ø;��Ø˜Q’�Ø4�õ ×!Ò!Ð"9Ñ:Ô:¸6ÑAˆØ�T—^’^Ñ%Ô% xµ·²ÀÇÂÈÁÄÑ1NÔ1NÐOÑOˆØˆ
r   c                 ó@   —  t          | ¦  «        | j        ||¦  «        S )z9
        Return a new Loc with this line number.
        )r!   r   )r   r   r   s      r   Úwith_linenozLoc.with_linenoÂ   s    € ð �t�D‰zŒz˜$œ-¨¨sÑ3Ô3Ð3r   c                 ób   — t           j                             | j        ¦  «        }|›d| j        ›�S )z(
        Returns a short string
        r4   )rL   rM   Úbasenamer   r   )r   Úshortfilenames     r   Úshortz	Loc.shortÈ   s.   € õ œ×(Ò(¨¬Ñ7Ô7ˆØ'˜-˜-¨¬¨Ð3Ð3r   ©NF)rQ   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompilerB   r   r$   r(   Úclassmethodr.   r2   r5   r?   rF   r9   rJ   rv   rx   r|   © r   r   r   r      s  € € € € € ðð ð �"”*Ð/Ñ0Ô0€Kð/ð /ð /ð /ðð ð ð&ð &ð &ð ðPð Pñ „[ðPðKð Kð Kð:ð :ð :ðð ð ðð ð ðð ð ðð ð ðQð Qð Qð Qðf4ð 4ð 4ð 4ð4ð 4ð 4ð 4ð 4r   r   zunknown locationc                   ó4   — e Zd Z e¦   «         Zd„ Zd„ Zd„ ZdS )ÚSlotEqualityCheckMixinc                 ó¤   — t          | ¦  «        t          |¦  «        u r1| j        D ]'}t          | |¦  «        t          ||¦  «        k    r dS Œ(dS dS r    )r!   Ú	__slots__Úgetattr)r   r#   Únames      r   r$   zSlotEqualityCheckMixin.__eq__Ú   sa   € Ý�‰:Œ:�˜e™œÐ$Ð$Øœð ð �Ý˜4 Ñ&Ô&­'°%¸Ñ*>Ô*>Ò>Ð>Ø ˜5˜5ð ?ð �tØˆur   c                 óB   — t          | ¦  «        t          |¦  «        k    S r&   ©rX   r"   s     r   Ú__le__zSlotEqualityCheckMixin.__le__ã   s   € Ý�4‰yŒy�C ™JœJÒ&Ð&r   c                 ó    — t          | ¦  «        S r&   ©Úidr1   s    r   Ú__hash__zSlotEqualityCheckMixin.__hash__æ   ó   € Ý�$‰xŒxˆr   N)r~   r   r€   Útupler‰   r$   rŽ   r’   r…   r   r   r‡   r‡   Ô   sN   € € € € € ð �‘”€Iðð ð ð'ð 'ð 'ðð ð ð ð r   r‡   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚEqualityCheckMixinz# Mixin for basic equality checking c                 ó˜   — t          | ¦  «        t          |¦  «        u r+d„ } || j        ¦  «        } ||j        ¦  «        }||k    rdS dS )Nc                 ó^   — d}t          | ¦  «        }|D ]}|                     |d ¦  «         Œ|S )N)ÚlocÚscope)ÚdictÚpop)ÚadictÚbadÚdr>   s       r   Úfixupz(EqualityCheckMixin.__eq__.<locals>.fixupð   s9   € Ø&�Ý˜‘K”K�Øð #ð #�AØ—E’E˜!˜T‘N”N�N�NØ�r   TF)r!   Ú__dict__)r   r#   r    Úd1Úd2s        r   r$   zEqualityCheckMixin.__eq__î   s_   € Ý�‰:Œ:�˜e™œÐ$Ð$ðð ð ð ��t”}Ñ%Ô%ˆBØ��u”~Ñ&Ô&ˆBØ�RŠxˆxØ�tØˆur   c                 óB   — t          | ¦  «        t          |¦  «        k     S r&   r�   r"   s     r   rŽ   zEqualityCheckMixin.__le__ü   s   € Ý�4‰yŒy�3˜u™:œ:Ò%Ð%r   c                 ó    — t          | ¦  «        S r&   r�   r1   s    r   r’   zEqualityCheckMixin.__hash__ÿ   r“   r   N)r~   r   r€   r�   r$   rŽ   r’   r…   r   r   r–   r–   ê   sG   € € € € € à-Ð-ðð ð ð&ð &ð &ðð ð ð ð r   r–   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )ÚVarMapc                 ó   — i | _         d S r&   ©Ú_conr1   s    r   r   zVarMap.__init__  s   € ØˆŒ	ˆ	ˆ	r   c                 óJ   — || j         v rt          |¦  «        ‚|| j         |<   d S r&   )rª   r   )r   r‹   Úvars      r   ÚdefinezVarMap.define  s,   € Ø�4”9ÐÐÝ  Ñ&Ô&Ð&à!ˆDŒI�d‰OˆOˆOr   c                 óX   — 	 | j         |         S # t          $ r t          |¦  «        ‚w xY wr&   )rª   ÚKeyErrorr   ©r   r‹   s     r   Úgetz
VarMap.get  s<   € ð	(Ø”9˜T”?Ð"øÝð 	(ð 	(ð 	(Ý! $Ñ'Ô'Ð'ð	(øøøs   ‚ �)c                 ó   — || j         v S r&   r©   r°   s     r   Ú__contains__zVarMap.__contains__  s   € Ø�t”yÐ Ð r   c                 ó*   — t          | j        ¦  «        S r&   )Úlenrª   r1   s    r   Ú__len__zVarMap.__len__  s   € Ý�4”9‰~Œ~Ðr   c                 ó4   — t          j        | j        ¦  «        S r&   )ÚpprintÚpformatrª   r1   s    r   r2   zVarMap.__repr__  s   € ÝŒ~˜dœiÑ(Ô(Ð(r   c                 ó*   — t          | j        ¦  «        S r&   )Úhashr‹   r1   s    r   r’   zVarMap.__hash__  s   € Ý�D”I‰ŒÐr   c                 ó4   — | j                              ¦   «         S r&   )rª   Úiterkeysr1   s    r   Ú__iter__zVarMap.__iter__  s   € ØŒy×!Ò!Ñ#Ô#Ð#r   c                 óª   — t          | ¦  «        t          |¦  «        u r4| j                             ¦   «         |j                             ¦   «         k    S dS r}   )r!   rª   Úkeysr"   s     r   r$   zVarMap.__eq__"  sA   € Ý�‰:Œ:�˜e™œÐ$Ð$à”9—>’>Ñ#Ô# u¤z§¢Ñ'8Ô'8Ò8Ð8Øˆur   c                 ó.   — |                       |¦  «         S r&   r'   r"   s     r   r(   zVarMap.__ne__(  r)   r   N)r~   r   r€   r   r­   r±   r³   r¶   r2   r’   r¾   r$   r(   r…   r   r   r§   r§     sª   € € € € € ðð ð ð"ð "ð "ð(ð (ð (ð!ð !ð !ðð ð ð)ð )ð )ðð ð ð$ð $ð $ðð ð ð&ð &ð &ð &ð &r   r§   c                   ó   — e Zd ZdZdS )ÚAbstractRHSz{Abstract base class for anything that can be the RHS of an assignment.
    This class **does not** define any methods.
    N)r~   r   r€   r�   r…   r   r   rÃ   rÃ   ,  s   € € € € € ðð ð ð r   rÃ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚInstz-
    Base class for all IR instructions.
    c                 ó   — t           ‚)zO
        List the variables used (read or written) by the instruction.
        )ÚNotImplementedErrorr1   s    r   Ú	list_varszInst.list_vars7  s
   € õ "Ð!r   c                 óÒ  — t          |t          ¦  «        r|gS t          |t          ¦  «        r|                     ¦   «         S t          |t          t
          f¦  «        r1g }|D ]*}|                     |                      |¦  «        ¦  «         Œ+|S t          |t          ¦  «        rCg }| 	                    ¦   «         D ]*}|                     |                      |¦  «        ¦  «         Œ+|S g S )zQ
        A recursive helper used to implement list_vars() in subclasses.
        )
Ú
isinstanceÚVarrÅ   rÈ   Úlistr”   rd   Ú_rec_list_varsr›   Úvalues)r   ÚvalÚlstÚvs       r   rÍ   zInst._rec_list_vars=  sê   € õ �c�3ÑÔð 	Ø�5ˆLÝ˜�TÑ"Ô"ð 	Ø—=’=‘?”?Ð"Ý˜�d¥E˜]Ñ+Ô+ð 	ØˆCØð 3ð 3�Ø—
’
˜4×.Ò.¨qÑ1Ô1Ñ2Ô2Ð2Ð2ØˆJÝ˜�TÑ"Ô"ð 	ØˆCØ—Z’Z‘\”\ð 3ð 3�Ø—
’
˜4×.Ò.¨qÑ1Ô1Ñ2Ô2Ð2Ð2ØˆJàˆIr   N)r~   r   r€   r�   rÈ   rÍ   r…   r   r   rÅ   rÅ   2  s<   € € € € € ðð ð"ð "ð "ðð ð ð ð r   rÅ   c                   ó    — e Zd ZdZdZdZd„ ZdS )ÚStmtzc
    Base class for IR statements (instructions which can appear on their
    own in a Block).
    Fc                 ó6   — |                       | j        ¦  «        S r&   )rÍ   r¡   r1   s    r   rÈ   zStmt.list_vars^  s   € Ø×"Ò" 4¤=Ñ1Ô1Ð1r   N)r~   r   r€   r�   Úis_terminatorÚis_exitrÈ   r…   r   r   rÓ   rÓ   S  s9   € € € € € ðð ð €Mà€Gð2ð 2ð 2ð 2ð 2r   rÓ   c                   ó   — e Zd ZdZdZd„ ZdS )Ú
Terminatorzý
    IR statements that are terminators: the last statement in a block.
    A terminator must either:
    - exit the function
    - jump to a block

    All subclass of Terminator must override `.get_targets()` to return a list
    of jump targets.
    Tc                 ó:   — t          t          | ¦  «        ¦  «        ‚r&   )rÇ   r!   r1   s    r   Úget_targetszTerminator.get_targetsn  s   € Ý!¥$ t¡*¤*Ñ-Ô-Ð-r   N)r~   r   r€   r�   rÕ   rÚ   r…   r   r   rØ   rØ   b  s4   € € € € € ðð ð €Mð.ð .ð .ð .ð .r   rØ   c                   ó  — e Zd ZdZd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
edd	„¦   «         Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Z dS ) ÚExprz]
    An IR expression (an instruction which can only be part of a larger
    statement).
    c                 óŒ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   rX   r   Úopr™   Ú_kws)r   rÞ   r™   Úkwss       r   r   zExpr.__init__x  sG   € Ý˜"�cÑ"Ô"Ð"Ð"Ð"Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒØˆŒ	ˆ	ˆ	r   c                 ó|   — |                      d¦  «        rt                               | |¦  «        S | j        |         S )NÚ_)r<   rÅ   Ú__getattr__rß   r°   s     r   rã   zExpr.__getattr__  s8   € Ø�?Š?˜3ÑÔð 	0Ý×#Ò# D¨$Ñ/Ô/Ð/ØŒy˜ŒÐr   c                 ó:   — |dv r|| j         |<   d S || j        |<   d S )N)rÞ   r™   rß   )r¡   rß   )r   r‹   Úvalues      r   Ú__setattr__zExpr.__setattr__„  s/   € ØÐ(Ð(Ð(Ø"'ˆDŒM˜$ÑÐÐà#ˆDŒI�d‰OˆOˆOr   c           	      óö   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | |||||t          t          ¬¦  «        S )NÚbinop)rÞ   r™   ÚfnÚlhsÚrhsÚ
static_lhsÚ
static_rhs©rÊ   r   rË   r   Ú	UNDEFINED)r,   ré   rê   rë   r™   rÞ   s         r   rè   z
Expr.binopŠ  sˆ   € å˜"Õ1Ñ2Ô2Ð2Ð2Ð2Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c b¨c°sÝ'µIð?ñ ?ô ?ð 	?r   c           
      ó&  — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | ||||||t          t          ¬¦  «        S )NÚinplace_binop)rÞ   r™   ré   Úimmutable_fnrê   rë   rì   rí   rî   )r,   ré   rò   rê   rë   r™   rÞ   s          r   rñ   zExpr.inplace_binop”  s¢   € å˜"Õ1Ñ2Ô2Ð2Ð2Ð2Ý˜,Õ(;Ñ<Ô<Ð<Ð<Ð<Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c b°|Ø Ý'µIð?ñ ?ô ?ð 	?r   c                 óÄ   — t          |t          t          t          f¦  «        sJ ‚t          |t          ¦  «        sJ ‚d}t          j        ||¦  «        } | ||||¬¦  «        S )NÚunary)rÞ   r™   ré   rå   )rÊ   rX   rË   r   r   r   r±   )r,   ré   rå   r™   rÞ   s        r   rô   z
Expr.unary   se   € å˜%¥#¥s­LÐ!9Ñ:Ô:Ð:Ð:Ð:Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆÝ'Ô+¨B°Ñ3Ô3ˆØˆs�b˜c b°Ð6Ñ6Ô6Ð6r   Nc           
      óˆ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | ||||||||¬¦  «        S )NÚcall)rÞ   r™   ÚfuncÚargsrà   ÚvarargÚvarkwargÚtarget©rÊ   rË   r   )	r,   r÷   rø   rà   r™   rù   rú   rû   rÞ   s	            r   rö   z	Expr.call¨  sa   € å˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨°4¸SØ ¨8¸FðDñ Dô Dð 	Dr   c                 óP   — t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚbuild_tuple©rÞ   r™   Úitems©rÊ   r   ©r,   r   r™   rÞ   s       r   rþ   zExpr.build_tuple°  s4   € å˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 óP   — t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚ
build_listrÿ   r  r  s       r   r  zExpr.build_list¶  s4   € å˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 óP   — t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚ	build_setrÿ   r  r  s       r   r  zExpr.build_set¼  s4   € å˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 óV   — t          |t          ¦  «        sJ ‚d} | ||||||¬¦  «        S )NÚ	build_map)rÞ   r™   r   ÚsizeÚliteral_valueÚvalue_indexesr  )r,   r   r	  r
  r  r™   rÞ   s          r   r  zExpr.build_mapÂ  sG   € å˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨°TØ!.¸mðMñ Mô Mð 	Mr   c                 óP   — t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚ
pair_first©rÞ   r™   rå   ©rÊ   rË   ©r,   rå   r™   rÞ   s       r   r  zExpr.pair_firstÉ  s4   € å˜%¥Ñ%Ô%Ð%Ð%Ð%ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 ó~   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚpair_secondr  rü   r  s       r   r  zExpr.pair_secondÏ  sJ   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 ó~   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚgetiterr  rü   r  s       r   r  zExpr.getiterÖ  sJ   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 ó~   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )NÚiternextr  rü   r  s       r   r  zExpr.iternextÝ  sJ   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨Ð/Ñ/Ô/Ð/r   c                 ó®   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | ||||¬¦  «        S )NÚexhaust_iter)rÞ   r™   rå   Úcount)rÊ   rË   Úintr   )r,   rå   r  r™   rÞ   s        r   r  zExpr.exhaust_iterä  sb   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨°eÐ<Ñ<Ô<Ð<r   c                 ó®   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | ||||¬¦  «        S )NrŠ   )rÞ   r™   rå   Úattr)rÊ   rË   rX   r   )r,   rå   r  r™   rÞ   s        r   rŠ   zExpr.getattrì  sb   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨°TÐ:Ñ:Ô:Ð:r   c                 óÈ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d}t          j        } | |||||¬¦  «        S )NÚgetitem)rÞ   r™   rå   rp   ré   ©rÊ   rË   r   Úoperatorr  )r,   rå   rp   r™   rÞ   ré   s         r   r  zExpr.getitemô  sl   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆÝÔˆØˆs�b˜c¨°eÀÐCÑCÔCÐCr   c                 ó‚   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | |||||¬¦  «        S )NÚtyped_getitem)rÞ   r™   rå   Údtyperp   rü   )r,   rå   r#  rp   r™   rÞ   s         r   r"  zExpr.typed_getitemý  sW   € å˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜c¨°eØð ñ  ô  ð 	 r   c                 óÎ   — t          |t          ¦  «        sJ ‚|�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d}t          j        } | ||||||¬¦  «        S )NÚstatic_getitem)rÞ   r™   rå   rp   Ú	index_varré   r  )r,   rå   rp   r&  r™   rÞ   ré   s          r   r%  zExpr.static_getitem  s|   € å˜%¥Ñ%Ô%Ð%Ð%Ð%ØÐ ¥J¨y½#Ñ$>Ô$>Ð Ð Ð Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆÝÔˆØˆs�b˜c¨°eØ&¨2ð/ñ /ô /ð 	/r   c                 ó~   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚d} | |||¬¦  «        S )zE
        A node for implicit casting at the return statement
        Úcast)rÞ   rå   r™   rü   r  s       r   r(  z	Expr.cast  sL   € õ
 ˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b ¨3Ð/Ñ/Ô/Ð/r   c                 óN   — t          |t          ¦  «        sJ ‚ | dg g |¬¦  «        S )zPhi node
        Úphi)rÞ   Úincoming_valuesÚincoming_blocksr™   r  )r,   r™   s     r   r*  zExpr.phi  s3   € õ ˜#�sÑ#Ô#Ð#Ð#Ð#Øˆs�e¨RÀÈÐMÑMÔMÐMr   c                 óV   — t          |t          ¦  «        sJ ‚d} | ||||||¬¦  «        S )z6
        A node for making a function object.
        Úmake_function)rÞ   r‹   rh   ÚclosureÚdefaultsr™   r  )r,   r‹   rh   r/  r0  r™   rÞ   s          r   r.  zExpr.make_function   s=   € õ
 ˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜t¨$¸È(ÐX[Ð\Ñ\Ô\Ð\r   c                 óN   — t          |t          ¦  «        sJ ‚d} | ||¬¦  «        S )z�
        A node for null value.

        This node is not handled by type inference. It is only added by
        post-typing passes.
        Únull)rÞ   r™   r  )r,   r™   rÞ   s      r   r2  z	Expr.null)  s4   € õ ˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜cÐ"Ñ"Ô"Ð"r   c                 óz   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚ | |||¬¦  «        S )a8  
        A node for a dummy value.

        This node is a place holder for carrying information through to a point
        where it is rewritten into something valid. This node is not handled
        by type inference or lowering. It's presence outside of the interpreter
        renders IR as illegal.
        )rÞ   Úinfor™   )rÊ   r   rX   )r,   rÞ   r4  r™   s       r   Údummyz
Expr.dummy5  sG   € õ ˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜"�cÑ"Ô"Ð"Ð"Ð"Øˆs�b˜t¨Ð-Ñ-Ô-Ð-r   c                 óv  — | j         dk    rÙd                     d„ | j        D ¦   «         ¦  «        }t          j        dk    r| j                             ¦   «         n%t          | j                             ¦   «         ¦  «        }d                     d„ |D ¦   «         ¦  «        }| j        �
d| j        ›�nd}d                     t          d |||g¦  «        ¦  «        }d| j
        ›d	|›d
�S | j         dk    rP| j        | j        }}| j        t          j        k    r||}}t!          j        | j        | j        ¦  «        }|›d|›d|›�S t          j        dk    r| j                             ¦   «         n%t          | j                             ¦   «         ¦  «        }d„ |D ¦   «         }| j         ›d	d                     |¦  «        ›d
�S )Nrö   ú, c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r&   r�   )Ú.0Úas     r   ú	<genexpr>z Expr.__repr__.<locals>.<genexpr>E  s(   è è € Ð7Ð7¨�S ™VœVÐ7Ð7Ð7Ð7Ð7Ð7r   r   c              3   ó*   K  — | ]\  }}|›d |›�V — ŒdS ©ú=Nr…   ©r9  ÚkrÑ   s      r   r;  z Expr.__repr__.<locals>.<genexpr>G  s1   è è € ÐDÐD±°°A q q q¨!¨!Ð,ÐDÐDÐDÐDÐDÐDr   Ú*rS   zcall ú(r0   rè   r]   c              3   ó*   K  — | ]\  }}|›d |›�V — ŒdS r=  r…   r?  s      r   r;  z Expr.__repr__.<locals>.<genexpr>S  s1   è è € Ð<Ð<©¨¨A˜q˜q˜q ! !Ð$Ð<Ð<Ð<Ð<Ð<Ð<r   )rÞ   ri   rø   r	   ÚDIFF_IRrß   r   Úsortedrù   Úfilterr÷   rê   rë   ré   r   Úcontainsr   r±   )	r   rø   Ú
pres_orderrà   rù   Úarglistrê   rë   ré   s	            r   r2   zExpr.__repr__C  s£  € ØŒ7�fÒÐØ—9’9Ð7Ð7¨T¬YÐ7Ñ7Ô7Ñ7Ô7ˆDÝ.4¬nÀÒ.AÐ.A˜œŸšÑ*Ô*Ð*ÅvÈdÌiÏoÊoÑN_ÔN_ÑG`ÔG`ˆJØ—)’)ÐDÐD¸ÐDÑDÔDÑDÔDˆCØ/3¬{Ð/FÐ/F˜dœk˜kÐ+Ð+ÈBˆFØ—i’i¥ t¨d°F¸CÐ-@Ñ AÔ AÑBÔBˆGˆGØ$(¤I I I¨w¨w¨wÐ7Ð7ØŒW˜ÒÐØ”x ¤�ˆCØŒw�(Ô+Ò+Ð+Ø �S�Ý&Ô*¨4¬7°D´GÑ<Ô<ˆBØ!$   b b b¨#¨#Ð.Ð.å.4¬nÀÒ.AÐ.A˜œŸšÑ*Ô*Ð*ÅvÈdÌiÏoÊoÑN_ÔN_ÑG`ÔG`ˆJØ<Ð<°Ð<Ñ<Ô<ˆDØ#œw˜w˜w¨¯	ª	°$©¬¨¨Ð8Ð8r   c                 ó6   — |                       | j        ¦  «        S r&   )rÍ   rß   r1   s    r   rÈ   zExpr.list_varsV  s   € Ø×"Ò" 4¤9Ñ-Ô-Ð-r   c                 ó4   — t          d| z  | j        ¬¦  «        ‚©Nz%s©r™   ©r   r™   r1   s    r   Úinfer_constantzExpr.infer_constantY  ó   € Ý$ T¨D¡[°d´hÐ?Ñ?Ô?Ð?r   )NNN)!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.  r2  r5  r2   rÈ   rO  r…   r   r   rÜ   rÜ   r  sä  € € € € € ðð ð
ð ð ðð ð ð
$ð $ð $ð ð?ð ?ñ „[ð?ð ð	?ð 	?ñ „[ð	?ð ð7ð 7ñ „[ð7ð ðDð Dð Dñ „[ðDð ð0ð 0ñ „[ð0ð
 ð0ð 0ñ „[ð0ð
 ð0ð 0ñ „[ð0ð
 ðMð Mñ „[ðMð ð0ð 0ñ „[ð0ð
 ð0ð 0ñ „[ð0ð ð0ð 0ñ „[ð0ð ð0ð 0ñ „[ð0ð ð=ð =ñ „[ð=ð ð;ð ;ñ „[ð;ð ðDð Dñ „[ðDð ð ð  ñ „[ð ð ð/ð /ñ „[ð/ð ð0ð 0ñ „[ð0ð ðNð Nñ „[ðNð ð]ð ]ñ „[ð]ð ð	#ð 	#ñ „[ð	#ð ð.ð .ñ „[ð.ð9ð 9ð 9ð&.ð .ð .ð@ð @ð @ð @ð @r   rÜ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSetItemz
    target[index] = value
    c                 óö   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        d S r&   )rÊ   rË   r   rû   rp   rå   r™   )r   rû   rp   rå   r™   s        r   r   zSetItem.__init__b  sz   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ
ØˆŒ
ØˆŒˆˆr   c                 ó4   — | j         ›d| j        ›d| j        ›�S ©Nú[z] = ©rû   rp   rå   r1   s    r   r2   zSetItem.__repr__l  ó   € Ø $¤  ¨T¬Z¨Z¨Z¸¼¸ÐDÐDr   N©r~   r   r€   r�   r   r2   r…   r   r   rR  rR  ]  sA   € € € € € ðð ðð ð ðEð Eð Eð Eð Er   rR  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚStaticSetItemz(
    target[constant index] = value
    c                 ó2  — t          |t          ¦  «        sJ ‚t          |t          ¦  «        rJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        || _        d S r&   )rÊ   rË   r   rû   rp   r&  rå   r™   )r   rû   rp   r&  rå   r™   s         r   r   zStaticSetItem.__init__u  s—   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜e¥SÑ)Ô)Ð)Ð)Ð)Ý˜)¥SÑ)Ô)Ð)Ð)Ð)Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ
Ø"ˆŒØˆŒ
ØˆŒˆˆr   c                 ó4   — | j         ›d| j        ›d| j        ›�S rU  rW  r1   s    r   r2   zStaticSetItem.__repr__�  rX  r   NrY  r…   r   r   r[  r[  p  sA   € € € € € ðð ð
ð 
ð 
ðEð Eð Eð Eð Er   r[  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚDelItemz
    del target[index]
    c                 óº   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   rË   r   rû   rp   r™   )r   rû   rp   r™   s       r   r   zDelItem.__init__Š  s]   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ
ØˆŒˆˆr   c                 ó(   — d| j         ›d| j        ›d�S )Nzdel rV  ú])rû   rp   r1   s    r   r2   zDelItem.__repr__’  s   € € Ø#œ{˜{˜{¨D¬J¨J¨JÐ7Ð7r   NrY  r…   r   r   r_  r_  …  s<   € € € € € ðð ðð ð ð8ð 8ð 8ð 8ð 8r   r_  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚSetAttrc                 óö   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        d S r&   )rÊ   rË   rX   r   rû   r  rå   r™   )r   rû   r  rå   r™   s        r   r   zSetAttr.__init__—  sz   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ	ØˆŒ
ØˆŒˆˆr   c                 ó6   — d| j         ›d| j        ›d| j        ›�S )NrB  ú).ú = )rû   r  rå   r1   s    r   r2   zSetAttr.__repr__¡  s!   € € Ø!%¤  ¨d¬i¨i¨i¸¼¸ÐDÐDr   N©r~   r   r€   r   r2   r…   r   r   rd  rd  –  s7   € € € € € ðð ð ðEð Eð Eð Eð Er   rd  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚDelAttrc                 óº   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   rË   rX   r   rû   r  r™   )r   rû   r  r™   s       r   r   zDelAttr.__init__¦  s]   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ	ØˆŒˆˆr   c                 ó&   — d| j         ›d| j        ›�S )Nzdel (rg  )rû   r  r1   s    r   r2   zDelAttr.__repr__®  s   € € Ø $¤  ¨T¬Y¨YÐ7Ð7r   Nri  r…   r   r   rk  rk  ¥  s2   € € € € € ðð ð ð8ð 8ð 8ð 8ð 8r   rk  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚStoreMapc                 óö   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        d S r&   )rÊ   rË   r   ÚdctÚkeyrå   r™   )r   rq  rr  rå   r™   s        r   r   zStoreMap.__init__³  sz   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒØˆŒ
ØˆŒˆˆr   c                 ó4   — | j         ›d| j        ›d| j        ›�S rU  )rq  rr  rå   r1   s    r   r2   zStoreMap.__repr__½  s   € Ø $¤  ¨$¬(¨(¨(°D´J°JÐ?Ð?r   Nri  r…   r   r   ro  ro  ²  s7   € € € € € ðð ð ð@ð @ð @ð @ð @r   ro  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚDelc                 ó~   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        d S r&   )rÊ   rX   r   rå   r™   ©r   rå   r™   s      r   r   zDel.__init__Â  s@   € Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒˆˆr   c                 ó   — d| j         z  S )Nzdel %s©rå   r1   s    r   r5   zDel.__str__È  s   € Ø˜$œ*Ñ$Ð$r   N)r~   r   r€   r   r5   r…   r   r   ru  ru  Á  s2   € € € € € ðð ð ð%ð %ð %ð %ð %r   ru  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚRaiseTc                 ó‚   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        d S r&   ©rÊ   rË   r   Ú	exceptionr™   ©r   r~  r™   s      r   r   zRaise.__init__Ï  óE   € ØÐ ¥J¨y½#Ñ$>Ô$>Ð Ð Ð Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ø"ˆŒØˆŒˆˆr   c                 ó   — d| j         z  S )Nzraise %s©r~  r1   s    r   r5   zRaise.__str__Õ  s   € Ø˜DœNÑ*Ð*r   c                 ó   — g S r&   r…   r1   s    r   rÚ   zRaise.get_targetsØ  ó   € Øˆ	r   N)r~   r   r€   rÖ   r   r5   rÚ   r…   r   r   r{  r{  Ì  sF   € € € € € Ø€Gðð ð ð+ð +ð +ðð ð ð ð r   r{  c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚStaticRaisez¼
    Raise an exception class and arguments known at compile-time.
    Note that if *exc_class* is None, a bare "raise" statement is implied
    (i.e. re-raise the current exception).
    Tc                 óÂ   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|�t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   ©rÊ   r!   r   r”   Ú	exc_classÚexc_argsr™   ©r   r‰  rŠ  r™   s       r   r   zStaticRaise.__init__ä  óg   € ØÐ ¥J¨y½$Ñ$?Ô$?Ð Ð Ð Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØÐ¥:¨h½Ñ#>Ô#>ÐÐÐØ"ˆŒØ ˆŒØˆŒˆˆr   c           	      ó¨   — | j         €dS | j        €
d| j         ›�S d| j         ›dd                     t          t          | j        ¦  «        ¦  «        ›d�S )Nz<static> raisez<static> raise rB  r7  r0   ©r‰  rŠ  ri   ÚmapÚreprr1   s    r   r5   zStaticRaise.__str__ì  se   € ØŒ>Ð!Ø#Ð#ØŒ]Ð"Ð"Ø*.¬.¨.Ð:Ð:ð #ð /3¬n¨n¨nØ%)§Y¢Y­sµ4¸¼Ñ/GÔ/GÑ%HÔ%HÐ%HÐ%HðJð Jr   c                 ó   — g S r&   r…   r1   s    r   rÚ   zStaticRaise.get_targetsõ  r„  r   N©r~   r   r€   r�   rÖ   r   r5   rÚ   r…   r   r   r†  r†  Ü  óU   € € € € € ðð ð
 €Gðð ð ðJð Jð Jðð ð ð ð r   r†  c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚDynamicRaisezË
    Raise an exception class and some argument *values* unknown at compile-time.
    Note that if *exc_class* is None, a bare "raise" statement is implied
    (i.e. re-raise the current exception).
    Tc                 óÂ   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|�t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   rˆ  r‹  s       r   r   zDynamicRaise.__init__  rŒ  r   c           	      ó¨   — | j         €dS | j        €
d| j         ›�S d| j         ›dd                     t          t          | j        ¦  «        ¦  «        ›d�S )Nz<dynamic> raisez<dynamic> raise rB  r7  r0   rŽ  r1   s    r   r5   zDynamicRaise.__str__	  se   € ØŒ>Ð!Ø$Ð$ØŒ]Ð"Ð"Ø+/¬>¨>Ð;Ð;ð #ð 04¬~¨~¨~Ø%)§Y¢Y­sµ4¸¼Ñ/GÔ/GÑ%HÔ%HÐ%HÐ%HðJð Jr   c                 ó   — g S r&   r…   r1   s    r   rÚ   zDynamicRaise.get_targets  r„  r   Nr’  r…   r   r   r•  r•  ù  r“  r   r•  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTryRaisezZA raise statement inside a try-block
    Similar to ``Raise`` but does not terminate.
    c                 ó‚   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        d S r&   r}  r  s      r   r   zTryRaise.__init__  r€  r   c                 ó   — d| j         z  S )Nztry_raise %sr‚  r1   s    r   r5   zTryRaise.__str__   s   € Ø ¤Ñ.Ð.r   N©r~   r   r€   r�   r   r5   r…   r   r   rš  rš    s<   € € € € € ðð ðð ð ð/ð /ð /ð /ð /r   rš  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚStaticTryRaisezaA raise statement inside a try-block.
    Similar to ``StaticRaise`` but does not terminate.
    c                 óÂ   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|�t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   rˆ  r‹  s       r   r   zStaticTryRaise.__init__(  rŒ  r   c                 ó¬   — | j         €dS | j        €
d| j         › �S d                     t          t          | j        ¦  «        ¦  «        }d| j         › d|› d�S )NÚstatic_try_raisezstatic_try_raise r7  rB  r0   rŽ  ©r   rø   s     r   r5   zStaticTryRaise.__str__0  s`   € ØŒ>Ð!Ø&Ð&ØŒ]Ð"Ø7 t¤~Ð7Ð7Ð7à—9’9�S¥ t¤}Ñ5Ô5Ñ6Ô6ˆDØ? t¤~Ð?Ð?¸Ð?Ð?Ð?Ð?r   Nr�  r…   r   r   rŸ  rŸ  $  sA   € € € € € ðð ðð ð ð@ð @ð @ð @ð @r   rŸ  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚDynamicTryRaisezbA raise statement inside a try-block.
    Similar to ``DynamicRaise`` but does not terminate.
    c                 óÂ   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|�t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   rˆ  r‹  s       r   r   zDynamicTryRaise.__init__>  rŒ  r   c                 ó¬   — | j         €dS | j        €
d| j         › �S d                     t          t          | j        ¦  «        ¦  «        }d| j         › d|› d�S )NÚdynamic_try_raisezdynamic_try_raise r7  rB  r0   rŽ  r£  s     r   r5   zDynamicTryRaise.__str__F  s`   € ØŒ>Ð!Ø'Ð'ØŒ]Ð"Ø8¨¬Ð8Ð8Ð8à—9’9�S¥ t¤}Ñ5Ô5Ñ6Ô6ˆDØ@¨¬Ð@Ð@¸Ð@Ð@Ð@Ð@r   Nr�  r…   r   r   r¥  r¥  :  sA   € € € € € ðð ðð ð ðAð Að Að Að Ar   r¥  c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )ÚReturnz
    Return to caller.
    Tc                 ó¨   — t          |t          ¦  «        sJ t          |¦  «        ¦   «         ‚t          |t          ¦  «        sJ ‚|| _        || _        d S r&   )rÊ   rË   r!   r   rå   r™   rw  s      r   r   zReturn.__init__V  sN   € Ý˜%¥Ñ%Ô%Ð2Ð2¥t¨E¡{¤{Ñ2Ô2Ð2Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒˆˆr   c                 ó   — d| j         z  S )Nz	return %sry  r1   s    r   r5   zReturn.__str__\  s   € Ø˜TœZÑ'Ð'r   c                 ó   — g S r&   r…   r1   s    r   rÚ   zReturn.get_targets_  r„  r   Nr’  r…   r   r   rª  rª  P  sR   € € € € € ðð ð €Gðð ð ð(ð (ð (ðð ð ð ð r   rª  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚJumpz
    Unconditional branch.
    c                 óP   — t          |t          ¦  «        sJ ‚|| _        || _        d S r&   )rÊ   r   rû   r™   )r   rû   r™   s      r   r   zJump.__init__h  s*   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒˆˆr   c                 ó   — d| j         z  S )Nzjump %s©rû   r1   s    r   r5   zJump.__str__m  s   € Ø˜4œ;Ñ&Ð&r   c                 ó   — | j         gS r&   r²  r1   s    r   rÚ   zJump.get_targetsp  s   € Ø”ˆ}Ðr   N©r~   r   r€   r�   r   r5   rÚ   r…   r   r   r¯  r¯  c  sK   € € € € € ðð ðð ð ð
'ð 'ð 'ðð ð ð ð r   r¯  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚBranchz
    Conditional branch.
    c                 óš   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        d S r&   )rÊ   rË   r   ÚcondÚtruebrÚfalsebrr™   )r   r¸  r¹  rº  r™   s        r   r   zBranch.__init__y  sN   € Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ	ØˆŒØˆŒØˆŒˆˆr   c                 ó6   — d| j         ›d| j        ›d| j        ›�S )Nzbranch r7  )r¸  r¹  rº  r1   s    r   r5   zBranch.__str__�  s!   € € Ø&*¤i i i°´°°¸d¼l¸lÐKÐKr   c                 ó   — | j         | j        gS r&   )r¹  rº  r1   s    r   rÚ   zBranch.get_targets„  s   € Ø”˜Tœ\Ð*Ð*r   Nr´  r…   r   r   r¶  r¶  t  sN   € € € € € ðð ðð ð ðLð Lð Lð+ð +ð +ð +ð +r   r¶  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAssignz
    Assign to a variable.
    c                 óº   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   rÃ   rË   r   rå   rû   r™   )r   rå   rû   r™   s       r   r   zAssign.__init__Œ  s]   € Ý˜%¥Ñ-Ô-Ð-Ð-Ð-Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒØˆŒˆˆr   c                 ó$   — | j         ›d| j        ›�S )Nrh  )rû   rå   r1   s    r   r5   zAssign.__str__”  s   € Ø œK˜K˜K¨¬¨Ð4Ð4r   Nr�  r…   r   r   r¾  r¾  ˆ  s<   € € € € € ðð ðð ð ð5ð 5ð 5ð 5ð 5r   r¾  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚPrintz
    Print some values.
    c                 óî   — t          d„ |D ¦   «         ¦  «        sJ ‚|�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t	          |¦  «        | _        || _        i | _        || _        d S )Nc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r&   r  ©r9  r>   s     r   r;  z!Print.__init__.<locals>.<genexpr>�  s,   è è € Ð4Ð4¨!•:˜a¥Ñ%Ô%Ð4Ð4Ð4Ð4Ð4Ð4r   )	ÚallrÊ   rË   r   r”   rø   rù   r   r™   )r   rø   rù   r™   s       r   r   zPrint.__init__œ  sx   € ÝÐ4Ð4¨tÐ4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Øˆ~¥¨FµCÑ!8Ô!8ˆ~ˆ~ˆ~Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜$‘K”KˆŒ	ØˆŒàˆŒØˆŒˆˆr   c                 óP   — dd                      d„ | j        D ¦   «         ¦  «        z  S )Nz	print(%s)r7  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r&   r�   ©r9  rÑ   s     r   r;  z Print.__str__.<locals>.<genexpr>§  s(   è è € Ð&AÐ&A°!¥s¨1¡v¤vÐ&AÐ&AÐ&AÐ&AÐ&AÐ&Ar   )ri   rø   r1   s    r   r5   zPrint.__str__¦  s*   € Ø˜TŸYšYÐ&AÐ&A°t´yÐ&AÑ&AÔ&AÑAÔAÑAÐAr   Nr�  r…   r   r   rÂ  rÂ  ˜  sA   € € € € € ðð ðð ð ðBð Bð Bð Bð Br   rÂ  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚYieldc                 óŒ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   rË   r   rå   r™   rp   )r   rå   r™   rp   s       r   r   zYield.__init__«  sG   € Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒØˆŒ
ˆ
ˆ
r   c                 ó   — d| j         ›�S )Nzyield ry  r1   s    r   r5   zYield.__str__²  s   € € Ø!œZ˜ZÐ)Ð)r   c                 ó   — | j         gS r&   ry  r1   s    r   rÈ   zYield.list_varsµ  s   € Ø”
ˆ|Ðr   N)r~   r   r€   r   r5   rÈ   r…   r   r   rË  rË  ª  sA   € € € € € ðð ð ð*ð *ð *ðð ð ð ð r   rË  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú	EnterWithzEnter a "with" context
    c                 óš   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        dS )zæ
        Parameters
        ----------
        contextmanager : IR value
        begin, end : int
            The beginning and the ending offset of the with-body.
        loc : ir.Loc instance
            Source location
        N)rÊ   rË   r   ÚcontextmanagerÚbeginÚendr™   )r   rÒ  rÓ  rÔ  r™   s        r   r   zEnterWith.__init__¼  sQ   € õ ˜.­#Ñ.Ô.Ð.Ð.Ð.Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ø,ˆÔØˆŒ
ØˆŒØˆŒˆˆr   c                 ó6   — d                      | j        ¦  «        S )Nzenter_with {})ÚformatrÒ  r1   s    r   r5   zEnterWith.__str__Í  s   € Ø×%Ò% dÔ&9Ñ:Ô:Ð:r   c                 ó   — | j         gS r&   )rÒ  r1   s    r   rÈ   zEnterWith.list_varsÐ  s   € ØÔ#Ð$Ð$r   N)r~   r   r€   r�   r   r5   rÈ   r…   r   r   rÐ  rÐ  ¹  sK   € € € € € ðð ðð ð ð";ð ;ð ;ð%ð %ð %ð %ð %r   rÐ  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚPopBlockz(Marker statement for a pop block op codec                 óB   — t          |t          ¦  «        sJ ‚|| _        d S r&   )rÊ   r   r™   )r   r™   s     r   r   zPopBlock.__init__Ö  s#   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒˆˆr   c                 ó   — dS )NÚ	pop_blockr…   r1   s    r   r5   zPopBlock.__str__Ú  ó   € Øˆ{r   Nr�  r…   r   r   rÙ  rÙ  Ô  s8   € € € € € Ø2Ð2ðð ð ðð ð ð ð r   rÙ  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚArgc                 óº   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   rX   r  r   r‹   rp   r™   )r   r‹   rp   r™   s       r   r   zArg.__init__ß  s]   € Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ	ØˆŒ
ØˆŒˆˆr   c                 ó$   — d| j         | j        fz  S )Nzarg(%d, name=%s))rp   r‹   r1   s    r   r2   zArg.__repr__ç  s   € Ø! T¤Z°´Ð$;Ñ;Ð;r   c                 ó4   — t          d| z  | j        ¬¦  «        ‚rL  rN  r1   s    r   rO  zArg.infer_constantê  rP  r   N)r~   r   r€   r   r2   rO  r…   r   r   rß  rß  Þ  sF   € € € € € ðð ð ð<ð <ð <ð@ð @ð @ð @ð @r   rß  c                   ó(   — e Zd Zdd„Zd„ Zd„ Zd„ ZdS )ÚConstTc                 ó^   — t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   r   rå   r™   Úuse_literal_type)r   rå   r™   ræ  s       r   r   zConst.__init__ï  s4   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒà 0ˆÔÐÐr   c                 óL   — dt          | j        ¦  «        j        ›d| j        ›d�S )Nzconst(r7  r0   )r!   rå   r~   r1   s    r   r2   zConst.__repr__ö  s(   € € Ý"& t¤zÑ"2Ô"2Ô";Ð";Ð";¸T¼Z¸Z¸ZÐHÐHr   c                 ó   — | j         S r&   ry  r1   s    r   rO  zConst.infer_constantù  ó
   € ØŒzÐr   c                 óD   — t          | j        | j        | j        ¬¦  «        S )N)rå   r™   ræ  )rä  rå   r™   ræ  ©r   Úmemos     r   Ú__deepcopy__zConst.__deepcopy__ü  s(   € åØ”* $¤(Ø!Ô2ð
ñ 
ô 
ð 	
r   N©T)r~   r   r€   r   r2   rO  rí  r…   r   r   rä  rä  î  sX   € € € € € ð1ð 1ð 1ð 1ðIð Ið Iðð ð ð
ð 
ð 
ð 
ð 
r   rä  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚGlobalc                 ó^   — t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   r   r‹   rå   r™   )r   r‹   rå   r™   s       r   r   zGlobal.__init__  s1   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ	ØˆŒ
ØˆŒˆˆr   c                 ó(   — d| j         ›d| j        ›d�S )Nzglobal(ú: r0   ©r‹   rå   r1   s    r   r5   zGlobal.__str__  s   € € Ø#'¤9 9 9¨d¬j¨j¨jÐ9Ð9r   c                 ó   — | j         S r&   ry  r1   s    r   rO  zGlobal.infer_constant  ré  r   c                 óf   — t          | j        | j        t          j        | j        ¦  «        ¦  «        S r&   )rð  r‹   rå   ÚcopyÚdeepcopyr™   rë  s     r   rí  zGlobal.__deepcopy__  s&   € õ �d”i ¤­T¬]¸4¼8Ñ-DÔ-DÑEÔEÐEr   N)r~   r   r€   r   r5   rO  rí  r…   r   r   rð  rð    sU   € € € € € ðð ð ð:ð :ð :ðð ð ðFð Fð Fð Fð Fr   rð  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚFreeVarzm
    A freevar, as loaded by LOAD_DECREF.
    (i.e. a variable defined in an enclosing non-global scope)
    c                 óÈ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        || _        d S r&   )rÊ   r  rX   r   rp   r‹   rå   r™   )r   rp   r‹   rå   r™   s        r   r   zFreeVar.__init__  sd   € Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#àˆŒ
àˆŒ	àˆŒ
ØˆŒˆˆr   c                 ó(   — d| j         ›d| j        ›d�S )Nzfreevar(ró  r0   rô  r1   s    r   r5   zFreeVar.__str__)  s   € € Ø$(¤I I I¨t¬z¨z¨zÐ:Ð:r   c                 ó   — | j         S r&   ry  r1   s    r   rO  zFreeVar.infer_constant,  ré  r   c                 óP   — t          | j        | j        | j        | j        ¬¦  «        S )N)rp   r‹   rå   r™   )rú  rp   r‹   rå   r™   rë  s     r   rí  zFreeVar.__deepcopy__/  s*   € å˜TœZ¨d¬i¸t¼zØœ8ð%ñ %ô %ð 	%r   N)r~   r   r€   r�   r   r5   rO  rí  r…   r   r   rú  rú    sZ   € € € € € ðð ð

ð 
ð 
ð;ð ;ð ;ðð ð ð%ð %ð %ð %ð %r   rú  c                   ó|   — e Zd ZdZd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zd	S )
rË   zt
    Attributes
    -----------
    - scope: Scope

    - name: str

    - loc: Loc
        Definition location
    c                 ó¾   — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        || _        d S r&   )rÊ   ÚScoperX   r   rš   r‹   r™   )r   rš   r‹   r™   s       r   r   zVar.__init__B  s^   € àˆ}¥
¨5µ%Ñ 8Ô 8ˆ}ˆ}ˆ}Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒ	ØˆŒˆˆr   c                 óL   — d| j         ›d| j                             ¦   «         ›d�S )NzVar(r7  r0   )r‹   r™   r|   r1   s    r   r2   zVar.__repr__K  s'   € € Ø $¤	 	 	¨4¬8¯>ª>Ñ+;Ô+;Ð+;Ð+;Ð<Ð<r   c                 ó   — | j         S r&   )r‹   r1   s    r   r5   zVar.__str__N  s
   € ØŒyÐr   c                 ó6   — | j                              d¦  «        S )Nú$)r‹   r<   r1   s    r   Úis_tempzVar.is_tempQ  s   € àŒy×#Ò# CÑ(Ô(Ð(r   c                 ór   — | j         j                             ¦   «         D ]\  }}| j        |v r|c S Œ| j        S )zIThe unversioned name of this variable, i.e. SSA renaming removed
        )rš   Úvar_redefinitionsr   r‹   )r   r@  Ú	redef_sets      r   Úunversioned_namezVar.unversioned_nameU  sK   € ð !œJÔ8×>Ò>Ñ@Ô@ð 	ð 	‰LˆAˆyØŒy˜IÐ%Ð%Ø���ð &àŒyÐr   c                 ó@   — | j                              | j        ¦  «        S )z™Known versioned names for this variable, i.e. known variable names in
        the scope that have been formed from applying SSA to this variable
        )rš   Úget_versions_ofr
  r1   s    r   Úversioned_nameszVar.versioned_names^  s   € ð
 Œz×)Ò)¨$Ô*?Ñ@Ô@Ð@r   c                 ó"   — | j         | j        hz  S )zDAll known versioned and unversioned names for this variable
        )r  r
  r1   s    r   Ú	all_nameszVar.all_namese  s   € ð Ô# tÔ'<Ð&>Ñ>Ð>r   N)r~   r   r€   r�   r   r2   r5   Úpropertyr  r
  r  r  r…   r   r   rË   rË   6  sº   € € € € € ð	ð 	ðð ð ð=ð =ð =ðð ð ð ð)ð )ñ „Xð)ð ðð ñ „Xðð ðAð Añ „XðAð ð?ð ?ñ „Xð?ð ?ð ?r   rË   c                   ó`   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zdd„Z	d	„ Z
d
„ Zed„ ¦   «         Zd„ ZdS )r  z¸
    Attributes
    -----------
    - parent: Scope
        Parent scope

    - localvars: VarMap
        Scope-local variable map

    - loc: Loc
        Start of scope location

    c                 ó  — |�t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        t	          ¦   «         | _        || _        t          t          ¦  «        | _	        t          t          ¦  «        | _        d S r&   )rÊ   r  r   Úparentr§   Ú	localvarsr™   r   r  Ú	redefinedÚsetr  )r   r  r™   s      r   r   zScope.__init__{  sm   € Øˆ~¥¨FµEÑ!:Ô!:ˆ~ˆ~ˆ~Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒÝ™œˆŒØˆŒÝ$¥SÑ)Ô)ˆŒÝ!,­SÑ!1Ô!1ˆÔÐÐr   c                 ój   — t          | ||¬¦  «        }| j                             |j        |¦  «         |S )z#
        Define a variable
        ©rš   r‹   r™   )rË   r  r­   r‹   )r   r‹   r™   rÑ   s       r   r­   zScope.define„  s7   € õ �d ¨3Ð/Ñ/Ô/ˆØŒ×Ò˜aœf aÑ(Ô(Ð(Øˆr   c                 ób   — || j         v rd|| j         |         fz  }|                      |¦  «        S )zC
        Refer to a variable.  Returns the latest version.
        ú%s.%d)r  Ú	get_exactr°   s     r   r±   z	Scope.getŒ  s9   € ð �4”>Ð!Ð!Ø˜d D¤N°4Ô$8Ð9Ñ9ˆDØ�~Š~˜dÑ#Ô#Ð#r   c                 óœ   — 	 | j                              |¦  «        S # t          $ r% | j        r| j                             |¦  «        cY S ‚ w xY w)zr
        Refer to a variable.  The returned variable has the exact
        name (exact variable version).
        )r  r±   r   Ú
has_parentr  r°   s     r   r  zScope.get_exact”  s_   € ð
	Ø”>×%Ò% dÑ+Ô+Ð+øÝð 	ð 	ð 	ØŒð Ø”{—’ tÑ,Ô,Ð,Ð,Ð,àð		øøøs   ‚ œ+AÁ	Ac                 óª   — || j         v rd|| j         |         fz  }|| j        vr|                      ||¦  «        S | j                             |¦  «        S )Nr  )r  r  r­   r±   )r   r‹   r™   s      r   Úget_or_definezScope.get_or_define¡  s\   € Ø�4”>Ð!Ð!Ø˜d D¤N°4Ô$8Ð9Ñ9ˆDà�t”~Ð%Ð%Ø—;’;˜t SÑ)Ô)Ð)à”>×%Ò% dÑ+Ô+Ð+r   Tc                 óV  — || j         vr|                      ||¦  «        S |s| j                              |¦  «        S 	 | j        |         }|dz   | j        |<   d||dz   fz  }	 |                      ||¦  «        }| j        |                              |¦  «         n# t          $ r Y Œiw xY w|S )z9
        Redefine if the name is already defined
        Tr7   r  )r  r­   r±   r  r  Úaddr   )r   r‹   r™   ÚrenameÚctÚnewnameÚress          r   ÚredefinezScope.redefineª  sÚ   € ð �t”~Ð%Ð%Ø—;’;˜t SÑ)Ô)Ð)Øð 	ð ”>×%Ò% dÑ+Ô+Ð+ð
Ø”^ DÔ)�Ø')¨A¡v�”˜tÑ$Ø! T¨2°©6 NÑ2�ð>ØŸ+š+ g¨sÑ3Ô3�Cð Ô*¨4Ô0×4Ò4°WÑ=Ô=Ð=Ð=øõ &ð ð ð Ø�Hðøøøð �
s   Á"B Â
B&Â%B&c                 óL   ‡ ‡‡— t          ¦   «         Šˆ ˆˆfd„Š ‰|¦  «         ‰S )z9
        Gets all known versions of a given name
        c                 ó�   •— ‰j                              | d ¦  «        }|r%|D ]$}‰                     |¦  «          ‰|¦  «         Œ#d S d S r&   )r  r±   r!  )ÚthenameÚredefsrÑ   r   ÚversÚwalks      €€€r   r,  z#Scope.get_versions_of.<locals>.walkÆ  sd   ø€ ØÔ+×/Ò/°¸Ñ>Ô>ˆFØð Øð ð �AØ—H’H˜Q‘K”K�KØ�D˜‘G”G�G�Gðð ðð r   )r  )r   r‹   r+  r,  s   ` @@r   r  zScope.get_versions_ofÁ  sG   øøø€ õ ‰uŒuˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆT‰
Œ
ˆ
Øˆr   c                 ó˜   — t          | j        ¦  «        }t          | d|z  |¬¦  «        }| j                             |j        |¦  «         |S )Nz$%dr  )rµ   r  rË   r­   r‹   )r   r™   ÚnrÑ   s       r   Ú	make_tempzScope.make_tempÏ  sH   € Ý�”ÑÔˆÝ�d ¨¡°Ð4Ñ4Ô4ˆØŒ×Ò˜aœf aÑ(Ô(Ð(Øˆr   c                 ó   — | j         d uS r&   )r  r1   s    r   r  zScope.has_parentÕ  s   € àŒ{ $Ð&Ð&r   c                 óJ   — d| j         t          | j        ¦  «        | j        fz  S )Nz%Scope(has_parent=%r, num_vars=%d, %s))r  rµ   r  r™   r1   s    r   r2   zScope.__repr__Ù  s-   € Ø6¸$¼/Ý:=¸d¼nÑ:MÔ:MØ:>¼(ð:Dñ Dð 	Dr   Nrî  )r~   r   r€   r�   r   r­   r±   r  r  r&  r  r/  r  r  r2   r…   r   r   r  r  l  sÊ   € € € € € ðð ð2ð 2ð 2ðð ð ð$ð $ð $ðð ð ð,ð ,ð ,ðð ð ð ð.ð ð ðð ð ð ð'ð 'ñ „Xð'ðDð Dð Dð Dð Dr   r  c                   ó˜   — e Zd ZdZd„ Zd„ Zdd„Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zdd„Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ ZdS )ÚBlockzA code block

    c                 óŒ   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        g | _        || _        d S r&   )rÊ   r  r   rš   Úbodyr™   )r   rš   r™   s      r   r   zBlock.__init__ä  sG   € Ý˜%¥Ñ'Ô'Ð'Ð'Ð'Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒ	ØˆŒˆˆr   c                 ób   — t          | j        | j        ¦  «        }| j        d d …         |_        |S r&   )r3  rš   r™   r5  ©r   Úblocks     r   r÷  z
Block.copyë  s+   € Ý�d”j $¤(Ñ+Ô+ˆØ”Y˜q˜q˜q”\ˆŒ
Øˆr   Nc              #   ó¢   K  — | j         D ]D}t          |t          ¦  «        r-|j        }t          |t          ¦  «        r|�|j        |k    r|V — ŒEdS )zE
        Iterate over exprs of the given *op* in this block.
        N)r5  rÊ   r¾  rå   rÜ   rÞ   )r   rÞ   ÚinstÚexprs       r   Ú
find_exprszBlock.find_exprsð  sg   è è € ð ”Ið 	#ð 	#ˆDÝ˜$¥Ñ'Ô'ð #Ø”z�Ý˜d¥DÑ)Ô)ð #Ø�z T¤W°¢] ]Ø"˜
˜
˜
øð	#ð 	#r   c              #   óF   K  — | j         D ]}t          ||¦  «        r|V — ŒdS )zF
        Iterate over insts of the given class in this block.
        N)r5  rÊ   )r   r,   r:  s      r   Ú
find_instszBlock.find_instsû  s?   è è € ð ”Ið 	ð 	ˆDÝ˜$ Ñ$Ô$ð Ø�
�
�
øð	ð 	r   c                 ój   — |                       t          ¬¦  «        D ]}|j        j        |k    r|c S ŒdS )zr
        Returns the assignment inst associated with variable "name", None if
        it cannot be found.
        )r,   N)r>  r¾  rû   r‹   )r   r‹   r>   s      r   Úfind_variable_assignmentzBlock.find_variable_assignment  sC   € ð
 —’¥V�Ñ,Ô,ð 	ð 	ˆAØŒxŒ} Ò$Ð$Ø���ð %àˆtr   c                 ój   — t          |t          ¦  «        sJ ‚| j                             d|¦  «         d S rA   )rÊ   rÓ   r5  Úinsert©r   r:  s     r   ÚprependzBlock.prepend  s6   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØŒ	×Ò˜˜DÑ!Ô!Ð!Ð!Ð!r   c                 óh   — t          |t          ¦  «        sJ ‚| j                             |¦  «         d S r&   )rÊ   rÓ   r5  rc   rC  s     r   rc   zBlock.append  s4   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØŒ	×Ò˜ÑÔÐÐÐr   c                 ót   — t          |t          ¦  «        sJ ‚| j        | j                             |¦  «        = d S r&   )rÊ   rÓ   r5  rp   rC  s     r   ÚremovezBlock.remove  s6   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØŒI�d”i—o’o dÑ+Ô+Ð,Ð,Ð,r   c                 ó   — | j         d d …= d S r&   ©r5  r1   s    r   ÚclearzBlock.clear  s   € ØŒI�a�a�aˆLˆLˆLr   c                 ó  — |pt           j        }| j        D ]k}t          |d¦  «        r|                     |¦  «         Œ(t          d„ |                     ¦   «         D ¦   «         ¦  «        }t          d|d›d|›�|¬¦  «         Œld S )NÚdumpc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r&   r�   rÉ  s     r   r;  zBlock.dump.<locals>.<genexpr>#  s(   è è € Ð"DÐ"D¨a¥3 q¡6¤6Ð"DÐ"DÐ"DÐ"DÐ"DÐ"Dr   z    Ú40r]   ©Úfile)ÚsysÚstdoutr5  ÚhasattrrL  rE  rÈ   Úprint)r   rP  r:  Ú	inst_varss       r   rL  z
Block.dump  sœ   € àÐ!•s”zˆØ”Ið 	Eð 	EˆDÝ�t˜VÑ$Ô$ð EØ—	’	˜$‘”��å"Ð"DÐ"D°4·>²>Ñ3CÔ3CÐ"DÑ"DÔ"DÑDÔD�	Ý�¨¨¨¨¨i¨iÐ8¸tÐDÑDÔDÐDÐDð	Eð 	Er   c                 ó   — | j         d         S ©Nr_   rI  r1   s    r   Ú
terminatorzBlock.terminator&  s   € àŒy˜Œ}Ðr   c                 ó4   — | j         o| j         d         j        S rW  )r5  rÕ   r1   s    r   Úis_terminatedzBlock.is_terminated*  s   € àŒyÐ8˜TœY rœ]Ô8Ð8r   c                 ó‚   — | j         st          d¦  «        ‚| j        d d…         D ]}|j        rt          d¦  «        ‚Œd S )NzMissing block terminatorr_   z&Terminator before the last instruction)rZ  r   r5  rÕ   rC  s     r   ÚverifyzBlock.verify.  sg   € ØÔ!ð 	@Ý#Ð$>Ñ?Ô?Ð?à”I˜c˜r˜c”Nð 	7ð 	7ˆDØÔ!ð 7Ý'ð )6ñ 7ô 7ð 7ð7ð	7ð 	7r   c                 óv   — | j                              |¦  «        }| j                              |dz   |¦  «         dS )z.
        Insert *stmt* after *other*.
        r7   N)r5  rp   rB  )r   Ústmtr#   rp   s       r   Úinsert_afterzBlock.insert_after7  s9   € ð ”	—’ Ñ&Ô&ˆØŒ	×Ò˜ ™ DÑ)Ô)Ð)Ð)Ð)r   c                 ó|   — t          |t          ¦  «        sJ ‚| j        sJ ‚| j                             d|¦  «         d S rW  )rÊ   rÓ   rZ  r5  rB  )r   r^  s     r   Úinsert_before_terminatorzBlock.insert_before_terminator>  sE   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØÔ!Ð!Ð!Ð!ØŒ	×Ò˜˜TÑ"Ô"Ð"Ð"Ð"r   c                 ó   — d| j         ›d�S )Nz<ir.Block at ú>rM  r1   s    r   r2   zBlock.__repr__C  s   € € Ø%)¤X X XÐ/Ð/r   r&   )r~   r   r€   r�   r   r÷  r<  r>  r@  rD  rc   rG  rJ  rL  r  rX  rZ  r\  r_  ra  r2   r…   r   r   r3  r3  ß  s9  € € € € € ðð ðð ð ðð ð ð
	#ð 	#ð 	#ð 	#ðð ð ð ðð ð ð"ð "ð "ðð ð ð-ð -ð -ðð ð ðEð Eð Eð Eð ðð ñ „Xðð ð9ð 9ñ „Xð9ð7ð 7ð 7ð*ð *ð *ð#ð #ð #ð
0ð 0ð 0ð 0ð 0r   r3  c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚLoopzDescribes a loop-block
    ©ÚentryÚexitc                 ó"   — || _         || _        d S r&   rf  ©r   rg  rh  s      r   r   zLoop.__init__L  ó   € ØˆŒ
ØˆŒ	ˆ	ˆ	r   c                 ó(   — | j         | j        f}d|z  S )NzLoop(entry=%s, exit=%s)rf  r£  s     r   r2   zLoop.__repr__P  ó   € ØŒz˜4œ9Ð$ˆØ(¨4Ñ/Ð/r   N©r~   r   r€   r�   r‰   r   r2   r…   r   r   re  re  G  óA   € € € € € ðð à€Iðð ð ð0ð 0ð 0ð 0ð 0r   re  c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚWithzDescribes a with-block
    rf  c                 ó"   — || _         || _        d S r&   rf  rj  s      r   r   zWith.__init__Z  rk  r   c                 ó(   — | j         | j        f}d|z  S )NzWith(entry=%s, exit=%s)rf  r£  s     r   r2   zWith.__repr__^  rm  r   Nrn  r…   r   r   rq  rq  U  ro  r   rq  c                   ór   — e Zd Zd„ Zd„ Zd„ Zd„ Z	 	 dd„Zd„ Zd	„ Z	d
„ Z
dd„Zdd„Zdd„Zd„ Zdd„Zdd„ZdS )Ú
FunctionIRc                 ó�   — || _         || _        || _        || _        || _        || _        || _        |                      ¦   «          d S r&   )ÚblocksÚis_generatorr-   r™   Ú	arg_countÚ	arg_namesÚ_definitionsÚ_reset_analysis_variables)r   rw  rx  r-   r™   Údefinitionsry  rz  s           r   r   zFunctionIR.__init__e  sM   € àˆŒØ(ˆÔØˆŒØˆŒØ"ˆŒØ"ˆŒà'ˆÔà×&Ò&Ñ(Ô(Ð(Ð(Ð(r   c                 ób   — t          | ¦  «        t          |¦  «        u r| j        |j        k    S dS )aD   Checks that the IR contained within is equal to the IR in other.
        Equality is defined by being equal in fundamental structure (blocks,
        labels, IR node type and the order in which they are defined) and the
        IR nodes being equal. IR node equality essentially comes down to
        ensuring a node's `.__dict__` or `.__slots__` is equal, with the
        exception of ignoring 'loc' and 'scope' entries. The upshot is that the
        comparison is essentially location and scope invariant, but otherwise
        behaves as unsurprisingly as possible.
        F)r!   rw  r"   s     r   Úequal_irzFunctionIR.equal_irr  s/   € õ �‰:Œ:�˜e™œÐ$Ð$Ø”; %¤,Ò.Ð.Øˆur   c           
      ó  ‡— g }| j                              ¦   «         D �]´\  }}|j                              |d¦  «        }|���||k    �r‰|                     d|z                       dd¦  «        ¦  «         d„ |j        D ¦   «         }d„ |j        D ¦   «         }||k    r8t          |¦  «        t          |¦  «        k    r|                     d|z  ¦  «         t          |j        ¦  «        t          |j        ¦  «        k    r|                     d¦  «         n?t          |j        ¦  «        t          |j        ¦  «        k     r|                     d	¦  «         g Št          t          |j        |j        ¦  «        ¦  «        D ]%\  }}	|	\  }
}|
|k    r‰                     |¦  «         Œ&ˆfd
„}t          t          |j        ¦  «        t          |j        ¦  «        ¦  «        }t          ¦   «         5 }d|fd|fg}|D ]Ä\  }}|                     d¦  «         |                     |¬¦  «         |                     ¦   «                              ¦   «         }	 ||j        |¦  «        }|›d|›�}|                     |                     dd¦  «        ¦  «         |                     d„ t          ||	¦  «        D ¦   «         ¦  «         ŒÅ	 ddd¦  «         n# 1 swxY w Y   �Œ¶|g k    r|                     d¦  «         d                     |¦  «        S )zw
        Compute a human readable difference in the IR, returns a formatted
        string ready for printing.
        NzBlock %s differséP   ú-c                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r…   ©rÊ   ru  rÅ  s     r   ú
<listcomp>z'FunctionIR.diff_str.<locals>.<listcomp>Œ  s'   € Ð MÐ MÐ M q½*ÀQÍÑ:LÔ:LÐ M Ð MÐ MÐ Mr   c                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r…   r„  rÅ  s     r   r…  z'FunctionIR.diff_str.<locals>.<listcomp>�  s'   € ÐOÐOÐO Q½JÀqÍ#Ñ<NÔ<NÐO˜qÐOÐOÐOr   z<Block %s contains the same dels but their order is differentz#This block contains more statementsz$Other block contains more statementsc                 óÄ   •— d}t          |¦  «        dz  }g }t          | ¦  «        }t          |¦  «        D ])}|‰v r|}n||k    r|}n|}|                     |¦  «         Œ*|S )Nz-> r]   )rµ   Úrangerc   )	ÚablockÚlÚpointerÚspÚpadÚnstmtÚiÚitemru   s	           €r   Úget_padz$FunctionIR.diff_str.<locals>.get_pad¡  s|   ø€ Ø"'˜Ý  ™\œ\¨CÑ/˜Ø ˜Ý # F¡¤˜Ý!& u¡¤ð -ð -˜AØ  C˜x˜xØ'.  Ø!" a¢ Ø'.  à') ØŸJšJ tÑ,Ô,Ð,Ð,Ø"˜
r   r   r#   r   rO  z: block c                 ó@   — g | ]\  }}d                       ||¦  «        ‘ŒS )z{0}{1}©rÖ  )r9  r:  Úbs      r   r…  z'FunctionIR.diff_str.<locals>.<listcomp>»  s6   € ð (9ð (9ð (9Á$À!ÀQ¨¯ª¸¸1Ñ(=Ô(=ð (9ð (9ð (9r   zIR is considered equivalent.ú
)rw  r   r±   rc   Úcenterr5  rE  rµ   rb   ÚzipÚminr   ÚtruncaterL  ÚgetvalueÚ
splitlinesrd   ri   )r   r#   ÚmsgÚlabelr8  Ú	other_blkÚ	block_delÚoth_delrq   ÚstmtsÚb_sÚo_sr‘  Úmin_stmt_lenÚbufÚitr‹   Ú_blockr�  Útitleru   s                       @r   Údiff_strzFunctionIR.diff_str€  se  ø€ ð
 ˆØ œK×-Ò-Ñ/Ô/ð 6	:ñ 6	:‰LˆE�5Øœ×(Ò(¨°Ñ5Ô5ˆIØÑ$Ø˜IÒ%Ñ%Ø—J’JÐ 2°UÑ :×BÒBÀ2ÀsÑKÔKÑLÔLÐLà MÐ M¨E¬JÐ MÑ MÔ M�IØOÐO¨)¬.ÐOÑOÔO�GØ  GÒ+Ð+õ " )Ñ,Ô,µ°w±´Ò?Ð?ØŸJšJð )CØFKñ(Lñ Mô Mð Må˜5œ:‘”­¨Y¬^Ñ)<Ô)<Ò<Ð<ØŸ
š
Ð#HÑIÔIÐIÐIÝ˜UœZ™œ­3¨y¬~Ñ+>Ô+>Ò>Ð>ØŸ
š
Ð#IÑJÔJÐJð �CÝ&/µ°E´JØ4=´Nñ1Dô 1Dñ 'Eô 'Eð ,ð ,™
˜˜Uà#(™˜˜SØ #š:˜:ØŸJšJ s™OœO˜Oøð#ð #ð #ð #ð #õ $'¥s¨5¬:¡¤½¸I¼NÑ8KÔ8KÑ#LÔ#L�Lå!™œð 
: sØ% u˜o°¸Ð/CÐD˜Ø,.ð :ð :™L˜D &ØŸLšL¨™OœO˜OØ"ŸKšK¨S˜KÑ1Ô1Ð1Ø$'§L¢L¡N¤N×$=Ò$=Ñ$?Ô$?˜EØ") '¨&¬+°|Ñ"DÔ"D˜CØ7;°t°t¸U¸UÐ%C˜EØŸJšJ u§|¢|°B¸Ñ'<Ô'<Ñ=Ô=Ð=ØŸJšJð (9ð (9Ý(+¨C°©¬ð(9ñ (9ô (9ñ :ô :ð :ð :ð:ð
:ð 
:ð 
:ñ 
:ô 
:ð 
:ð 
:ð 
:ð 
:ð 
:ð 
:øøøð 
:ð 
:ð 
:ð 
:ùð �"Š9ˆ9Ø�JŠJÐ5Ñ6Ô6Ð6Ø�yŠy˜‰~Œ~Ðs   Ç)CKËK
	ËK
	c                 ób   — t          j        | ¦  «        | _        d | _        d | _        i | _        d S r&   )r   ÚConstantInferenceÚ_constsÚgenerator_infoÚvariable_lifetimeÚblock_entry_varsr1   s    r   r|  z$FunctionIR._reset_analysis_variablesÁ  s4   € åÔ/°Ñ5Ô5ˆŒð #ˆÔØ!%ˆÔà "ˆÔÐÐr   NFc                 ó  — |t          |¦  «                 }t          j        | ¦  «        }||_        |j        |_        |rd|_        |�||_        |�||_        |                     ¦   «          |j         	                    ¦   «         |_        |S )zÙ
        Derive a new function IR from this one, using the given blocks,
        and possibly modifying the argument count and generator flag.

        Post-processing will have to be run again on the new IR.
        F)
r˜  r÷  rw  r™   rx  ry  rz  r|  r-   Úderive)r   rw  ry  rz  Úforce_non_generatorÚ
firstblockÚnew_irs          r   r±  zFunctionIR.deriveË  s‰   € ð �C ™KœKÔ(ˆ
å”˜4‘”ˆØˆŒØ”^ˆŒ
Øð 	(Ø"'ˆFÔØÐ Ø(ˆFÔØÐ Ø(ˆFÔØ×(Ò(Ñ*Ô*Ð*àœ×.Ò.Ñ0Ô0ˆŒØˆr   c                 óô   — t          j         | ¦  «        }i }i }| j                             ¦   «         D ]7\  }}|                      ¦   «         }|||<   || j        v r| j        |         ||<   Œ8||_        ||_        |S r&   )r÷  rw  r   r¯  )r   r´  rw  r¯  r�  r8  Ú	new_blocks          r   r÷  zFunctionIR.copyã  s‰   € Ý”˜4‘”ˆØˆØÐØ œK×-Ò-Ñ/Ô/ð 	Kð 	K‰LˆE�5ØŸ
š
™œˆIØ%ˆF�5‰MØ˜Ô-Ð-Ð-Ø.2Ô.CÀEÔ.JÐ  Ñ+øØˆŒØ"2ˆÔØˆr   c                 ó   — | j         |         S )zf
        Return a set of variable names possibly alive at the beginning of
        the block.
        )r¯  r7  s     r   Úget_block_entry_varszFunctionIR.get_block_entry_varsð  s   € ð
 Ô$ UÔ+Ð+r   c                 ón   — t          |t          ¦  «        r|j        }| j                             |¦  «        S )zF
        Try to infer the constant value of a given variable.
        )rÊ   rË   r‹   r¬  rO  r°   s     r   rO  zFunctionIR.infer_constant÷  s3   € õ �d�CÑ Ô ð 	Ø”9ˆDØŒ|×*Ò*¨4Ñ0Ô0Ð0r   c                 óF  — |}	 t          |t          ¦  «        r
|}|j        }n t          |t          ¦  «        r|}|}n|r|n|S | j        |         }t          |¦  «        dk    rt          d|›�¦  «        ‚t          |¦  «        dk    rt          d|›�¦  «        ‚|d         }ŒŸ)zÛ
        Get the definition site for the given variable name or instance.
        A Expr instance is returned by default, but if lhs_only is set
        to True, the left-hand-side variable is returned instead.
        Tr   zno definition for r7   zmore than one definition for )rÊ   rË   r‹   rX   r{  rµ   r¯   )r   rå   Úlhs_onlyrê   r‹   Údefss         r   Úget_definitionzFunctionIR.get_definitionÿ  sÐ   € ð ˆð	Ý˜%¥Ñ%Ô%ð 2Ø�Ø”z��Ý˜E¥3Ñ'Ô'ð 2Ø�Ø��à&Ð1�s�s¨EÐ1ØÔ$ TÔ*ˆDÝ�4‰yŒy˜AŠ~ˆ~Ý�hØ"& $ð )ñ *ô *ð *å�4‰yŒy˜1Š}ˆ}Ý�hØ"& $ð )ñ *ô *ð *à˜”GˆEð!	r   c                 ó|  ‡ — |€‰ j                              ¦   «         }n?t          |t          ¦  «        r‰ j         |         g}nˆ fd„t	          |¦  «        D ¦   «         }t          |t
          ¦  «        sJ ‚|D ]5}|                     t          ¦  «        D ]}|j        |k    r|j	        c c S ŒŒ6t          d|z  ¦  «        ‚)z�
        Finds the assignee for a given RHS value. If in_blocks is given the
        search will be limited to the specified blocks.
        Nc                 ó*   •— g | ]}‰j         |         ‘ŒS r…   )rw  )r9  Úblkr   s     €r   r…  z+FunctionIR.get_assignee.<locals>.<listcomp>"  s    ø€ ÐBÐBÐB¨3�d”k #Ô&ÐBÐBÐBr   z!Could not find an assignee for %s)rw  rÎ   rÊ   r  rÌ   rÃ   r>  r¾  rå   rû   rO   )r   Ú	rhs_valueÚ	in_blocksrw  rÀ  Úassigns   `     r   Úget_assigneezFunctionIR.get_assignee  sä   ø€ ð
 ÐØ”[×'Ò'Ñ)Ô)ˆFˆFÝ˜	¥3Ñ'Ô'ð 	CØ”k )Ô,Ð-ˆFˆFàBÐBÐBÐBµ$°y±/´/ÐBÑBÔBˆFå˜)¥[Ñ1Ô1Ð1Ð1Ð1àð 	)ð 	)ˆCØŸ.š.­Ñ0Ô0ð )ð )�Ø”< 9Ò,Ð,Ø!œ=Ð(Ð(Ð(Ð(Ð(ð -ð)õ Ð<¸yÑHÑIÔIÐIr   c           
      ó&  — |d u }|pt          ¦   «         }t          | j                             ¦   «         ¦  «        D ]0\  }}t	          d|›d�|¬¦  «         |                     |¬¦  «         Œ1|r£|                     ¦   «         }t          j        rr	 dd l	}ddl	m
} ddlm} ddlm}	 ddlm}
 t	           || |¦   «          |
 |	¦   «         ¬	¦  «        ¦  «        ¦  «         d S # t           $ r d
}t#          |¦  «        ‚w xY wt	          |¦  «         d S d S )Nzlabel r4   rO  r   )rf   )ÚNumbaIRLexer)Úby_colorscheme)ÚTerminal256Formatter)Ústylez0Please install pygments to see highlighted dumps)r   rE  rw  r   rT  rL  rš  r	   ÚHIGHLIGHT_DUMPSÚpygmentsrf   Únumba.misc.dump_stylerÆ  rÇ  Úpygments.formattersrÈ  ÚImportErrorrO   )r   rP  ÚnofileÚoffsetr8  ÚtextrË  rf   ÚlexerrÇ  rÈ  rœ  s               r   rL  zFunctionIR.dump.  sŠ  € Ø˜�ˆàÐ!•x‘z”zˆÝ# D¤K×$5Ò$5Ñ$7Ô$7Ñ8Ô8ð 	"ð 	"‰MˆF�EÝˆE   Ð)°Ð5Ñ5Ô5Ð5Ø�JŠJ˜DˆJÑ!Ô!Ð!Ð!Øð 	Ø—=’=‘?”?ˆDÝÔ%ð ð2Ø#�O�O�Oð
 3Ð2Ð2Ð2Ð2Ð2ØKÐKÐKÐKÐKÐKØDÐDÐDÐDÐDÐDØHÐHÐHÐHÐHÐHÝ˜)˜) D¨%¨%©'¬'Ð3GÐ3GØ,˜nÑ.Ô.ð40ñ 40ô 40ñ 1ô 1ñ 2ô 2ð 2ð 2ð 2øõ #ð *ð *ð *ØL�CÝ$ S™/œ/Ð)ð*øøøõ �d‘”���ð!	ð 	s   ÂC! Ã!C=c                 ó¦   — t          ¦   «         5 }|                      |¬¦  «         |                     ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )NrO  )r   rL  rš  )r   Úsbs     r   Údump_to_stringzFunctionIR.dump_to_stringH  sŒ   € Ý‰ZŒZð 	!˜2Ø�IŠI˜2ˆIÑÔÐØ—;’;‘=”=ð	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!s   �*AÁA
ÁA
c           	      óF  — |pt           j        }| j        }t          dt	          |j        ¦  «        |¬¦  «         t	          |j                             ¦   «         ¦  «        D ]@\  }}t          d|t	          |j        ¦  «        t	          |j	        ¦  «        fz  |¬¦  «         ŒAd S )Nzgenerator state variables:rO  z>yield point #%d: live variables = %s, weak live variables = %s)
rQ  rR  r­  rT  rE  Ú
state_varsÚyield_pointsr   Ú	live_varsÚweak_live_vars)r   rP  Úgirp   Úyps        r   Údump_generator_infozFunctionIR.dump_generator_infoM  s°   € ØÐ!•s”zˆØÔ ˆÝÐ*­F°2´=Ñ,AÔ,AÈÐMÑMÔMÐMÝ ¤× 5Ò 5Ñ 7Ô 7Ñ8Ô8ð 	ð 	‰IˆE�2ÝÐRØ�F 2¤<Ñ0Ô0µ&¸Ô9JÑ2KÔ2KÐLñMàðñ ô ð ð ð	ð 	r   Únumba_irTc                 óÀ  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY w|                     d                     || j        j        ¦  «        ¬¦  «        }| j                             ¦   «         D �] \  }}t          ¦   «         5 }| 	                    |¦  «         | 
                    ¦   «         }ddd¦  «         n# 1 swxY w Y   |rod                     d„ |                     ¦   «         D ¦   «         ¦  «        }d                     |¦  «        |z   }|                     t          |¦  «        |d	¬
¦  «         ŒÆd                     |¦  «        }|                     t          |¦  «        |d¬
¦  «         �Œ| j                             ¦   «         D ]Q\  }	}|j                             ¦   «         D ]2}
|                     t          |	¦  «        t          |
¦  «        ¦  «         Œ3ŒR|S )zëRender the CFG of the IR with GraphViz DOT via the
        ``graphviz`` python binding.

        Returns
        -------
        g : graphviz.Digraph
            Use `g.view()` to open the graph in the default PDF application.
        r   NzcThe feature requires `graphviz` but it is not available. Please install with `pip install graphviz`z{}{}.dot)r   rS   c                 ó8   — g | ]}d                       |¦  «        ‘ŒS )z  {}\lr“  rÅ  s     r   r…  z)FunctionIR.render_dot.<locals>.<listcomp>t  s&   € ÐEÐEÐE¨Q�Y×%Ò% aÑ(Ô(ÐEÐEÐEr   z
block {}\lÚrect)r�  Úshapez{}\lÚcircle)ÚgraphvizrÎ  ÚDigraphrÖ  r-   Úunique_namerw  r   r   rL  rš  ri   r›  ÚnoderX   rX  rÚ   Úedge)r   Úfilename_prefixÚ
include_irÚgvÚgr@  rÀ  rÔ  r�  ÚsrcÚdsts              r   Ú
render_dotzFunctionIR.render_dotV  s-  € ð	Ø!Ð!Ð!Ð!Ð!øÝð 	ð 	ð 	Ýð=ñô ð ð	øøøð
 �JŠJØ×&Ò&ØØ”Ô(ñô ð ñ 
ô 
ˆð ”k×'Ò'Ñ)Ô)ð 	<ñ 	<‰FˆAˆsÝ‘”ð &˜rØ—’˜‘”�ØŸš™œ�ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð ð <ØŸšØEÐE°%×2BÒ2BÑ2DÔ2DÐEÑEÔEñô �ð &×,Ò,¨QÑ/Ô/°%Ñ7�Ø—’•s˜1‘v”v U°&�Ñ9Ô9Ð9Ð9àŸš qÑ)Ô)�Ø—’•s˜1‘v”v U°(�Ñ;Ô;Ð;Ñ;àœ×)Ò)Ñ+Ô+ð 	+ð 	+‰HˆC�Ø”~×1Ò1Ñ3Ô3ð +ð +�Ø—’•s˜3‘x”x¥ S¡¤Ñ*Ô*Ð*Ð*ð+àˆs   ‚ ‡!Â*B;Â;B?	ÃB?	)NNF)Fr&   )rÞ  T)r~   r   r€   r   r  r©  r|  r±  r÷  r¸  rO  r½  rÄ  rL  rÕ  rÝ  rï  r…   r   r   ru  ru  c  s  € € € € € ð)ð )ð )ðð ð ð?ð ?ð ?ðB#ð #ð #ð 8<Ø#(ðð ð ð ð0ð ð ð,ð ,ð ,ð1ð 1ð 1ðð ð ð ð2Jð Jð Jð Jð,ð ð ð ð4!ð !ð !ð
ð ð ð ð)ð )ð )ð )ð )ð )r   ru  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚUndefinedTypeNc                 ó^   — | j         }|�|S t                               | ¦  «        }|| _         |S r&   )Ú
_singletonÚobjectÚ__new__)r,   Úobjs     r   rõ  zUndefinedType.__new__‡  s0   € ØŒnˆØˆ?ØˆJå—.’. Ñ%Ô%ˆCØ ˆCŒNØˆ
r   c                 ó   — dS )NÚ	Undefinedr…   r1   s    r   r2   zUndefinedType.__repr__�  rÝ  r   )r~   r   r€   ró  rõ  r2   r…   r   r   rñ  rñ  ƒ  s7   € € € € € à€Jðð ð ðð ð ð ð r   rñ  )MÚcollectionsr   r÷  rV   rL   rH   r¸   r‚   rQ  r   Útypesr   r   Ú	functoolsr   Úior   Ú
numba.corer   r	   Únumba.core.utilsr
   r   r   r   Únumba.core.errorsr   r   r   r   r   Ú	termcolorre   rô  r   Úunknown_locr‡   r–   r§   rÃ   rÅ   rÓ   rØ   rÜ   rR  r[  r_  rd  rk  ro  ru  r{  r†  r•  rš  rŸ  r¥  rª  r¯  r¶  r¾  rÂ  rË  rÐ  rÙ  rß  rä  rð  rú  rË   r  r3  re  rq  ru  rñ  rï   r…   r   r   ú<module>r     s	  ðØ #Ð #Ð #Ð #Ð #Ð #Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à %Ð %Ð %Ð %Ð %Ð %Ð %Ð %ðQð Qð Qð Qð Qð Qð Qð Qð Qð Qð Qð QðJð Jð Jð Jð Jð Jð Jð Jð Jð Jð Jð Jà Ð Ð Ð Ð Ð ð ˆVÔÑÔ€
ðt4ð t4ð t4ð t4ð t4ˆ&ñ t4ô t4ð t4ðp ˆcÐ$ a¨Ñ+Ô+€ð ðð ð ð ð ˜Vñ ô ñ „ðð* ðð ð ð ð ˜ñ ô ñ „ðð0&&ð &&ð &&ð &&ð &&ˆVñ &&ô &&ð &&ðRð ð ð ð �&ñ ô ð ðð ð ð ð Ð˜{ñ ô ð ðB2ð 2ð 2ð 2ð 2ˆ4ñ 2ô 2ð 2ð.ð .ð .ð .ð .�ñ .ô .ð .ð h@ð h@ð h@ð h@ð h@ˆ4ñ h@ô h@ð h@ðVEð Eð Eð Eð Eˆdñ Eô Eð Eð&Eð Eð Eð Eð E�Dñ Eô Eð Eð*8ð 8ð 8ð 8ð 8ˆdñ 8ô 8ð 8ð"Eð Eð Eð Eð Eˆdñ Eô Eð Eð
8ð 
8ð 
8ð 
8ð 
8ˆdñ 
8ô 
8ð 
8ð@ð @ð @ð @ð @ˆtñ @ô @ð @ð%ð %ð %ð %ð %ˆ$ñ %ô %ð %ðð ð ð ð ˆJñ ô ð ð ð ð ð ð �*ñ ô ð ð:ð ð ð ð �:ñ ô ð ð:/ð /ð /ð /ð /ˆtñ /ô /ð /ð@ð @ð @ð @ð @�Tñ @ô @ð @ð,Að Að Að Að A�dñ Aô Að Að,ð ð ð ð ˆZñ ô ð ð&ð ð ð ð ˆ:ñ ô ð ð"+ð +ð +ð +ð +ˆZñ +ô +ð +ð(5ð 5ð 5ð 5ð 5ˆTñ 5ô 5ð 5ð Bð Bð Bð Bð BˆDñ Bô Bð Bð$ð ð ð ð ˆDñ ô ð ð%ð %ð %ð %ð %�ñ %ô %ð %ð6ð ð ð ð ˆtñ ô ð ð@ð @ð @ð @ð @Ð
˜kñ @ô @ð @ð 
ð 
ð 
ð 
ð 
Ð ñ 
ô 
ð 
ð,Fð Fð Fð Fð FÐ ñ Fô Fð Fð&%ð %ð %ð %ð %Ð  +ñ %ô %ð %ð>3?ð 3?ð 3?ð 3?ð 3?Ð
˜kñ 3?ô 3?ð 3?ðlpDð pDð pDð pDð pDÐñ pDô pDð pDðfe0ð e0ð e0ð e0ð e0Ðñ e0ô e0ð e0ðP0ð 0ð 0ð 0ð 0Ð!ñ 0ô 0ð 0ð0ð 0ð 0ð 0ð 0Ð!ñ 0ô 0ð 0ð\ð \ð \ð \ð \�ñ \ô \ð \ð@	ð ð ð ð Ð&ñ ô ð ð" ˆM‰OŒO€	€	€	r   