§
    ŒŸj%Ÿ  ã                   ó(  — d 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	Z	ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 erddl3m4Z4m5Z5 ddl6m7Z7 ej8        ej9        fZ: ed¬¦  «        Z;dZ< G d„ de=¦  «        Z> e)d¦  «        Z?d„ Z@ G d„ deA¦  «        ZB G d„ deA¦  «        ZC G d„ dejD        ¦  «        ZE eFd„ ejG        D ¦   «         ¦  «        ZHd„ ZIdZJd„ ZK G d „ d!eA¦  «        ZLd"„ ZMd#„ ZNd$„ ZOd%„ ZPd&„ ZQd'„ ZRd(„ ZSd)„ ZTd*„ ZU e¦   «         ZVe;d+„ ¦   «         ZWd,„ ZXd-„ ZYd.„ ZZd/„ Z[d0„ Z\d1„ Z]d2„ Z^ej_        d3k    rdd4l`maZb dS eLZbdS )5a+  
MIT License

Copyright (c) 2021 Alex Hall

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
é    N)Údefaultdict)Údeepcopy)Ú	lru_cache)Úislice)Úzip_longest)Ú
attrgetter)ÚPath)ÚRLock)Údetect_encoding)ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIterableÚIteratorÚListÚOptionalÚSequenceÚSetÚSizedÚTupleÚTypeÚTypeVarÚUnionÚcasté   )Úmangled_nameÚassert_ÚEnhancedASTÚEnhancedInstructionÚInstructionÚget_instructions)Ú	ASTTokensÚASTText)ÚASTTextBase)Úmaxsizec                   ó"   ‡ — e Zd Zg fˆ fd„	Zˆ xZS )ÚNotOneValueFoundc                 óf   •— || _         t          t          | ¦  «                             |¦  «         d S ©N)ÚvaluesÚsuperr(   Ú__init__)ÚselfÚmsgr+   Ú	__class__s      €ú`/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/executing/executing.pyr-   zNotOneValueFound.__init__:   s/   ø€ àˆŒÝÕ˜tÑ$Ô$×-Ò-¨cÑ2Ô2Ð2Ð2Ð2ó    )Ú__name__Ú
__module__Ú__qualname__r-   Ú__classcell__©r0   s   @r1   r(   r(   9   s@   ø€ € € € € Ø!#ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r2   r(   ÚTc                 óŽ  — t          | t          ¦  «        rGt          | ¦  «        dk    rt          dt          | ¦  «        z  ¦  «        ‚t	          | ¦  «        d         S t          t          | d¦  «        ¦  «        }t          |¦  «        dk    rt          d¦  «        ‚t          |¦  «        dk    rt          d|¦  «        ‚|d         S )Nr   zExpected one value, found %sr   é   zExpected one value, found 0z!Expected one value, found several)Ú
isinstancer   Úlenr(   ÚlistÚtupler   )ÚitÚlsts     r1   ÚonlyrA   B   s©   € å�"•eÑÔð Ýˆr‰7Œ7�aŠ<ˆ<Ý"Ð#AÅCÈÁGÄGÑ#KÑLÔLÐLå�B‰xŒx˜Œ{Ðå
•�r˜1‘”Ñ
Ô
€CÝ
ˆ3�x„x�1‚}€}ÝÐ<Ñ=Ô=Ð=Ý
ˆ3�x„x�!‚|€|ÝÐBÀ3ÑGÔGÐGØˆqŒ6€Mr2   c                   óþ   — e Zd ZdZd„ Zedd„¦   «         Ze	 	 dd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed	„ ¦   «         Z
ed
„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ ZdS )ÚSourceaä  
    The source code of a single file and associated metadata.

    The main method of interest is the classmethod `executing(frame)`.

    If you want an instance of this class, don't construct it.
    Ideally use the classmethod `for_frame(frame)`.
    If you don't have a frame, use `for_filename(filename [, module_globals])`.
    These methods cache instances by filename, so at most one instance exists per filename.

    Attributes:
        - filename
        - text
        - lines
        - tree: AST parsed from text, or None if text is not valid Python
            All nodes in the tree have an extra `parent` attribute

    Other methods of interest:
        - statements_at_line
        - asttokens
        - code_qualname
    c                 óÒ  — || _         d                     |¦  «        | _        d„ |D ¦   «         | _        t	          t
          ¦  «        | _        d| _        i | _        d| _	        d| _
        	 t          j        | j        |¬¦  «        | _        t          j        | j        ¦  «        D ]x}t          j        |¦  «        D ]/}t          t           |¦  «        t          t           |¦  «        _        Œ0t%          |¦  «        D ]"}| j        |                              |¦  «         Œ#Œyt)          ¦   «         }|                     | j        ¦  «         |j        | _        dS # t.          t0          f$ r Y dS w xY w)zG
        Don't call this constructor, see the class docstring.
        Ú c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )z
)Úrstrip)Ú.0Úlines     r1   ú
<listcomp>z#Source.__init__.<locals>.<listcomp>r   s$   € Ð<Ð<Ð<¨d�d—k’k &Ñ)Ô)Ð<Ð<Ð<r2   N©Úfilename)rL   ÚjoinÚtextÚlinesr   r=   Ú_nodes_by_lineÚtreeÚ
_qualnamesÚ
_asttokensÚ_asttextÚastÚparseÚwalkÚiter_child_nodesr   r   ÚparentÚnode_linenosÚappendÚQualnameVisitorÚvisitÚ	qualnamesÚSyntaxErrorÚ
ValueError)r.   rL   rO   ÚnodeÚchildÚlinenoÚvisitors          r1   r-   zSource.__init__j   se  € ð !ˆŒØ—G’G˜E‘N”NˆŒ	Ø<Ð<°eÐ<Ñ<Ô<ˆŒ
å)­$Ñ/Ô/ˆÔØˆŒ	ØˆŒØˆŒØˆŒð	0Ýœ	 $¤)°hÐ?Ñ?Ô?ˆDŒIõ œ ¤Ñ+Ô+ð =ð =�Ý Ô1°$Ñ7Ô7ð Nð N�EÝ6:½;ÈÑ6MÔ6M•D� eÑ,Ô,Ô3Ð3Ý*¨4Ñ0Ô0ð =ð =�FØÔ'¨Ô/×6Ò6°tÑ<Ô<Ð<Ð<ð=õ &Ñ'Ô'ˆGØ�MŠM˜$œ)Ñ$Ô$Ð$Ø%Ô/ˆDŒOˆOˆOøõ �ZÐ(ð 	ð 	ð 	ØˆDˆDð	øøøs   Á) E ÅE&Å%E&Tc                 óR   — |                       |j        j        |j        pi |¦  «        S )zb
        Returns the `Source` object corresponding to the file the frame is executing in.
        )Úfor_filenameÚf_codeÚco_filenameÚ	f_globals)ÚclsÚframeÚ	use_caches      r1   Ú	for_framezSource.for_frame‰   s)   € ð ×Ò ¤Ô 8¸%¼/Ð:OÈRÐQZÑ[Ô[Ð[r2   Nc                 óT  ‡‡— t          ‰t          ¦  «        rt          ‰¦  «        Šˆˆfd„}t          j                             ‰¦  «        }t          j        ‰¦  «          |¦   «         }|�|s|t          j        ‰<    |¦   «         }|                      ‰t          |¦  «        ¦  «        S )Nc                  óT   •— t          j        t          t          ‰ ¦  «        ‰¦  «        S r*   )Ú	linecacheÚgetlinesr   Ústr)rL   Úmodule_globalss   €€r1   Ú	get_linesz&Source.for_filename.<locals>.get_linesœ   s    ø€ åÔ%¥d­3°Ñ&9Ô&9¸>ÑJÔJÐJr2   )	r;   r	   rr   rp   ÚcacheÚgetÚ
checkcacheÚ_for_filename_and_linesr>   )rj   rL   rs   rl   rt   ÚentryrO   s    ``    r1   rf   zSource.for_filename‘   sº   øø€ õ �h¥Ñ%Ô%ð 	%Ý˜8‘}”}ˆHð	Kð 	Kð 	Kð 	Kð 	Kð 	Kõ
 ”×#Ò# HÑ-Ô-ˆÝÔ˜XÑ&Ô&Ð&Ø�	‘”ˆØÐ UÐð
 ).�IŒO˜HÑ%Ø�I‘K”KˆEà×*Ò*¨8µU¸5±\´\ÑBÔBÐBr2   c                 óŽ   — |                       di ¦  «        }	 |||f         S # t          $ r Y nw xY w | ||¦  «        x}|||f<   |S )NÚ__source_cache_with_lines)Ú_class_localÚKeyError)rj   rL   rO   Úsource_cacheÚresults        r1   rx   zSource._for_filename_and_lines®   sv   € ð ×'Ò'Ð(CÀRÑHÔHˆð	Ø ¨5Ð 1Ô2Ð2øÝð 	ð 	ð 	ØˆDð	øøøð 47°3°xÀÑ3GÔ3GÐGˆ�˜x¨Ð/Ñ0Øˆs   ˜	" ¢
/®/c                 óN   — t          j        |j        j        |j        ¦  «         d S r*   )rp   Ú	lazycacherg   rh   ri   )rj   rk   s     r1   r�   zSource.lazycacheº   s$   € õ 	Ô˜EœLÔ4°e´oÑFÔFÐFÐFÐFr2   c                 óÆ  — t          |t          j        ¦  «        r|}|j        }|j        }|j        }n|}|j        }|j        }|j        }|t          |¦  «        |f}|  
                    di ¦  «        }|                     |¦  «        }	|	sÍdx}
x}}|                      |¦  «        }|j        }|rž	 |                     |¦  «        }|rFt          |¦  «        rt!          ||||¦  «        \  }}
n!t#          |||||¦  «        }|j        }
|j        }|
r%t)          |
¦  «        h}t+          ||k    ¦  «         |}n# t,          $ r t.          r‚ Y nw xY w||
||fx||<   }	t1          |g|	¢R Ž S )zŽ
        Returns an `Executing` object representing the operation
        currently executing in the given frame or traceback object.
        Ú__executing_cacheN)r;   ÚtypesÚTracebackTypeÚtb_frameÚ	tb_linenoÚtb_lastiÚf_linenoÚf_lastirg   Úidr|   rv   rm   rQ   Ústatements_at_lineÚis_ipython_cell_codeÚfind_node_ipythonÚ
NodeFinderr   Ú	decoratorÚstatement_containing_noder   Ú	ExceptionÚTESTINGÚ	Executing)rj   Úframe_or_tbÚtbrk   rc   ÚlastiÚcodeÚkeyÚexecuting_cacheÚargsra   Ústmtsr�   ÚsourcerQ   Únode_finderÚ	new_stmtss                    r1   Ú	executingzSource.executing¿   sÇ  € õ �k¥5Ô#6Ñ7Ô7ð 	"ð ˆBØ”KˆEØ”\ˆFØ”KˆEˆEàˆEØ”^ˆFØ”MˆEð Œ|ˆØ•R˜‘X”X˜uÐ%ˆØ×*Ò*Ð+>ÀÑCÔCˆà×"Ò" 3Ñ'Ô'ˆØð 	IØ'+Ð+ˆDÐ+�5˜9Ø—]’] 5Ñ)Ô)ˆFØ”;ˆDØð ðØ"×5Ò5°fÑ=Ô=�EØð >Ý/°Ñ5Ô5ð >Ý.?ÀÀuÈeÐU[Ñ.\Ô.\™O˜I t tå*4°U¸EÀ4ÈÐPVÑ*WÔ*W˜KØ#.Ô#5˜DØ(3Ô(=˜Iàð *Ý%>¸tÑ%DÔ%DÐ$E˜	Ý 	¨UÒ 2Ñ3Ô3Ð3Ø )˜øøÝ ð ð ð Ýð Øðð ðøøøð +1°$¸¸yÐ*HÐHˆO˜CÑ  4å˜Ð& Ð&Ð&Ð&Ð&s   Â.BD3 Ä3EÅEc                 ó^   — | j                              ||¦  «        }t          | ||¦  «         |S )z‹
        Returns an attribute directly associated with this class
        (as opposed to subclasses), setting default if necessary
        )Ú__dict__rv   Úsetattr)rj   ÚnameÚdefaultr   s       r1   r|   zSource._class_localù   s2   € ð ”×!Ò! $¨Ñ0Ô0ˆÝ��T˜6Ñ"Ô"Ð"Øˆr2   c                 ó0   — d„ | j         |         D ¦   «         S )az  
        Returns the statement nodes overlapping the given line.

        Returns at most one statement unless semicolons are present.

        If the `text` attribute is not valid python, meaning
        `tree` is None, returns an empty set.

        Otherwise, `Source.for_frame(frame).statements_at_line(frame.f_lineno)`
        should return at least one statement.
        c                 ó,   — h | ]}t          |¦  «        ’ŒS © )r‘   )rH   ra   s     r1   ú	<setcomp>z,Source.statements_at_line.<locals>.<setcomp>  s0   € ð 
ð 
ð 
àõ & dÑ+Ô+ð
ð 
ð 
r2   )rP   )r.   rc   s     r1   rŒ   zSource.statements_at_line  s-   € ð
ð 
ð Ô Ô'ð
ñ 
ô 
ð 	
r2   c                 ón   — ddl m} | j        €" || j        | j        | j        ¬¦  «        | _        | j        S )zŸ
        Returns an ASTText object for getting the source of specific AST nodes.

        See http://asttokens.readthedocs.io/en/latest/api-index.html
        r   )r$   N©rQ   rL   )Ú	asttokensr$   rT   rN   rQ   rL   )r.   r$   s     r1   ÚasttextzSource.asttext  sD   € ð 	&Ð%Ð%Ð%Ð%Ð%àŒ=Ð Ø#˜G D¤I°D´IÈÌÐVÑVÔVˆDŒMàŒ}Ðr2   c                 óÜ   — ddl }| j        €[t          |d¦  «        r|                      ¦   «         j         | _        n,|                     | j        | j        | j        ¬¦  «        | _        | j        S )z¡
        Returns an ASTTokens object for getting the source of specific AST nodes.

        See http://asttokens.readthedocs.io/en/latest/api-index.html
        r   Nr$   r«   )r¬   rS   Úhasattrr­   r#   rN   rQ   rL   ©r.   r¬   s     r1   r¬   zSource.asttokens(  sk   € ð 	ÐÐÐàŒ?Ð"Ý�y )Ñ,Ô,ð iØ"&§,¢,¡.¤.Ô":�”�à"+×"5Ò"5°d´iÀdÄiÐZ^ÔZgÐ"5Ñ"hÔ"h�”ØŒÐr2   c                 óz   — dd l }t          |d¦  «        r|                      ¦   «         S |                       ¦   «         S )Nr   r$   )r¬   r¯   r­   r°   s     r1   Ú_asttext_basezSource._asttext_base8  s>   € àÐÐÐå�9˜iÑ(Ô(ð 	$Ø—<’<‘>”>Ð!à—>’>Ñ#Ô#Ð#r2   c                 óŽ   — t          | t          ¦  «        r/t                               | ¦  «        }|                      |¦  «        S | S r*   )r;   ÚbytesrC   r   Údecode)r�   Úencodings     r1   Údecode_sourcezSource.decode_sourceA  s@   € õ �f�eÑ$Ô$ð 	Ý×-Ò-¨fÑ5Ô5ˆHØ—=’= Ñ*Ô*Ð*àˆMr2   c                 óZ   — t          t          j        | ¦  «        j        ¦  «        d         S )Nr   )r   ÚioÚBytesIOÚreadline)r�   s    r1   r   zSource.detect_encodingJ  s$   € õ �rœz¨&Ñ1Ô1Ô:Ñ;Ô;¸AÔ>Ð>r2   c                 ó”   — t          |j        | j        k    ¦  «         | j                             |j        |j        f|j        ¦  «        S )a  
        Imitates the __qualname__ attribute of functions for code objects.
        Given:

            - A function `func`
            - A frame `frame` for an execution of `func`, meaning:
                `frame.f_code is func.__code__`

        `Source.for_frame(frame).code_qualname(frame.f_code)`
        will be equal to `func.__qualname__`*. Works for Python 2 as well,
        where of course no `__qualname__` attribute exists.

        Falls back to `code.co_name` if there is no appropriate qualname.

        Based on https://github.com/wbolster/qualname

        (* unless `func` is a lambda
        nested inside another lambda on the same line, in which case
        the outer lambda's qualname will be returned for the codes
        of both lambdas)
        )r   rh   rL   rR   rv   Úco_nameÚco_firstlineno©r.   r˜   s     r1   Úcode_qualnamezSource.code_qualnameO  s@   € õ. 	�Ô  D¤MÒ1Ñ2Ô2Ð2ØŒ×"Ò" D¤L°$Ô2EÐ#FÈÌÑUÔUÐUr2   )T©NT)r3   r4   r5   Ú__doc__r-   Úclassmethodrm   rf   rx   r�   r    r|   ru   rŒ   r­   r¬   r²   Ústaticmethodr·   r   rÀ   r¨   r2   r1   rC   rC   R   s  € € € € € ðð ð.0ð 0ð 0ð> ð\ð \ð \ñ „[ð\ð ð Øð	Cð Cð Cñ „[ðCð8 ð	ð 	ñ „[ð	ð ðGð Gñ „[ðGð ð7'ð 7'ñ „[ð7'ðr ð	ð 	ñ „[ð	ð ð
ð 
ñ „Uð
ð(ð ð ðð ð ð $ð $ð $ð ðð ñ „\ðð ð?ð ?ñ „\ð?ðVð Vð Vð Vð Vr2   rC   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )r”   a�  
    Information about the operation a frame is currently executing.

    Generally you will just want `node`, which is the AST node being executed,
    or None if it's unknown.

    If a decorator is currently being called, then:
        - `node` is a function or class definition
        - `decorator` is the expression in `node.decorator_list` being called
        - `statements == {node}`
    c                 óL   — || _         || _        || _        || _        || _        d S r*   )rk   r�   ra   Ú
statementsr�   )r.   rk   r�   ra   rœ   r�   s         r1   r-   zExecuting.__init__w  s)   € àˆŒ
ØˆŒØˆŒ	ØˆŒØ"ˆŒˆˆr2   c                 óJ   — | j                              | j        j        ¦  «        S r*   )r�   rÀ   rk   rg   ©r.   s    r1   rÀ   zExecuting.code_qualname  s   € àŒ{×(Ò(¨¬Ô):Ñ;Ô;Ð;r2   c                 ód   — | j                              ¦   «                              | j        ¦  «        S r*   )r�   r²   Úget_textra   rÉ   s    r1   rN   zExecuting.textƒ  s&   € àŒ{×(Ò(Ñ*Ô*×3Ò3°D´IÑ>Ô>Ð>r2   c                 ód   — | j                              ¦   «                              | j        ¦  «        S r*   )r�   r²   Úget_text_rangera   rÉ   s    r1   Ú
text_rangezExecuting.text_range‡  s&   € àŒ{×(Ò(Ñ*Ô*×9Ò9¸$¼)ÑDÔDÐDr2   N)r3   r4   r5   rÂ   r-   rÀ   rN   rÎ   r¨   r2   r1   r”   r”   j  s_   € € € € € ð
ð 
ð#ð #ð #ð<ð <ð <ð?ð ?ð ?ðEð Eð Eð Eð Er2   r”   c                   ó>   ‡ — e Zd Zˆ fd„Zdd„Zdd„ZeZd„ Zd„ Zˆ xZ	S )r\   c                 ór   •— t          t          | ¦  «                             ¦   «          g | _        i | _        d S r*   )r,   r\   r-   Ústackr^   )r.   r0   s    €r1   r-   zQualnameVisitor.__init__�  s1   ø€ å�o˜tÑ$Ô$×-Ò-Ñ/Ô/Ð/ØˆŒ
ØˆŒˆˆr2   Nc                 ó  — |p|j         }| j                             |¦  «         t          |dd¦  «        r|j        d         j        }n|j        }| j                             ||fd                     | j        ¦  «        ¦  «         d S )NÚdecorator_listr¨   r   ú.)	r¤   rÑ   r[   ÚgetattrrÓ   rc   r^   Ú
setdefaultrM   )r.   ra   r¤   rc   s       r1   Úadd_qualnamezQualnameVisitor.add_qualname“  s‚   € àÐ �t”yˆØŒ
×Ò˜$ÑÔÐÝ�4Ð)¨2Ñ.Ô.ð 	!ØÔ(¨Ô+Ô2ˆFˆFà”[ˆFØŒ×!Ò! 4¨ .°#·(²(¸4¼:Ñ2FÔ2FÑGÔGÐGÐGÐGr2   c                 ó   — t          |t          j        t          j        t          j        f¦  «        s
J |¦   «         ‚|                      ||¦  «         | j                             d¦  «         g }t          |t          j        ¦  «        r	|j        g}n|j        }|D ]}|  	                    |¦  «         Œ| j         
                    ¦   «          | j         
                    ¦   «          t          j        |¦  «        D ]…\  }}|dk    rŒt          |t          j        ¦  «        r|  	                    |¦  «         Œ<t          |t          ¦  «        r4|D ]1}t          |t          j        ¦  «        r|  	                    |¦  «         Œ2Œ†d S )Nz<locals>Úbody)r;   rU   ÚFunctionDefÚAsyncFunctionDefÚLambdar×   rÑ   r[   rÙ   r]   ÚpopÚiter_fieldsÚASTr=   )r.   ra   r¤   Úchildrenrb   ÚfieldÚ
grandchilds          r1   Úvisit_FunctionDefz!QualnameVisitor.visit_FunctionDef�  su  € å˜$¥¤µ#Ô2FÍÌ
Ð SÑTÔTÐZÐZÐVZÑZÔZÐZØ×Ò˜$ Ñ%Ô%Ð%ØŒ
×Ò˜*Ñ%Ô%Ð%ØˆÝ�d�CœJÑ'Ô'ð 	!Øœ	�{ˆHˆHà”yˆHØð 	ð 	ˆEØ�JŠJ�uÑÔÐÐØŒ
�ŠÑÔÐØŒ
�ŠÑÔÐõ
  œO¨DÑ1Ô1ð 	/ð 	/‰LˆE�5Ø˜ŠˆØÝ˜%¥¤Ñ)Ô)ð /Ø—
’
˜5Ñ!Ô!Ð!Ð!Ý˜E¥4Ñ(Ô(ð /Ø"'ð /ð /�JÝ! *­c¬gÑ6Ô6ð /ØŸ
š
 :Ñ.Ô.Ð.øøð	/ð 	/r2   c                 ój   — t          |t          j        ¦  «        sJ ‚|                      |d¦  «         d S )Nz<lambda>)r;   rU   rÜ   rã   ©r.   ra   s     r1   Úvisit_LambdazQualnameVisitor.visit_Lambda»  s6   € å˜$¥¤
Ñ+Ô+Ð+Ð+Ð+Ø×Ò˜t ZÑ0Ô0Ð0Ð0Ð0r2   c                 óÄ   — t          |t          j        ¦  «        sJ ‚|                      |¦  «         |                      |¦  «         | j                             ¦   «          d S r*   )r;   rU   ÚClassDefr×   Úgeneric_visitrÑ   rÝ   rå   s     r1   Úvisit_ClassDefzQualnameVisitor.visit_ClassDefÀ  sZ   € å˜$¥¤Ñ-Ô-Ð-Ð-Ð-Ø×Ò˜$ÑÔÐØ×Ò˜4Ñ Ô Ð ØŒ
�ŠÑÔÐÐÐr2   r*   )
r3   r4   r5   r-   r×   rã   Úvisit_AsyncFunctionDefræ   rê   r6   r7   s   @r1   r\   r\   Œ  sŠ   ø€ € € € € ðð ð ð ð ðHð Hð Hð Hð/ð /ð /ð /ð8 /Ðð1ð 1ð 1ð
ð ð ð ð ð ð r2   r\   c              #   óJ   K  — | ]}t          t          |¦  «        j        V — Œd S r*   )rÕ   Ú
__future__Úcompiler_flag)rH   Úfnames     r1   ú	<genexpr>rð   Ë  s@   è è € ð ð Ø16…G�J˜ÑÔÔ,ðð ð ð ð ð r2   c                 óN   — t          | |j        dt          |j        z  d¬¦  «        S )NÚexecT)ÚflagsÚdont_inherit)Úcompilerh   Úfuture_flagsÚco_flags)r�   Úmatching_codes     r1   Úcompile_similar_torù   Ð  s3   € åØØÔ!ØÝ˜]Ô3Ñ3Øðñ ô ð r2   Ú8io8urthglkjdghvljusketgIYRFYUVGHFRTBGVHKGF78678957647698c                 óN   — t          d„ t          | ¦  «        D ¦   «         ¦  «        S )Nc              3   ó”   K  — | ]C}|j         d k    o3t          |j        t          ¦  «        o|j                             d¦  «        V — ŒDdS )Ú
LOAD_CONSTz@pyN)Úopnamer;   Úargvalrr   Ú
startswith)rH   Úbcs     r1   rð   z)is_rewritten_by_pytest.<locals>.<genexpr>ß  sd   è è € ð ð àð 	Œ	�\Ò!Ð_¥j°´½3Ñ&?Ô&?Ð_ÀBÄI×DXÒDXÐY^ÑD_ÔD_ðð ð ð ð ð r2   )Úanyr"   ©r˜   s    r1   Úis_rewritten_by_pytestr  Ý  s8   € åð ð å" 4Ñ(Ô(ðñ ô ñ ô ð r2   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ ZdS )
ÚSentinelNodeFinderNc                 óÌ  ‡
‡‡‡‡— t          |¦  «         || _        || _        |j        x| _        }t          |¦  «        | _        | j        r"t          t          |¦  «        ¦  «        | _	        nt          ¦   «         | _	        d | _
        |                      |¦  «        x| _        Š‰j        }d„ Št          d ¦  «        Š
t          d ¦  «        Š|                     d¦  «        rt           j        Š�n5|                     d¦  «        rt           j        Št           j        Š
�n|                     d¦  «        rÁt           j        Št+          t           j        t           j        t1          t           dd¦  «        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j         t           j!        t           j"        ¬¦  «        |         Šˆfd„Š�n0|                     d	¦  «        rSt           j#        Št+          t           j$        t           j%        t           j&        t           j'        ¬
¦  «        |         Šˆfd„ŠnÈ|dv rt           j(        Št           j        Š
ˆfd„Šn¦|dv rt           j)        Št           j        Š
ˆfd„Šn„|dv rt           j*        Šd„ Šnp|                     d¦  «        rt           j+        Š
t           j        ŠnB|                     d¦  «        rt           j+        Š
t           j(        Šˆfd„ŠntY          |¦  «        ‚tZ          5  ˆ
ˆˆfd„|D ¦   «         }‰
t           j+        k    r"t]          |¦  «        | _/        	 d d d ¦  «         d S ta          |  1                    |¦  «        ¦  «        }	|	s&‰t           j        k    r|  2                    |¦  «         nt]          |	¦  «        | _/        d d d ¦  «         d S # 1 swxY w Y   d S )Nc                 ó   — dS rÁ   r¨   ©Úes    r1   ú<lambda>z-SentinelNodeFinder.__init__.<locals>.<lambda>ù  s   €  € r2   ÚCALL_)ÚBINARY_SUBSCRzSLICE+ÚBINARY_ÚMatMultr¨   )ÚBINARY_POWERÚBINARY_MULTIPLYÚBINARY_MATRIX_MULTIPLYÚBINARY_FLOOR_DIVIDEÚBINARY_TRUE_DIVIDEÚBINARY_MODULOÚ
BINARY_ADDÚBINARY_SUBTRACTÚBINARY_LSHIFTÚBINARY_RSHIFTÚ
BINARY_ANDÚ
BINARY_XORÚ	BINARY_ORc                 ó.   •— t          | j        ‰¦  «        S r*   ©r;   Úop©r
  Úop_types    €r1   r  z-SentinelNodeFinder.__init__.<locals>.<lambda>  ó   ø€ ¥Z°´°gÑ%>Ô%>€ r2   ÚUNARY_)ÚUNARY_POSITIVEÚUNARY_NEGATIVEÚ	UNARY_NOTÚUNARY_INVERTc                 ó.   •— t          | j        ‰¦  «        S r*   r  r   s    €r1   r  z-SentinelNodeFinder.__init__.<locals>.<lambda>  r"  r2   )Ú	LOAD_ATTRÚLOAD_METHODÚLOOKUP_METHODc                 ó4   •— t          | ¦  «        ‰j        k    S r*   ©r   rÿ   ©r
  Úinstructions    €r1   r  z-SentinelNodeFinder.__init__.<locals>.<lambda>   ó   ø€ ¥L°¡O¤O°{Ô7IÒ$I€ r2   )Ú	LOAD_NAMEÚLOAD_GLOBALÚ	LOAD_FASTÚ
LOAD_DEREFÚLOAD_CLASSDEREFc                 ó4   •— t          | ¦  «        ‰j        k    S r*   r-  r.  s    €r1   r  z-SentinelNodeFinder.__init__.<locals>.<lambda>$  r0  r2   )Ú
COMPARE_OPÚIS_OPÚCONTAINS_OPc                 ó2   — t          | j        ¦  «        dk    S )Nr   )r<   Úopsr	  s    r1   r  z-SentinelNodeFinder.__init__.<locals>.<lambda>'  s   € ¥S¨¬¡Z¤Z°1¢_€ r2   )ÚSTORE_SLICEÚSTORE_SUBSCRÚ
STORE_ATTRc                 ó4   •— t          | ¦  «        ‰j        k    S r*   r-  r.  s    €r1   r  z-SentinelNodeFinder.__init__.<locals>.<lambda>.  r0  r2   c           
      ó  •— h | ]{}t          j        |¦  «        D ]d}t          |‰¦  «        rRt          t          |d d¦  «        ‰¦  «        r3 ‰|¦  «        r(t	          |¦  «        |k    ¯Ot          t          |¦  «        ’ŒeŒ|S )ÚctxN)rU   rW   r;   rÕ   r‘   r   r   )rH   Ústmtra   rA  Úextra_filterÚtyps      €€€r1   r©   z.SentinelNodeFinder.__init__.<locals>.<setcomp>4  s§   ø€ ð ð ð àÝœH T™NœNðð ð Ý˜d CÑ(Ô(ð	õ
 �g d¨E°4Ñ8Ô8¸#Ñ>Ô>ðð  �< Ñ%Ô%ðõ -¨TÑ2Ô2°dÒ:Ð:õ •[ $Ñ'Ô'ð ;Ð:Ð:Ð:r2   )3r   rk   rQ   rg   r˜   r  Ú	is_pytestÚ	frozensetÚassert_linenosÚignore_linenosr�   Úget_actual_current_instructionr/  rþ   Útyper   rU   ÚCallÚ	SubscriptÚLoadÚBinOpÚdictÚPowÚMultrÕ   ÚFloorDivÚDivÚModÚAddÚSubÚLShiftÚRShiftÚBitAndÚBitXorÚBitOrÚUnaryOpÚUAddÚUSubÚNotÚInvertÚ	AttributeÚNameÚCompareÚStoreÚRuntimeErrorÚlockrA   r   r=   Úmatching_nodesÚfind_decorator)r.   rk   rœ   rQ   r—   r�   r˜   Úop_nameÚexprsÚmatchingrA  rC  r/  r!  rD  s             @@@@@r1   r-   zSentinelNodeFinder.__init__è  s  øøøøø€ å�‰ŒˆØˆŒ
ØˆŒ	Ø œ<Ð'ˆŒ	�DÝ/°Ñ5Ô5ˆŒàŒ>ð 	.Ý"+­N¸4Ñ,@Ô,@Ñ"AÔ"AˆDÔÐå"+¡+¤+ˆDÔàˆŒà)-×)LÒ)LÈUÑ)SÔ)SÐSˆÔ˜;ØÔ$ˆØ%�~ˆÝ�4‰jŒjˆå�4‰jŒjˆØ×Ò˜gÑ&Ô&ð 3	(Ý”(ˆC‰CØ×ÒÐ ;Ñ<Ô<ð 1	(Ý”-ˆCÝ”(ˆC‰CØ×Ò 	Ñ*Ô*ð .	(Ý”)ˆCÝÝ œWÝ #¤Ý'.­s°I¸rÑ'BÔ'BÝ$'¤LÝ#&¤7Ý!œgÝœ7Ý #¤Ý!œjÝ!œjÝœ:Ýœ:Ýœ)ðñ ô ð ôˆGð ?Ð>Ð>Ð>ˆL‰LØ×Ò Ñ)Ô)ð 	(Ý”+ˆCÝÝ"œxÝ"œxÝœ'Ý œZð	ñ ô ð
 ôˆGð ?Ð>Ð>Ð>ˆLˆLØÐEÐEÐEÝ”-ˆCÝ”(ˆCØIÐIÐIÐIˆLˆLØÐbÐbÐbÝ”(ˆCÝ”(ˆCØIÐIÐIÐIˆLˆLØÐ>Ð>Ð>Ý”+ˆCØ4Ð4ˆLˆLØ×ÒÐ ?Ñ@Ô@ð 	(Ý”)ˆCÝ”-ˆCˆCØ×Ò Ñ-Ô-ð 	(Ý”)ˆCÝ”-ˆCØIÐIÐIÐIˆLˆLå˜wÑ'Ô'Ð'õ ð 	-ð 	-ðð ð ð ð ð à!ðñ ô ˆEð •c”iÒÐõ # 5™kœk�”Øð!	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-õ$ ˜D×/Ò/°Ñ6Ô6Ñ7Ô7ˆHØð - ¥s¤x¢ Ø×#Ò# EÑ*Ô*Ð*Ð*å" 8™nœn�”ð-	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s   Ì+6OÍ.AOÏOÏ Oc                 ó†  ‡ — t          |¦  «        }t          t          |t          j        t
          f¦  «        ¦  «         |j        }t          |¦  «         ˆ fd„‰                      ‰ j        ¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         d         }t          ||dz            j
                             d¦  «        ¦  «         ||t          |¦  «        z
  dz   |dz   …         }t          d„ |D ¦   «         dhk    ¦  «         |                     ‰ j        ¦  «        }|d d d…         |         }|‰ _        |‰ _        d S )Nc                 ó>   •— g | ]}|j         ‰j        j        k    ¯|‘ŒS r¨   )rc   rk   r‰   ©rH   Úinstr.   s     €r1   rJ   z5SentinelNodeFinder.find_decorator.<locals>.<listcomp>Q  s5   ø€ ð 
ð 
ð 
àØŒ{˜dœjÔ1Ò1Ð1ð à1Ð1Ð1r2   c                 ó.   — g | ]\  }}|j         d k    ¯|‘ŒS )ÚCALL_FUNCTION©rþ   )rH   Úiro  s      r1   rJ   z5SentinelNodeFinder.find_decorator.<locals>.<listcomp>V  s3   € ð ,
ð ,
ð ,
á��4ØŒ{˜oÒ-Ð-ð à-Ð-Ð-r2   éÿÿÿÿr   ÚSTORE_c                 ó   — h | ]	}|j         ’Œ
S r¨   rr  ©rH   ro  s     r1   r©   z4SentinelNodeFinder.find_decorator.<locals>.<setcomp>f  s   € Ð@Ð@Ð@ �”Ð@Ð@Ð@r2   rq  )rA   r   r;   rU   rè   Úfunction_node_typesrÓ   Úclean_instructionsr˜   Ú	enumeraterþ   r   r<   Úindexr/  r�   r   )	r.   rœ   rB  Ú
decoratorsÚline_instructionsÚ last_decorator_instruction_indexÚdecorator_instructionsÚdecorator_indexr�   s	   `        r1   rh  z!SentinelNodeFinder.find_decoratorK  s‚  ø€ å�E‰{Œ{ˆÝ•
˜4¥#¤,Õ0CÐ!DÑEÔEÑFÔFÐFØÔ(ˆ
Ý�
ÑÔÐð
ð 
ð 
ð 
à×/Ò/°´	Ñ:Ô:ð
ñ 
ô 
Ðð
,
ð ,
å$Ð%6Ñ7Ô7ð,
ñ ,
ô ,
ð ô	,Ð(õ
 	ØÐ>ÀÑBÔCÔJ×UÒUØñô ñ	
ô 	
ð 	
ð
 "3Ø,Ý�*‰oŒoñàñà2Øñðô"
Ðõ 	Ð@Ð@Ð)?Ð@Ñ@Ô@À_ÐDUÒUÑVÔVÐVØ0×6Ò6°tÔ7GÑHÔHˆØ˜t˜t ˜tÔ$ _Ô5ˆ	Ø"ˆŒØˆŒˆˆr2   c                 ó:   ‡ — ˆ fd„t          |¦  «        D ¦   «         S )Nc                 óB   •— g | ]}|j         d vr|j        ‰j        v¯|‘ŒS ))ÚEXTENDED_ARGÚNOP)rþ   rc   rH  rn  s     €r1   rJ   z9SentinelNodeFinder.clean_instructions.<locals>.<listcomp>n  sC   ø€ ð 
ð 
ð 
àØŒ{Ð"9Ð9Ð9ØŒ{ $Ô"5Ð5Ð5ð ð 6Ð5Ð5r2   )r"   r¿   s   ` r1   ry  z%SentinelNodeFinder.clean_instructionsl  s6   ø€ ð
ð 
ð 
ð 
å(¨Ñ.Ô.ð
ñ 
ô 
ð 	
r2   c                 ó¨   — |                       | j        ¦  «        }t          d„ |                      ¦   «         D ¦   «         ¦  «        sd„ |D ¦   «         }|S )Nc              3   ó,   K  — | ]}|j         d k    V — ŒdS )ÚJUMP_IF_NOT_DEBUGNrr  rw  s     r1   rð   zESentinelNodeFinder.get_original_clean_instructions.<locals>.<genexpr>}  s>   è è € ð 
ð 
àð ”Ð2Ò2ð
ð 
ð 
ð 
ð 
ð 
r2   c                 ó(   — g | ]}|j         d k    ¯|‘ŒS )r‡  rr  rw  s     r1   rJ   zFSentinelNodeFinder.get_original_clean_instructions.<locals>.<listcomp>�  s0   € ð ð ð ØØ”;Ð"5Ò5Ð5ð Ø5Ð5Ð5r2   )ry  r˜   r  Úcompile_instructions)r.   r   s     r1   Úget_original_clean_instructionsz2SentinelNodeFinder.get_original_clean_instructionsu  sx   € à×(Ò(¨¬Ñ3Ô3ˆõ ð 
ð 
à ×5Ò5Ñ7Ô7ð
ñ 
ô 
ñ 
ô 
ð 	ðð Ø!'ðñ ô ˆFð
 ˆr2   c           	   #   ó�  ‡ K  — ‰                       ¦   «         }t          ˆ fd„t          |¦  «        D ¦   «         ¦  «        }t          |¦  «        D �]u\  }}t          |¦  «        }|€J ‚t	          j        |t	          j        ¦   «         t	          j        t          ¬¦  «        ¬¦  «        }t	          j	        |¦  «          ||¦  «         	 ‰  
                    ¦   «         } ||¦  «         n#  ||¦  «         w xY wt          j        dk    r@	 t          ||¦  «         n.# t          $ r! t          s|t!          |¦  «        dz
  k     rY Œô‚ w xY wd„ t          |¦  «        D ¦   «         }	t          |	¦  «        D ]c\  }
}||
dz  z  }t#          |                     |¦  «        j        dk    ¦  «         t#          |                     |¦  «        j        d	k    ¦  «         Œdt          |	¦  «        D ]à\  }
}||
dz  z  }|dz
  }||k    rŒ||         }||         }|j        |j        cxk    rd
v rWn nT|j        |j        k    rD||dz            j        ||dz            j        cxk    rdk    rn n|                     |dz   ¦  «         t          j        dk     r7t+          ||¦  «        D ]&\  }}t#          |o|ot-          ||¦  «        ¦  «         Œ'|V — Œá�Œwd S )Nc              3   ó8   •K  — | ]\  }}|‰j         k    ¯|V — Œd S r*   )r/  )rH   rs  ro  r.   s      €r1   rð   z4SentinelNodeFinder.matching_nodes.<locals>.<genexpr>‹  sA   øè è € ð 
ð 
á��4Ø�tÔ'Ò'Ð'ð à'Ð'Ð'Ð'ð
ð 
r2   )Ús)Úleftr  Úright)é   é
   r   c                 ó8   — g | ]\  }}|j         t          k    ¯|‘ŒS r¨   )rÿ   Úsentinel)rH   rs  r/  s      r1   rJ   z5SentinelNodeFinder.matching_nodes.<locals>.<listcomp>©  s4   € ð ð ð á"�A�{ØÔ%­Ò1Ð1ð à1Ð1Ð1r2   r:   rý   r  ©r9  r8  r&  )rŠ  rA   rz  Ú
get_setterrU   rN  rP  ÚStrr“  Úfix_missing_locationsr‰  ÚsysÚversion_infoÚhandle_jumpsr’   r“   r<   r   rÝ   rþ   Úargr   Úopnames_match)r.   rj  Úoriginal_instructionsÚoriginal_indexÚ
expr_indexÚexprÚsetterÚreplacementÚinstructionsÚindicesÚ	index_numÚsentinel_indexÚ	new_indexÚoriginal_instÚnew_instÚinst1Úinst2s   `                r1   rg  z!SentinelNodeFinder.matching_nodesˆ  sŸ  øè è € à $× DÒ DÑ FÔ FÐÝð 
ð 
ð 
ð 
å$Ð%:Ñ;Ô;ð
ñ 
ô 
ñ 
ô 
ˆõ
 !*¨%Ñ 0Ô 0ð I	ñ I	ÑˆJ˜Ý Ñ%Ô%ˆFØÐ%Ð%Ð%åœ)ØÝ”7‘9”9Ý”g¥Ð)Ñ)Ô)ðñ ô ˆKõ
 Ô% kÑ2Ô2Ð2ØˆF�;ÑÔÐðØ#×8Ò8Ñ:Ô:�à��t‘”��ø���t‘”��øøøåÔ 7Ò*Ð*ðÝ  Ð/DÑEÔEÐEÐEøÝ ð ð ð åð ! *­s°5©z¬z¸A©~Ò"=Ð"=Ø ˜Øð	øøøðð å&/°Ñ&=Ô&=ðñ ô ˆGõ .7°wÑ-?Ô-?ð Sð SÑ)�	˜>ð  )¨a¡-Ñ/�å˜×(Ò(¨Ñ8Ô8Ô?À<ÒOÑPÔPÐPÝ˜×(Ò(¨Ñ8Ô8Ô?À>ÒQÑRÔRÐRÐRõ .7°wÑ-?Ô-?ð ð Ñ)�	˜>Ø )¨a¡-Ñ/�Ø*¨QÑ.�	à Ò.Ð.Øà 5°nÔ E�Ø'¨	Ô2�ð
 &Ô,°´Ð[Ð[Ò[Ð[ÐC[Ð[Ð[Ð[Ð[Ð[Ø)Ô-°´Ò=Ð=à-¨n¸qÑ.@ÔAÔHØ'¨	°A©Ô6Ô=ðMð Mò Mð MØALòMð Mð Mð Mð Mð !×$Ò$ Y°¡]Ñ3Ô3Ð3õ Ô# gÒ-Ð-Ý(3Ø-¨|ñ)ô )ð Qð Q™˜˜uõ   Ð O¨%Ð OµMÀ%ÈÑ4OÔ4OÑPÔPÐPÐPà�
�
�
�
ñ=ðWI	ð I	s   ÃC(Ã(C5Ä	DÄ'EÅEc                 ó¤   — t          | j        | j        ¦  «        }t          |                      |¦  «        ¦  «        }|                      |¦  «        S r*   )rù   rQ   r˜   rA   Ú
find_codesry  )r.   Úmodule_coder˜   s      r1   r‰  z'SentinelNodeFinder.compile_instructionsÛ  sB   € å(¨¬°D´IÑ>Ô>ˆÝ�D—O’O KÑ0Ô0Ñ1Ô1ˆØ×&Ò& tÑ,Ô,Ð,r2   c                 ó0  ‡ ‡‡‡‡— t          d¦  «        t          d¦  «        t          d¦  «        d„ gŠ‰ j        s!‰t          d¦  «        t          d¦  «        gz  Šˆˆ fd„Šg Š ‰|¦  «        r‰                     |¦  «         ˆˆˆfd„Š ‰|¦  «         ‰S )	Nr¾   Úco_freevarsÚco_cellvarsc                 ó8   — t          | j        ¦  «        p| j        S r*   )Úis_ipython_cell_code_namer½   )Úcs    r1   r  z/SentinelNodeFinder.find_codes.<locals>.<lambda>ç  s   € Õ/°´	Ñ:Ô:ÐG¸a¼i€ r2   Úco_namesÚco_varnamesc                 ó>   •‡ — t          ˆ ˆfd„‰D ¦   «         ¦  «        S )Nc              3   óR   •K  — | ]!} |‰¦  «         |‰j         ¦  «        k    V — Œ"d S r*   r  )rH   Úfr´  r.   s     €€r1   rð   zASentinelNodeFinder.find_codes.<locals>.matches.<locals>.<genexpr>ñ  sN   øè è € ð ð àð ��!‘”˜˜˜$œ)™œÒ$ðð ð ð ð ð r2   )Úall)r´  Úchecksr.   s   `€€r1   Úmatchesz.SentinelNodeFinder.find_codes.<locals>.matchesï  sA   øø€ åð ð ð ð ð àðñ ô ñ ô ð r2   c                 óœ   •— | j         D ]B}t          j        |¦  «        sŒ ‰|¦  «        r‰                     |¦  «          ‰|¦  «         ŒCd S r*   )Ú	co_constsÚinspectÚiscoder[   )r˜   ÚconstÚcode_optionsÚfinderr¼  s     €€€r1   rÃ  z-SentinelNodeFinder.find_codes.<locals>.finderú  sf   ø€ àœð ð �Ý”~ eÑ,Ô,ð Øà�7˜5‘>”>ð /Ø ×'Ò'¨Ñ.Ô.Ð.Ø��u‘”��ðð r2   )r   rE  r[   )r.   Ú	root_coder»  rÂ  rÃ  r¼  s   ` @@@@r1   r­  zSentinelNodeFinder.find_codesá  sï   øøøøø€ õ Ð'Ñ(Ô(Ý�}Ñ%Ô%Ý�}Ñ%Ô%ØGÐGð	
ˆð Œ~ð 	ØÝ˜:Ñ&Ô&Ý˜=Ñ)Ô)ðñ ˆFð
	ð 	ð 	ð 	ð 	ð 	ð ˆØˆ7�9ÑÔð 	+Ø×Ò 	Ñ*Ô*Ð*ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆˆyÑÔÐØÐr2   c                 óÎ   ‡— t          t          | j        ¦  «        ¦  «        }t          ˆfd„t	          |¦  «        D ¦   «         ¦  «        }	 ||         }|j        dk    r|S |dz  }Œ)z{
        Get the instruction corresponding to the current
        frame offset, skipping EXTENDED_ARG instructions
        c              3   ó8   •K  — | ]\  }}|j         ‰k    ¯|V — Œd S r*   )Úoffset)rH   rs  ro  r—   s      €r1   rð   zDSentinelNodeFinder.get_actual_current_instruction.<locals>.<genexpr>  s@   øè è € ð 
ð 
á��4ØŒ{˜eÒ#Ð#ð à#Ð#Ð#Ð#ð
ð 
r2   Trƒ  r   )r=   r"   r˜   rA   rz  rþ   )r.   r—   r£  r{  r/  s    `   r1   rI  z1SentinelNodeFinder.get_actual_current_instruction  s‹   ø€ õ Õ,¨T¬YÑ7Ô7Ñ8Ô8ˆÝð 
ð 
ð 
ð 
å$ \Ñ2Ô2ð
ñ 
ô 
ñ 
ô 
ˆð	Ø& uÔ-ˆKØÔ! ^Ò3Ð3Ø"Ð"Ø�Q‰JˆEð		r2   )r3   r4   r5   r   r-   rh  ry  rŠ  rg  r‰  r­  rI  r¨   r2   r1   r  r  å  s›   € € € € € Ø€Fða-ð a-ð a-ðFð ð ðB
ð 
ð 
ðð ð ð&Qð Qð Qðf-ð -ð -ð$ð $ð $ðLð ð ð ð r2   r  c              #   óò   K  — d}t          t          | ¦  «        |d¦  «        D ]S\  }}|j        t          k    rt	          |j        dk    ¦  «         d}Œ0|rt	          |j        dk    ¦  «         d}ŒM||fV — ŒTdS )zz
    Yields (index, instruction) pairs excluding the basic
    instructions introduced by the sentinel transformation
    FNrý   Tr  )r   rz  rÿ   r“  r   rþ   )r£  ÚstartÚ
skip_powerrs  ro  s        r1   Únon_sentinel_instructionsrË    sœ   è è € ð €JÝ�) LÑ1Ô1°5¸$Ñ?Ô?ð 	ð 	‰ˆˆ4ØŒ;�(Ò"Ð"Ý�D”K <Ò/Ñ0Ô0Ð0ØˆJØØð 	Ý�D”K >Ò1Ñ2Ô2Ð2ØˆJØØ�ˆgˆˆˆˆð	ð 	r2   c              #   ó”  K  — t          t          | ¦  «        |d¦  «        }t          ||¦  «        }d}	 	 t          |¦  «        \  }}t          |¦  «        \  }	}
n# t          $ r Y dS w xY w|r,|j        |
j        cxk    rdk    rn nt          |¦  «        \  }	}
|j        |
j        cxk    odv nc o|j        |
j        k    }|||	|
fV — Œ–)z—
    Yields matching indices and instructions from the new and original instructions,
    leaving out changes made by the sentinel transformation.
    NFTr&  r”  )r   rz  rË  ÚnextÚStopIterationrþ   r›  )r�  Úoriginal_startr£  rÉ  Úoriginal_iterÚnew_iterÚinverted_comparisonÚ
original_ir¨  Únew_ir©  s              r1   Úwalk_both_instructionsrÕ  2  s  è è € õ �9Ð%:Ñ;Ô;¸^ÈTÑRÔR€MÝ(¨°uÑ=Ô=€HØÐð9ð	Ý(,¨]Ñ(;Ô(;Ñ%ˆJ˜Ý" 8™nœn‰OˆE�8�8øÝð 	ð 	ð 	ØˆFˆFð	øøøð  ð	-àÔ$¨¬ÐFÐFÒFÐF¸;ÒFÐFÐFÐFÐFå" 8™nœn‰OˆE�8àÔ  H¤OÐOÐOÒOÐOÐ7OÐOÐOÐOÐOð 2ØÔ! X¤\Ò1ð 	ð ˜-¨°Ð8Ð8Ð8Ð8ð9s   µ$A Á
A(Á'A(c                 óÊ  ‡	— 	 t          |d| d¦  «        D ]Ì\  }}}Š	t          |‰	¦  «        rŒd‰	j        v rRd|j        vrIt          ˆ	fd„t	          | ¦  «        D ¦   «         ¦  «        }t          ||| |¦  «        }|€J ‚|| ||dz   …<   nXg }||d…         D ]"}|                     |¦  «         |j        dv r nŒ#t          ‚t          t          || ¦  «        ¦  «        | ||…<    ndS Œâ)aÏ  
    Transforms instructions in place until it looks more like original_instructions.
    This is only needed in 3.10+ where optimisations lead to more drastic changes
    after the sentinel transformation.
    Replaces JUMP instructions that aren't also present in original_instructions
    with the sections that they jump to until a raise or return.
    In some other cases duplication found in `original_instructions`
    is replicated in `instructions`.
    Tr   ÚJUMPc              3   ód   •K  — | ]*\  }}|j         ‰j        k    ¯t          |d d¦  «        °&|V — Œ+dS )Ú_copiedFN)rÇ  rÿ   rÕ   )rH   rs  ro  r©  s      €r1   rð   zhandle_jumps.<locals>.<genexpr>b  sV   øè è € ð ð á˜˜4Ø”{ h¤oÒ5Ð5Ý# D¨)°UÑ;Ô;ð 6ð à5Ð5Ð5Ð5ðð r2   Nr   ©ÚRETURN_VALUEÚRAISE_VARARGS)	rÕ  rœ  rþ   rA   rz  Úhandle_jumpr[   ÚAssertionErrorÚfind_new_matching)
r£  r�  rÓ  r¨  rÔ  rÉ  Únew_instructionsÚorig_sectionÚsection_instr©  s
            @r1   rš  rš  M  sm  ø€ ð*Ý:PØ! 1 l°Añ;
ô ;
ð )	ð )	Ñ6ˆJ˜ u¨hõ ˜]¨HÑ5Ô5ð Øà˜œÐ(Ð(¨V¸=Ô;OÐ-OÐ-Oõ ð ð ð ð å#,¨\Ñ#:Ô#:ðñ ô ñ ô �õ $/Ø)¨:°|ÀUñ$ô $Ð ð (Ð3Ð3Ð3Ø2B�˜U U¨Q¡YÐ.Ñ/Ð/ð  "�Ø$9¸*¸+¸+Ô$Fð )ð )�LØ ×'Ò'¨Ñ5Ô5Ð5Ø#Ô*Ð.OÐOÐOØ˜ð Põ )Ð(å,0Õ1BÀ<ÐQ]Ñ1^Ô1^Ñ,_Ô,_�˜U 5˜[Ñ)ð ˆEð ˆFðU*r2   c           	   #   ób  K  — t          t          |¦  «        t          | ¦  «        z
  ¦  «        D ]}t          t          t	          ||¦  «        t          | ¦  «        ¦  «        Ž \  }}t          |¦  «        t          | ¦  «        k     r dS t          | |¦  «        r|||d         dz   …         V — Œ€dS )z´
    Yields sections of `instructions` which match `orig_section`.
    The yielded sections include sentinel instructions, but these
    are ignored when checking for matches.
    Nrt  r   )Úranger<   Úzipr   rË  Úsections_match)rá  r£  rÉ  r¤  Údup_sections        r1   rß  rß  …  sÇ   è è € õ •s˜<Ñ(Ô(­3¨|Ñ+<Ô+<Ñ<Ñ=Ô=ð 
6ð 
6ˆÝ"ÝÝ)¨,¸Ñ>Ô>Ý�LÑ!Ô!ñô ð 
Ñˆ�õ ˆ{ÑÔ�c ,Ñ/Ô/Ò/Ð/ØˆFˆFÝ˜,¨Ñ4Ô4ð 	6Ø˜u W¨R¤[°1¡_Ð4Ô5Ð5Ð5Ð5øð
6ð 
6r2   c                 ó*  — t          | |||¦  «        D ]\  }}}}t          t          ||¦  «        ¦  «         |j        dv rRt	          |||dz   …         ¦  «        }|D ]	}	d|	_        Œ
| ||dz   …         }
t          ||
| ¦  «        s
g |||dz   …<   |c S Œ€dS )a`  
    Returns the section of instructions starting at `start` and ending
    with a RETURN_VALUE or RAISE_VARARGS instruction.
    There should be a matching section in original_instructions starting at original_start.
    If that section doesn't appear elsewhere in original_instructions,
    then also delete the returned section of instructions.
    rÚ  r   TN)rÕ  r   rœ  rþ   r   rÙ  Úcheck_duplicates)r�  rÏ  r£  rÉ  Ú
original_jr¨  Únew_jr©  ÚinlinedÚinlrá  s              r1   rÝ  rÝ  ™  sä   € õ 7MØ˜~¨|¸Uñ7ô 7ð ð Ñ2ˆ
�M 5¨(õ 	•˜m¨XÑ6Ô6Ñ7Ô7Ð7ØÔÐ#DÐDÐDÝ˜|¨E°E¸A±IÐ,=Ô>Ñ?Ô?ˆGØð #ð #�Ø"�”�Ø0°À*ÈqÁ.Ð1PÔQˆLÝ#Ø Ð.Cñô ð 5ð 35�˜U U¨Q¡YÐ.Ñ/ØˆNˆNˆNð Eð ˆ4r2   c                 óò   — t          t          |¦  «        ¦  «        D ]Y}|| k    rŒ	|||t          |¦  «        z   …         }t          |¦  «        t          |¦  «        k     r dS t          ||¦  «        r dS ŒZdS )z®
    Returns True if a section of original_instructions starting somewhere other
    than original_i and matching orig_section is found, i.e. orig_section is duplicated.
    FT)rä  r<   ræ  )rÓ  rá  r�  Ú	dup_startrç  s        r1   ré  ré  ´  s•   € õ �3Ð4Ñ5Ô5Ñ6Ô6ð ð ˆ	Ø˜
Ò"Ð"ØØ+¨I¸	ÅCÈÑDUÔDUÑ8UÐ,UÔVˆÝˆ{ÑÔ�c ,Ñ/Ô/Ò/Ð/Ø�5�5Ý˜,¨Ñ4Ô4ð 	Ø�4�4ð	ð ˆ5r2   c                 óP   — t          d„ t          | |¦  «        D ¦   «         ¦  «        S )z\
    Returns True if the given lists of instructions have matching linenos and opnames.
    c              3   ó�   K  — | ]A\  }}|j         |j         k    pd |j        cxk    o
|j        k    nc ot          ||¦  «        V — ŒBdS )Ú	POP_BLOCKN)rc   rþ   rœ  )rH   Ú	orig_instÚdup_insts      r1   rð   z!sections_match.<locals>.<genexpr>Ê  s„   è è € ð ð ñ  ˆI�xð Ô ¤Ò/ð Bà˜iÔ.ÐAÐAÒAÐA°(´/ÒAÐAÐAÐAð	/õ
 ˜) XÑ.Ô.ðð ð ð ð ð r2   )rº  rå  )rá  rç  s     r1   ræ  ræ  Å  s>   € õ
 ð ð õ $' |°[Ñ#AÔ#Aðñ ô ñ ô ð r2   c                 óÆ   — | j         |j         k    pQd| j         v od|j         v p?| j         dk    o
|j         dk    p)| j         dv o
|j         dk    p| j         dk    o
|j         dk    S )Nr×  Ú
PRINT_EXPRÚPOP_TOP)r*  r+  r)  ÚCALL_METHODrq  rr  )rª  r«  s     r1   rœ  rœ  Õ  s’   € ð 	Œ˜œÒ$ð 	OØ�U”\Ð!ð #Ø�e”lÐ"ð	Oð ŒL˜LÒ(ÐF¨U¬\¸YÒ-Fð	Oð
 ŒLÐ<Ð<ð ,Ø” Ò+ð	Oð ŒL˜MÒ)ÐM¨e¬l¸oÒ.Mð
r2   c                 óà   ‡‡‡‡— | j         Št          j        ‰¦  «        D ]M\  ŠŠ‰| u r
ˆˆfd„}|c S t          ‰t          ¦  «        r%t          ‰¦  «        D ]\  Š}|| u rˆˆfd„}|c c S ŒŒNd S )Nc                 ó&   •— t          ‰‰| ¦  «        S r*   )r£   )Únew_noder¤   rY   s    €€r1   r¡  zget_setter.<locals>.setteré  s   ø€ å˜v t¨XÑ6Ô6Ð6r2   c                 ó   •— | ‰‰<   d S r*   r¨   )rû  rá   rs  s    €€r1   r¡  zget_setter.<locals>.setterð  s   ø€ à#+˜˜a™˜˜r2   )rY   rU   rÞ   r;   r=   rz  )ra   r¡  Úitemrá   rs  r¤   rY   s      @@@@r1   r•  r•  ä  sÌ   øøøø€ àŒ[€FÝ” vÑ.Ô.ð "ð "‰ˆˆeØ�Dˆ=ˆ=ð7ð 7ð 7ð 7ð 7ð 7ð ˆMˆMˆMÝ˜�tÑ$Ô$ð 	"Ý$ UÑ+Ô+ð "ð "‘��4Ø˜4�<�<ð,ð ,ð ,ð ,ð ,ð ,ð "�M�M�M�M�Mð  øð ˆ4r2   c                 óÈ   — t          | t          j        ¦  «        s4t          t          | ¦  «        j        } t          | t          j        ¦  «        ¯4t          t          | ¦  «        S r*   )r;   rU   rB  r   r   rY   )ra   s    r1   r‘   r‘   ú  sP   € õ ˜�sœxÑ(Ô(ð .Ý•K Ñ&Ô&Ô-ˆõ ˜�sœxÑ(Ô(ð .å•˜TÑ"Ô"Ð"r2   c              #   óÒ   K  — t          j        | ¦  «        D ]O}t          |d¦  «        r=t          t	          |¦  «        t           j        ¦  «        rt          |¦  «        D ]}|V — ŒŒPd S )NrY   )rU   rW   r¯   r;   r‘   ÚAssertrZ   )rQ   ra   rc   s      r1   rG  rG    s{   è è € å”˜‘”ð ð ˆå˜˜hÑ'Ô'ð	åÕ4°TÑ:Ô:½C¼JÑGÔGð	õ ' tÑ,Ô,ð ð �Ø����øðð r2   c                 ó"  — t          | j        t          j        ¦  «        s&| j        } t          | j        t          j        ¦  «        ¯&t          j        d¦  «        }t          t          j        | ¦  «        g|_        t          j        || ¦  «         |S )NrE   )	r;   rY   rU   ÚModulerV   r   rB  rÙ   Úcopy_location)rB  rQ   s     r1   Ú_extract_ipython_statementr    sv   € õ
 ˜œ¥c¤jÑ1Ô1ð ØŒ{ˆõ ˜œ¥c¤jÑ1Ô1ð õ
 Œ9�R‰=Œ=€DÝ•c”h Ñ%Ô%Ð&€D„IÝÔ�d˜DÑ!Ô!Ð!Ø€Kr2   c                 óF   — t          t          j        d| ¦  «        ¦  «        S )Nz(<module>|<cell line: \d+>)$)ÚboolÚreÚmatch)Ú	code_names    r1   r³  r³    s   € å•”Ð8¸)ÑDÔDÑEÔEÐEr2   c                 óF   — t          t          j        d| ¦  «        ¦  «        S )Nz'<ipython-input-|[/\\]ipykernel_\d+[/\\])r  r  ÚsearchrK   s    r1   Úis_ipython_cell_filenamer  "  s   € å•”	ÐDÀhÑOÔOÑPÔPÐPr2   c                 óR   — t          | j        ¦  «        ot          | j        ¦  «        S r*   )r  rh   r³  r½   )Úcode_objs    r1   r�   r�   '  s*   € õ 	! Ô!5Ñ6Ô6ð 	4Ý! (Ô"2Ñ3Ô3ðr2   c                 óÈ   — d x}}|D ]X}t          |¦  «        }	 t          | ||||¦  «        }|s|r|j        s|j        r dS |j        }|j        }ŒI# t          $ r Y ŒUw xY w||fS )N)NN)r  r�   r   r�   r’   )	rk   r—   rœ   r�   ra   r�   rB  rQ   rž   s	            r1   rŽ   rŽ   /  sª   € àÐ€Dˆ9Øð ð ˆÝ)¨$Ñ/Ô/ˆð
	Ý$ U¨E°4¸ÀÑGÔGˆKØð "˜	ð "¨Ô(:ð "¸kÔ>Sð "ð "�z�zàÔ%ˆDØ#Ô-ˆIˆIøÝð 	ð 	ð 	ØˆDð	øøøà�dˆ?Ðs   ™%AÁAÁ
AÁAc              #   óö   K  — t          | d¦  «        rdg }t          | d¦  «        rAt          | t          j        ¦  «        r'| j        €J ‚t          | j        | j        dz   ¦  «        }n| j        g}|D ]}|V — Œd S d S )Nrc   Ú
end_linenor   )r¯   r;   rU   r   r  rä  rc   )ra   Úlinenosrc   s      r1   rZ   rZ   C  s¡   è è € åˆt�XÑÔð ØˆÝ�4˜Ñ&Ô&ð 	$­:°d½C¼HÑ+EÔ+Eð 	$Ø”?Ð.Ð.Ð.Ý˜DœK¨¬¸1Ñ)<Ñ=Ô=ˆGˆGà”{�mˆGØð 	ð 	ˆFØˆLˆLˆLˆLðð ð	ð 	r2   )r�  é   )ÚPositionNodeFinder)crÂ   rí   rU   Údisr¿  r¹   rp   r  r˜  r„   Úcollectionsr   Úcopyr   Ú	functoolsr   Ú	itertoolsr   r   Úoperatorr   Úpathlibr	   Ú	threadingr
   Útokenizer   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú_utilsr   r   r   r    r!   r"   r¬   r#   r$   Úasttokens.asttokensr%   rÚ   rÛ   rx  ru   r“   r’   r(   r8   rA   ÚobjectrC   r”   ÚNodeVisitorr\   ÚsumÚall_feature_namesrö   rù   r“  r  r  rË  rÕ  rš  rß  rÝ  ré  ræ  rœ  r•  rf  r‘   rG  r  r³  r  r�   rŽ   rZ   r™  Ú_position_node_finderr  r�   r¨   r2   r1   ú<module>r&     s+  ððð ð0 Ð Ð Ð Ø 
€
€
€
Ø 
€
€
€
Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ð Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  Sð  SØ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fàð 0Ø,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø/Ð/Ð/Ð/Ð/Ð/ð ”¨Ô(<Ð=Ð àˆ	˜$ÐÑÔ€à
€ð3ð 3ð 3ð 3ð 3�yñ 3ô 3ð 3ð €GˆC�L„L€ðð ð ð UVð UVð UVð UVð UVˆVñ UVô UVð UVðpEð Eð Eð Eð E�ñ Eô Eð EðD9ð 9ð 9ð 9ð 9�c”oñ 9ô 9ð 9ð~ ˆsð ð Ø:DÔ:Vðñ ô ñ ô €ð
ð ð ð F€ðð ð ðvð vð vð vð v˜ñ vô vð vðt	ð ð ð&9ð 9ð 9ð65ð 5ð 5ðp6ð 6ð 6ð(ð ð ð6ð ð ð"ð ð ð ð ð ðð ð ð& €u�w„w€ð ð#ð #ñ „ð#ðð ð ðð ð ð Fð Fð Fð
Qð Qð Qð
ð ð ðð ð ð(
ð 
ð 
ð Ô�wÒÐØGÐGÐGÐGÐGÐGÐGÐGà#€J€J€Jr2   