§
    1@ÄjÄÒ  ã                   óº  — 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:\Projects\Historical\venv\Lib\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                 óÂ   — |                       ¦   «         }|rH| j                             |                     ¦   «         ¦  «        }|r|                     ¦   «         d         S d S ©Nr   )r?   Ú_defmatcherÚmatchr;   Úgroups)r   ÚdefnÚms      r   Ú_raw_function_namezLoc._raw_function_nameR   sX   € Ø×$Ò$Ñ&Ô&ˆØð 	%ØÔ ×&Ò& t§z¢z¡|¤|Ñ4Ô4ˆAØð %Ø—x’x‘z”z !”}Ð$àˆtr   c                 óŒ   — | j         €7|                      ¦   «         }|dk    rg nt          j        |¦  «        }|| _         | j         S )Nz<string>)r   Ú	_get_pathÚ	linecacheÚgetlines)r   ÚpathÚlnss      r   r9   zLoc.get_lines[   sH   € ØŒ:ÐØ—>’>Ñ#Ô#ˆDð  
Ò*Ð*�"�"µ	Ô0BÀ4Ñ0HÔ0HˆCØˆDŒJØŒzÐr   c                 ó¾   — d }	 t           j                             | j        ¦  «        }n4# t          $ r' t           j                             | j        ¦  «        }Y nw xY w|S r&   )ÚosrL   Úrelpathr   Ú
ValueErrorÚabspath)r   rL   s     r   rI   zLoc._get_pathe   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   rI   ÚcodeÚjoin)r   Ú	nlines_upr   Úuse_lineÚtmplinesÚmin_lineÚmax_lineÚselectedÚindexÚidxr>   Úretr^   Ú	def_foundr=   r]   ÚerrÚtmps                     r   Ú	strformatzLoc.strformats   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   )rO   rL   Úbasenamer   r   )r   Úshortfilenames     r   Úshortz	Loc.shortÌ   s.   € õ œ×(Ò(¨¬Ñ7Ô7ˆØ'˜-˜-¨¬¨Ð3Ð3r   ©NF)rS   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompilerB   r   r$   r(   Úclassmethodr.   r2   r5   r?   rG   r9   rI   rx   rz   r~   © r   r   r   r      s  € € € € € ðð ð �"”*˜^Ñ,Ô,€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&   ©rZ   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Å   0  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_vars;  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–   rf   Ú_rec_list_varsr�   Úvalues)r   ÚvalÚlstÚvs       r   rÏ   zInst._rec_list_varsA  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Ç   6  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_varsb  s   € Ø×"Ò" 4¤=Ñ1Ô1Ð1r   N)r€   r�   r‚   rƒ   Úis_terminatorÚis_exitrÊ   r‡   r   r   rÕ   rÕ   W  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_targetsr  s   € Ý!¥$ t¡*¤*Ñ-Ô-Ð-r   N)r€   r�   r‚   rƒ   r×   rÜ   r‡   r   r   rÚ   rÚ   f  s4   € € € € € ðð ð €Mð.ð .ð .ð .ð .r   rÚ   c                   ó2  — 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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Ì   rZ   r   Úopr›   Ú_kws)r   rà   r›   Úkwss       r   r   zExpr.__init__|  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Ì   rZ   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Í   rZ   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ç   rr   rë   ©rÌ   rÍ   r   Úoperatorr   )r,   rç   rr   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ç   Údtyperr   rþ   )r,   rç   r%  rr   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ç   rr   Ú	index_varrë   r!  )r,   rç   rr   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�   rj   ÚclosureÚdefaultsr›   r  )r,   r�   rj   r1  r2  r›   rà   s          r   r0  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   r4  z	Expr.null-  s4   € õ ˜#�sÑ#Ô#Ð#Ð#Ð#ØˆØˆs�b˜cÐ"Ñ"Ô"Ð"r   c                 óN   — t          |t          ¦  «        sJ ‚d} | ||¬¦  «        S )zZ
        A node for undefined value specifically from LOAD_FAST_AND_CLEAR opcode.
        Úundefr5  r  r6  s      r   r8  z
Expr.undef9  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   rZ   )r,   rà   r:  r›   s       r   Údummyz
Expr.dummyB  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>R  s(   è è € Ð7Ð7¨�S ™VœVÐ7Ð7Ð7Ð7Ð7Ð7r   r   c              3   ó*   K  — | ]\  }}|›d |›�V — ŒdS ©ú=Nr‡   ©r?  ÚkrÓ   s      r   rA  z Expr.__repr__.<locals>.<genexpr>T  s1   è è € ÐDÐD±°°A q q q¨!¨!Ð,ÐDÐDÐDÐDÐDÐDr   Ú*rU   zcall ú(r0   rê   r_   c              3   ó*   K  — | ]\  }}|›d |›�V — ŒdS rC  r‡   rE  s      r   rA  z Expr.__repr__.<locals>.<genexpr>`  s1   è è € Ð<Ð<©¨¨A˜q˜q˜q ! !Ð$Ð<Ð<Ð<Ð<Ð<Ð<r   )rà   rk   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__P  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_varsc  s   € Ø×"Ò" 4¤9Ñ-Ô-Ð-r   c                 ó4   — t          d| z  | j        ¬¦  «        ‚©Nz%s©r›   ©r   r›   r1   s    r   Úinfer_constantzExpr.infer_constantf  ó   € Ý$ 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,  r0  r4  r8  r;  r2   rÊ   rU  r‡   r   r   rÞ   rÞ   v  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ý   rr   rç   r›   )r   rý   rr   rç   r›   s        r   r   zSetItem.__init__o  sz   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ
ØˆŒ
ØˆŒˆˆr   c                 ó4   — | j         ›d| j        ›d| j        ›�S ©Nú[z] = ©rý   rr   rç   r1   s    r   r2   zSetItem.__repr__y  ó   € Ø $¤  ¨T¬Z¨Z¨Z¸¼¸ÐDÐDr   N©r€   r�   r‚   rƒ   r   r2   r‡   r   r   rX  rX  j  sA   € € € € € ðð ðð ð ðEð Eð Eð Eð Er   rX  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ý   rr   r(  rç   r›   )r   rý   rr   r(  rç   r›   s         r   r   zStaticSetItem.__init__‚  s—   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜e¥SÑ)Ô)Ð)Ð)Ð)Ý˜)¥SÑ)Ô)Ð)Ð)Ð)Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ
Ø"ˆŒØˆŒ
ØˆŒˆˆr   c                 ó4   — | j         ›d| j        ›d| j        ›�S r[  r]  r1   s    r   r2   zStaticSetItem.__repr__Ž  r^  r   Nr_  r‡   r   r   ra  ra  }  sA   € € € € € ðð ð
ð 
ð 
ðEð Eð Eð Eð Er   ra  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ý   rr   r›   )r   rý   rr   r›   s       r   r   zDelItem.__init__—  s]   € Ý˜&¥#Ñ&Ô&Ð&Ð&Ð&Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒ
ØˆŒˆˆr   c                 ó(   — d| j         ›d| j        ›d�S )Nzdel r\  ú])rý   rr   r1   s    r   r2   zDelItem.__repr__Ÿ  s   € € Ø#œ{˜{˜{¨D¬J¨J¨JÐ7Ð7r   Nr_  r‡   r   r   re  re  ’  s<   € € € € € ðð ðð ð ð8ð 8ð 8ð 8ð 8r   re  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Í   rZ   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 )NrH  ú).ú = )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   rj  rj  £  s7   € € € € € ðð ð ðEð Eð Eð Eð Er   rj  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Í   rZ   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 (rm  )rý   r  r1   s    r   r2   zDelAttr.__repr__»  s   € € Ø $¤  ¨T¬Y¨YÐ7Ð7r   Nro  r‡   r   r   rq  rq  ²  s2   € € € € € ðð ð ð8ð 8ð 8ð 8ð 8r   rq  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   rw  rx  rç   r›   s        r   r   zStoreMap.__init__À  sz   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒØˆŒ
ØˆŒˆˆr   c                 ó4   — | j         ›d| j        ›d| j        ›�S r[  )rw  rx  rç   r1   s    r   r2   zStoreMap.__repr__Ê  s   € Ø $¤  ¨$¬(¨(¨(°D´J°JÐ?Ð?r   Nro  r‡   r   r   ru  ru  ¿  s7   € € € € € ðð ð ð@ð @ð @ð @ð @r   ru  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚDelc                 ó~   — t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| _        || _        d S r&   )rÌ   rZ   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   r{  r{  Î  s2   € € € € € ðð ð ð%ð %ð %ð %ð %r   r{  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 rH  r=  r0   ©r�  r�  rk   Ú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 rH  r=  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__5  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 r=  rH  r0   r”  ©r   rú   s     r   r5   zStaticTryRaise.__str__=  s`   € ØŒ>Ð!Ø&Ð&ØŒ]Ð"Ø7 t¤~Ð7Ð7Ð7à—9’9�S¥ t¤}Ñ5Ô5Ñ6Ô6ˆDØ? t¤~Ð?Ð?¸Ð?Ð?Ð?Ð?r   Nr£  r‡   r   r   r¥  r¥  1  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__K  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 r=  rH  r0   r”  r©  s     r   r5   zDynamicTryRaise.__str__S  s`   € ØŒ>Ð!Ø'Ð'ØŒ]Ð"Ø8¨¬Ð8Ð8Ð8à—9’9�S¥ t¤}Ñ5Ô5Ñ6Ô6ˆDØ@¨¬Ð@Ð@¸Ð@Ð@Ð@Ð@r   Nr£  r‡   r   r   r«  r«  G  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›   r}  s      r   r   zReturn.__init__c  sN   € Ý˜%¥Ñ%Ô%Ð2Ð2¥t¨E¡{¤{Ñ2Ô2Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒˆˆr   c                 ó   — d| j         z  S )Nz	return %sr  r1   s    r   r5   zReturn.__str__i  s   € Ø˜TœZÑ'Ð'r   c                 ó   — g S r&   r‡   r1   s    r   rÜ   zReturn.get_targetsl  rŠ  r   Nr˜  r‡   r   r   r°  r°  ]  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__u  s*   € Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒØˆŒˆˆr   c                 ó   — d| j         z  S )Nzjump %s©rý   r1   s    r   r5   zJump.__str__z  s   € Ø˜4œ;Ñ&Ð&r   c                 ó   — | j         gS r&   r¸  r1   s    r   rÜ   zJump.get_targets}  s   € Ø”ˆ}Ðr   N©r€   r�   r‚   rƒ   r   r5   rÜ   r‡   r   r   rµ  rµ  p  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__†  sN   € Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ	ØˆŒØˆŒØˆŒˆˆr   c                 ó6   — d| j         ›d| j        ›d| j        ›�S )Nzbranch r=  )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¼  �  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 )Nrn  )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  ©r?  r>   s     r   rA  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__©  sy   € ÝÐ4Ð4¨tÐ4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Øˆ~¥¨FµCÑ!8Ô!8ˆ~ˆ~Ð8Ý˜#�sÑ#Ô#Ð#Ð#Ð#Ý˜$‘K”KˆŒ	ØˆŒàˆŒØˆŒˆˆr   c                 óP   — dd                      d„ | j        D ¦   «         ¦  «        z  S )Nz	print(%s)r=  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r&   r�   ©r?  rÓ   s     r   rA  z Print.__str__.<locals>.<genexpr>´  s(   è è € Ð&AÐ&A°!¥s¨1¡v¤vÐ&AÐ&AÐ&AÐ&AÐ&AÐ&Ar   )rk   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›   rr   )r   rç   r›   rr   s       r   r   zYield.__init__¸  sG   € Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒØˆŒ
ˆ
ˆ
r   c                 ó   — d| j         ›�S )Nzyield r  r1   s    r   r5   zYield.__str__¿  s   € € Ø!œZ˜ZÐ)Ð)r   c                 ó   — | j         gS r&   r  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Ì   rZ   r  r   r�   rr   r›   )r   r�   rr   r›   s       r   r   zArg.__init__ì  s]   € Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜%¥Ñ%Ô%Ð%Ð%Ð%Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ	ØˆŒ
ØˆŒˆˆr   c                 ó$   — d| j         | j        fz  S )Nzarg(%d, name=%s))rr   r�   r1   s    r   r2   zArg.__repr__ô  s   € Ø! T¤Z°´Ð$;Ñ;Ð;r   c                 ó4   — t          d| z  | j        ¬¦  «        ‚rR  rT  r1   s    r   rU  zArg.infer_constant÷  rV  r   N)r€   r�   r‚   r   r2   rU  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(r=  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&   r  r1   s    r   rU  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   rU  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&   r  r1   s    r   rU  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   rU  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  rZ   r   rr   r�   rç   r›   )r   rr   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__6  s   € € Ø$(¤I I I¨t¬z¨z¨zÐ:Ð:r   c                 ó   — | j         S r&   r  r1   s    r   rU  zFreeVar.infer_constant9  rï  r   c                 óP   — t          | j        | j        | j        | j        ¬¦  «        S )N)rr   r�   rç   r›   )r   rr   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   rU  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	„ 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Ì   ÚScoperZ   r   rœ   r�   r›   )r   rœ   r�   r›   s       r   r   zVar.__init__O  s_   € àˆ}¥
¨5µ%Ñ 8Ô 8ˆ}ˆ}Ð8Ý˜$¥Ñ$Ô$Ð$Ð$Ð$Ý˜#�sÑ#Ô#Ð#Ð#Ð#ØˆŒ
ØˆŒ	ØˆŒˆˆr   c                 óL   — d| j         ›d| j                             ¦   «         ›d�S )NzVar(r=  r0   )r�   r›   r~   r1   s    r   r2   zVar.__repr__X  s'   € € Ø $¤	 	 	¨4¬8¯>ª>Ñ+;Ô+;Ð+;Ð+;Ð<Ð<r   c                 ó   — | j         S r&   )r�   r1   s    r   r5   zVar.__str__[  s
   € ØŒyÐr   c                 ó6   — | j                              d¦  «        S )Nú$)r�   r<   r1   s    r   Úis_tempzVar.is_temp^  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   rF  Ú	redef_sets      r   Úunversioned_namezVar.unversioned_nameb  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_namesk  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_namesr  s   € ð Ô# tÔ'<Ð&>Ñ>Ð>r   c                 ó�   — t          t          j        | j        |¦  «        | j        | j        ¦  «        }||t          | ¦  «        <   |S r&   )rÍ   rý  rþ  rœ   r�   r›   r“   )r   rò  Úouts      r   ró  zVar.__deepcopy__x  s9   € Ý•$”- ¤
¨DÑ1Ô1°4´9¸d¼hÑGÔGˆØˆ�R�‰XŒX‰Øˆ
r   N)r€   r�   r‚   rƒ   r   r2   r5   Úpropertyr  r  r  r  ró  r‡   r   r   rÍ   rÍ   C  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__�  sn   € Øˆ~¥¨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   r4  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�   r3  r4  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  r7  r  r%  r2   r‡   r   r   r  r  ~  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&   )r;  rœ   r›   r=  ©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)r=  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)r=  rÌ   )r   r,   rB  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)rF  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Õ   r=  Úinsert©r   rB  s     r   ÚprependzBlock.prepend  s6   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØŒ	×Ò˜˜DÑ!Ô!Ð!Ð!Ð!r   c                 óh   — t          |t          ¦  «        sJ ‚| j                             |¦  «         d S r&   )rÌ   rÕ   r=  re   rK  s     r   re   zBlock.append#  s4   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØŒ	×Ò˜ÑÔÐÐÐr   c                 ót   — t          |t          ¦  «        sJ ‚| j        | j                             |¦  «        = d S r&   )rÌ   rÕ   r=  rr   rK  s     r   ÚremovezBlock.remove'  s6   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØŒI�d”i—o’o dÑ+Ô+Ð,Ð,Ð,r   c                 ó   — | j         d d …= d S r&   ©r=  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   rA  zBlock.dump.<locals>.<genexpr>5  s(   è è € Ð"DÐ"D¨a¥3 q¡6¤6Ð"DÐ"DÐ"DÐ"DÐ"DÐ"Dr   z    Ú40r_   ©Úfile)ÚsysÚstdoutr=  ÚhasattrrT  rK  rÊ   Úprint)r   rX  rB  Ú	inst_varss       r   rT  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 ©Nra   rQ  r1   s    r   Ú
terminatorzBlock.terminator8  s   € àŒy˜Œ}Ðr   c                 ó4   — | j         o| j         d         j        S r_  )r=  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 terminatorra   z&Terminator before the last instruction)rb  r   r=  r×   rK  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)r=  rr   rJ  )r   Ústmtr#   rr   s       r   Úinsert_afterzBlock.insert_afterI  s9   € ð ”	—’ Ñ&Ô&ˆØŒ	×Ò˜ ™ DÑ)Ô)Ð)Ð)Ð)r   c                 ó|   — t          |t          ¦  «        sJ ‚| j        sJ ‚| j                             d|¦  «         d S r_  )rÌ   rÕ   rb  r=  rJ  )r   rf  s     r   Úinsert_before_terminatorzBlock.insert_before_terminatorP  sE   € Ý˜$¥Ñ%Ô%Ð%Ð%Ð%ØÔ!Ð!Ð!Ð!ØŒ	×Ò˜˜TÑ"Ô"Ð"Ð"Ð"r   c                 ó   — d| j         ›d�S )Nz<ir.Block at ú>rS  r1   s    r   r2   zBlock.__repr__U  s   € € Ø%)¤X X XÐ/Ð/r   r&   )r€   r�   r‚   rƒ   r   rý  rD  rF  rH  rL  re   rO  rR  rT  r  r`  rb  rd  rg  ri  r2   r‡   r   r   r;  r;  ñ  s9  € € € € € ðð ðð ð ðð ð ð
	#ð 	#ð 	#ð 	#ðð ð ð ðð ð ð"ð "ð "ðð ð ð-ð -ð -ðð ð ðEð Eð Eð Eð ðð ñ „Xðð ð9ð 9ñ „Xð9ð7ð 7ð 7ð*ð *ð *ð#ð #ð #ð
0ð 0ð 0ð 0ð 0r   r;  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&   rn  ©r   ro  rp  s      r   r   zLoop.__init__^  ó   € ØˆŒ
ØˆŒ	ˆ	ˆ	r   c                 ó(   — | j         | j        f}d|z  S )NzLoop(entry=%s, exit=%s)rn  r©  s     r   r2   zLoop.__repr__b  ó   € ØŒz˜4œ9Ð$ˆØ(¨4Ñ/Ð/r   N©r€   r�   r‚   rƒ   r‹   r   r2   r‡   r   r   rm  rm  Y  óA   € € € € € ðð à€Iðð ð ð0ð 0ð 0ð 0ð 0r   rm  c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚWithzDescribes a with-block
    rn  c                 ó"   — || _         || _        d S r&   rn  rr  s      r   r   zWith.__init__l  rs  r   c                 ó(   — | j         | j        f}d|z  S )NzWith(entry=%s, exit=%s)rn  r©  s     r   r2   zWith.__repr__p  ru  r   Nrv  r‡   r   r   ry  ry  g  rw  r   ry  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   r  r€  r-   r›   Údefinitionsr�  r‚  s           r   r   zFunctionIR.__init__w  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!   r  r"   s     r   Úequal_irzFunctionIR.equal_ir„  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Ì   r{  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·   Úrangere   )	ÚablockÚlÚpointerÚspÚpadÚnstmtÚiÚitemrw   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   rW  z: block c                 ó@   — g | ]\  }}d                       ||¦  «        ‘ŒS )z{0}{1}©rÜ  )r?  r@  Úbs      r   r�  z'FunctionIR.diff_str.<locals>.<listcomp>Í  s6   € ð (9ð (9ð (9Á$À!ÀQ¨¯ª¸¸1Ñ(=Ô(=ð (9ð (9ð (9r   zIR is considered equivalent.ú
)r  r  r³   re   Úcenterr=  rK  r·   rd   ÚzipÚminr   ÚtruncaterT  ÚgetvalueÚ
splitlinesrf   rk   )r   r#   ÚmsgÚlabelr@  Ú	other_blkÚ	block_delÚoth_delrs   ÚstmtsÚb_sÚo_sr™  Úmin_stmt_lenÚbufÚitr�   Ú_blockr•  Útitlerw   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        n||_        |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.
        NF)
r   rý  r  r›   r€  r�  r‚  r„  r-   Úderive)r   r  r�  r‚  Úforce_non_generatorr›   Ú
firstblockÚnew_irs           r   r¹  zFunctionIR.deriveÝ  s‘   € ð �C ™KœKÔ(ˆ
å”˜4‘”ˆØˆŒØ'* {�Z”^�^¸ˆŒ
Øð 	(Ø"'ˆFÔØÐ Ø(ˆFÔØÐ Ø(ˆFÔØ×(Ò(Ñ*Ô*Ð*àœ×.Ò.Ñ0Ô0ˆŒØˆr   c                 óô   — t          j         | ¦  «        }i }i }| j                             ¦   «         D ]7\  }}|                      ¦   «         }|||<   || j        v r| j        |         ||<   Œ8||_        ||_        |S r&   )rý  r  r  r·  )r   r¼  r  r·  r¥  r@  Ú	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·  r?  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´  rU  r²   s     r   rU  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�   rZ   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‡   )r  )r?  Úblkr   s     €r   r�  z+FunctionIR.get_assignee.<locals>.<listcomp>4  s    ø€ ÐBÐBÐB¨3�d”k #Ô&ÐBÐBÐBr   z!Could not find an assignee for %s)r  rÐ   rÌ   r  rÎ   rÅ   rF  rÄ  rç   rý   rQ   )r   Ú	rhs_valueÚ	in_blocksr  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   rW  r   )rh   )ÚNumbaIRLexer)Úby_colorscheme)ÚTerminal256Formatter)Ústylez0Please install pygments to see highlighted dumps)r   rK  r  r  r\  rT  r¢  r	   ÚHIGHLIGHT_DUMPSÚpygmentsrh   Únumba.misc.dump_stylerÎ  rÏ  Úpygments.formattersrÐ  ÚImportErrorrQ   )r   rX  ÚnofileÚoffsetr@  ÚtextrÓ  rh   ÚlexerrÏ  rÐ  r¤  s               r   rT  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 )NrW  )r   rT  r¢  )r   Úsbs     r   Údump_to_stringzFunctionIR.dump_to_stringZ  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:rW  z>yield point #%d: live variables = %s, weak live variables = %s)
rY  rZ  rµ  r\  rK  Ú
state_varsÚyield_pointsr  Ú	live_varsÚweak_live_vars)r   rX  Úgirr   Úyps        r   Údump_generator_infozFunctionIR.dump_generator_info_  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   rU   c                 ó8   — g | ]}d                       |¦  «        ‘ŒS )z  {}\lr›  rË  s     r   r�  z)FunctionIR.render_dot.<locals>.<listcomp>†  s&   € ÐEÐEÐE¨Q�Y×%Ò% aÑ(Ô(ÐEÐEÐEr   z
block {}\lÚrect)r¥  Úshapez{}\lÚcircle)ÚgraphvizrÖ  ÚDigraphrÜ  r-   Úunique_namer  r  r   rT  r¢  rk   r£  ÚnoderZ   r`  rÜ   Úedge)r   Úfilename_prefixÚ
include_irÚgvÚgrF  rÈ  rÜ  r¥  ÚsrcÚdsts              r   Ú
render_dotzFunctionIR.render_doth  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?	)NNFN)Fr&   )ræ  T)r€   r�   r‚   r   r‡  r±  r„  r¹  rý  rÀ  rU  rÅ  rÌ  rT  rÝ  rå  r÷  r‡   r   r   r}  r}  u  s  € € € € € ð)ð )ð )ðð ð ð?ð ?ð ?ðB#ð #ð #ð 8<Ø.2ðð ð ð ð0ð ð ð,ð ,ð ,ð1ð 1ð 1ðð ð ð ð2Jð Jð Jð Jð,ð ð ð ð4!ð !ð !ð
ð ð ð ð)ð )ð )ð )ð )ð )r   r}  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ý  rX   rO   rJ   rº   r„   rY  r"  Útypesr   r   Ú	functoolsr   Úior   Ú
numba.corer   r	   Únumba.core.utilsr
   r   r   r   Únumba.core.errorsr   r   r   r   r   Ú	termcolorrg   rü  r   Úunknown_locr‰   r˜   r©   rÅ   rÇ   rÕ   rÚ   rÞ   rX  ra  re  rj  rq  ru  r{  r�  rŒ  r›  r   r¥  r«  r°  rµ  r¼  rÄ  rÈ  rÑ  rÖ  rß  rå  rê  rö  r   rÍ   r  r;  rm  ry  r}  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ÔÑÔ€
ðx4ð x4ð x4ð x4ð x4ˆ&ñ x4ô x4ð x4ðx ˆcÐ$ a¨Ñ+Ô+€ð ðð ð ð ð ˜Vñ ô ñ „ðð* ðð ð ð ð ˜ñ ô ñ „ðð0&&ð &&ð &&ð &&ð &&ˆVñ &&ô &&ð &&ðRð ð ð ð �&ñ ô ð ðð ð ð ð Ð˜{ñ ô ð ðB2ð 2ð 2ð 2ð 2ˆ4ñ 2ô 2ð 2ð.ð .ð .ð .ð .�ñ .ô .ð .ð q@ð q@ð q@ð q@ð q@ˆ4ñ q@ô q@ð q@ðh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ð&%ð %ð %ð %ð %Ð  +ñ %ô %ð %ð>8ð 8ð 8ð 8ð 8Ð
˜kñ 8ô 8ð 8ðv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   