o
    ß›h�‡  ã                   @   sl  d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZmZ d dlmZ ded	e	e fd
d„Zded	e	e fdd„Zded	efdd„Z edƒded	e!ej" fdd„ƒZ#e j$e j%e j&e j'fZ(e(e j)e j*e j+e j,f Z-e j.e j/e j0e j1e j2e j3e j4e j5e j6e j7e j8e j9e j:dœZ;G dd„ de<ƒZ=dS )é    N)ÚCodeTypeÚ	FrameType)
ÚAnyÚCallableÚIteratorÚOptionalÚSequenceÚSetÚTupleÚTypeÚUnionÚcasté   )ÚEnhancedASTÚNotOneValueFoundÚSourceÚonlyÚfunction_node_typesÚassert_)Ú
KnownIssueÚVerifierFailure)Ú	lru_cacheÚnodeÚreturnc                 c   s"   � 	 t | dƒr| j} | V  nd S q)NTÚparent)Úhasattrr   ©r   © r   úUc:\Users\shubh\Videos\agent\nova\Lib\site-packages\executing/_position_node_finder.pyÚparents   s   €
ûr   c                 c   s   � | V  t | ƒE d H  d S ©N)r   r   r   r   r   Únode_and_parents   s   €r!   c                 C   sF  t | tjƒr
| j}nSt | tjƒr| j}nIt | tjƒr&| jp$| j 	d¡d }n7t | tj
tjtjfƒr5| j}n(t | tjƒrD| js@J ‚| j}ntjdkrSt | tjƒrS| j}n
tdtt| ƒƒ ƒ‚| d¡r¡| d¡s¡| j| }}t |tjƒrx||jvs‘t|dƒs€	 |S |j|}}t |tjƒrx||jvrx|j d¡}|dkr¡d| | S |S )	z™

    Parameters:
        node: the node which should be mangled
        name: the name of the node

    Returns:
        The mangled name of `node`
    Ú.r   ©é   é   zno node to mangle for type Ú__r   Ú_Ú )Ú
isinstanceÚastÚ	AttributeÚattrÚNameÚidÚaliasÚasnameÚnameÚsplitÚFunctionDefÚClassDefÚAsyncFunctionDefÚExceptHandlerÚsysÚversion_infoÚTypeVarÚ	TypeErrorÚreprÚtypeÚ
startswithÚendswithr   Úbasesr   Úlstrip)r   r1   r   ÚchildÚ
class_namer   r   r   Úmangled_name   s4   



øürC   é€   Úcodec                 C   s   t t | ¡ƒS r    )ÚlistÚdisÚget_instructions)rE   r   r   r   rH   I   s   rH   )z**Ú*ú@z//ú/ú%ú+ú-z<<z>>ú&ú^ú|c                
   @   sJ  e Zd ZdZdedee dejde	de
f
dd„Zd	ed
e	ddfdd„Zd	edejdefdd„Zd	edejddfdd„Zedejd	edefdd„ƒZd	edejddfdd„Zd
e	deej fdd„Zdejdeej fdd„Zd
e	defdd„ZdZejd kr‚ejfZd!ejejej ej!ge¢R fd
e	d"e"e d#e#e$d$f defd%d&„Z%dS )'ÚPositionNodeFindera%  
    Mapping bytecode to ast-node based on the source positions, which where introduced in pyhon 3.11.
    In general every ast-node can be exactly referenced by its begin/end line/col_offset, which is stored in the bytecode.
    There are only some exceptions for methods and attributes.
    ÚframeÚstmtsÚtreeÚlastiÚsourcec                 C   s"  dd„ t |jƒD ƒ| _|| _d | _|  |¡dkr#|d8 }|  |¡dksz|  |¡| _W n+ tyV   |  |¡dv r>t	j
f}n|  |¡dv rJt	jf}n‚ | j|d|d�| _Y nw |  |¡}|d usbJ ‚|  | j|¡| _|  | j|¡ |  | j|¡ | jd u r†|  | j|¡ d S t| j| jjv ƒ d S )	Nc                 S   s   i | ]}|j |“qS r   )Úoffset)Ú.0Úbcr   r   r   Ú
<dictcomp>u   ó    z/PositionNodeFinder.__init__.<locals>.<dictcomp>ÚCACHEé   )ÚLOAD_METHODÚ	LOAD_ATTRÚ
STORE_ATTRÚDELETE_ATTR)ÚCALLÚCALL_KW)Úend_col_offsetÚ
end_lineno)Úmatch_positionsÚtyp)rH   Úf_codeÚbc_dictrW   Ú	decoratorÚopnameÚ	find_nodeÚresultr   r*   r+   ÚCallÚinstructionÚ
fix_resultÚknown_issuesÚtest_for_decoratorÚverifyr   Údecorator_list)ÚselfrS   rT   rU   rV   rW   rh   rp   r   r   r   Ú__init__t   s8   ÿ


ýè

zPositionNodeFinder.__init__r   Úindexr   Nc                 C   sÊ   t |jtjtfƒra||jjv rc|j}	 |  |d ¡dks!tjdkr(|  |¡dks*d S |d7 }|  |¡dv r@|d7 }|  |¡dv s5|  |¡ 	d¡rW|  
|¡|krW|| _|| _d S tjdk r`|d7 }qd S d S )	NTé   ZPRECALLr#   rc   r^   )r]   ÚEXTENDED_ARGÚSTORE_)r)   r   r*   r4   r   ru   rl   r7   r8   r=   rm   rn   rk   )rv   r   rx   Z	node_funcr   r   r   rs   ®   s.   ÿÿÿ
Úúz%PositionNodeFinder.test_for_decoratorrp   c                 C   s   t jdkr|jdv rt|jtjƒr||jju r|jS t jdkrD|jdv rDt|jjtjtj	tj
tjfƒrDt|jtjƒrD||jju rD|jjS t jdkrs|jdkrs|  |¡}|d urs|jdkrs|j|jkrst|jtjƒrs||jju rs|jjS t jdkrŽ|jdkrŽt|jtjƒrŽ||jju rŽ|jjS |S )N)r$   r%   é   ©ÚGET_ITERÚFOR_ITER)r$   r%   é   rc   Ú
LOAD_CONSTÚBEFORE_WITH)r7   r8   rl   r)   r   r*   ÚForÚiterÚListCompÚSetCompÚDictCompÚGeneratorExpÚcomprehensionÚinstruction_beforeÚ	positionsÚwithitemÚcontext_expr)rv   r   rp   Úbeforer   r   r   rq   Ý   sB   

ÿ

þÿû

ÿ

ÿzPositionNodeFinder.fix_resultc                 C   sÔ  |j dv r<t|tƒr<t|tƒr6dd„ t |j¡D ƒ}t|dƒ t|ƒdkr0t	t
|d ƒ }| _ntd| ƒ‚td| ƒ‚tjd d	… d
kr_t|tjƒr_|j dkr_tdd„ t|ƒD ƒƒr_tdƒ‚t|tjƒritdƒ‚tdd„ t|ƒD ƒƒrxtdƒ‚tjdkrÝt|tjƒrÝt|jtjƒrÝ|jjdkrÝ|j}t|dƒr²t|tjtjfƒs²|j}t|dƒr²t|tjtjfƒr¡d }t|dƒrÊg |jj¢|jj¢}|rÊ|d j}|j |jfdd|fd|ffv rÝtdƒ‚|  ||¡rçtdƒ‚|j dkrõ|jdkrõtdƒ‚|j dk�rt|tjƒ�stdd„ t |ƒD ƒƒ�rtjdk�rtd ƒ‚tjd!k�r`|j d"v �r-td#|j › d$�ƒ‚|j dk�r=|jd%k�r=td&ƒ‚|j d'k�rbt|tj!ƒ�rdt|j"tjƒ�rft|j#tj$ƒ�rh|j"| _d S d S d S d S d S d S )(N©Ú
COMPARE_OPÚIS_OPÚCONTAINS_OPc                 S   s*   g | ]}t |tjƒrt|jƒd kr|‘qS )r   )r)   r*   ÚCompareÚlenÚops©rY   Únr   r   r   Ú
<listcomp>@  s    
ýþz3PositionNodeFinder.known_issues.<locals>.<listcomp>z expected at least one comparisonr   r   z4multiple chain comparison inside %s can not be fixedz+chain comparison inside %s can not be fixedr$   )r$   é   r   rc   c                 s   ó   � | ]	}t |tjƒV  qd S r    ©r)   r*   ÚAssertr–   r   r   r   Ú	<genexpr>W  ó   € z2PositionNodeFinder.known_issues.<locals>.<genexpr>zBknown bug in 3.11.1 https://github.com/python/cpython/issues/95921Úassertc                 s   rš   r    )r)   r*   Úpatternr–   r   r   r   r�   c  rž   z)pattern matching ranges seems to be wrongr#   Úsuperr   Úargs)Ú
LOAD_DEREFÚ	__class__Ú	LOAD_FASTr£   zsuper optimizationzCexeption cleanup does not belong to the last node in a except blockÚ
STORE_NAMEÚ__classcell__zstore __classcell__c                 s   rš   r    r›   )rY   Úpr   r   r   r�   �  rž   )r$   r™   r^   z&exception generation maps to condition©r$   é   )ZSTORE_FAST_STORE_FASTZSTORE_FAST_LOAD_FASTZLOAD_FAST_LOAD_FASTzcan not map z to two ast nodesr¤   z^loading of __class__ is accociated with a random node at the end of a class if you use super()r�   )%rl   r)   Útypes_cmp_issueÚtypes_cmp_issue_fixr*   ÚwalkÚtestr   r”   r   r   rn   r   r7   r8   r“   Úanyr!   rœ   ro   Úfuncr-   r.   r   r   r5   r3   r¢   ÚposonlyargsÚargÚargvalÚis_except_cleanupr   ÚUnaryOpÚoperandÚopÚNot)rv   r   rp   Zcomparisonsr°   Z	first_argr¢   r   r   r   rr   3  s    ÿ
	
þ
ÿ
ÿ
ÿÿ

ÿþÿüÿ


ý
ÿþÿ
ÿþýåzPositionNodeFinder.known_issuesÚinstc                    s˜   ˆ j dvrdS t|tjƒr#t|jtjƒr#ˆ j  d¡r#t|ƒˆ jkr#dS t|tjƒr?t|jtj	ƒr?ˆ j  d¡r?t|ƒˆ jkr?dS t
‡ fdd„t|ƒD ƒƒS )N)r¦   Ú
STORE_FASTÚSTORE_DEREFÚSTORE_GLOBALÚDELETE_NAMEÚDELETE_FASTÚDELETE_DEREFÚDELETE_GLOBALFr{   ZDELETE_c                 3   s0   � | ]}t |tjƒo|jot|ƒˆ jkV  qd S r    )r)   r*   r6   r1   rC   r³   r–   ©r¹   r   r   r�   ò  s
   € ÿ
ÿz7PositionNodeFinder.is_except_cleanup.<locals>.<genexpr>)rl   r)   r*   r-   ÚctxÚStorer=   rC   r³   ÚDelr¯   r   )r¹   r   r   rÁ   r   r´   ¿  s*   


ÿþ
ý
ÿþ
ýþz$PositionNodeFinder.is_except_cleanupc                    s\	  ˆ j }dd„ }tdƒ}dtttt f dtdtf‡ fdd„}d	ttttd
f f dtdtf‡fdd„}|dkr9dS |dƒrG|t	j
t	jfƒrGdS |dƒrY|t	jt	jt	jt	jfƒrYdS tjdkrn|dƒrn|t	jt	jt	jfƒrndS |dƒr||t	jt	jfƒr|dS |dƒr‡|t	jƒr‡dS |ddd�r”|t	jƒr”dS |ddd�s¤|ddd�s¤|dƒr¿|t	jt	jt	jd�r¿ttt	jtt	jˆƒjƒjtƒr¿dS |dƒrÊ|t	jƒrÊdS |dƒrÚ|t	jˆ jt	jd�rÚdS |dƒrí|t	j ƒsë|t	jt	jd �rídS |d!ƒrø|t	j
ƒrødS |d"d#d��r|t	jƒ�rdS |d$ƒ�r|t	j!ƒ�rˆ jt"ˆƒk�rdS |d%ƒ�r=|t	j#t	j$fƒ�r=t%‡ fd&d'„tt	j#ˆƒj&D ƒƒ�r=dS |d(ƒ�r`|t	j't	jt	j(fƒ�sV|t	jt	j)d)��r`ˆ jt"ˆƒk�r`dS 	 |d/ƒ�rv|t	j-t.ˆ j/ 0d0¡ d ��rvdS |t	j1t	jd)��rŠ|d1t"ˆƒd��rŠdS |d2ƒ�r—|t	j2ƒ�r—dS |d3ƒ�r§|t	j3t	jd)��r§dS |t	jt	j4d)��sÁ|t	jt	j)d)��rÌtˆj5t	j-ƒ�rÌ|d4t"ˆƒd��rÌdS |t	jt	jd)��rà|d5t"ˆƒd��ràdS |t	jƒ�rô|d6tt	jˆƒjd��rôdS |t	jt	jt	jt	jt	j6fƒ�r
|d7ƒ�r
dS tjdk�r\|t	j7t	j8d ��r"|d8d9d:��r"dS |t	j3ƒ�r/|d;ƒ�r/dS |t	j$ƒ�r>|d8d<d:��r>dS |t	j9ƒ�sLtˆj5t	jƒ�rU|d8d=d:��rUdS |t	jƒ�rd|d>d?d��rddS |t	j:ƒ�rŠ|d8d@d:��sˆ|dAdBd:��sˆ|dAdCd:��sˆ|dDt"ˆƒd:��rŠdS |t	j;ƒ�r¡|d8dEd:��sŸ|dDˆj<d:��r¡dS |t	j=ƒ�r¸|d8dFd:��s¶|dDˆj<d:��r¸dS |t	j>ƒ�rÕ|d8dGd:��sÓ|dHˆj<j?d:��sÓ|dƒ�rÕdS |t	jƒ�rˆj@�r|dIdJd:��rèdS |dKdLd:��rñdS |d8dMd:��rúdS |d>d?d��rdS |t	j't	j(fƒ�r2ˆj@�r2|dƒ�rdS |dAdNd:��r dS |dOdPd��r)dS |dOdQd��r2dS |dRdSd��r;dS |t	j ƒ�rO|ddd��sM|dTƒ�rOdS |t	jAƒ�r\|dUƒ�r\dS tjdVk�rÝ|dWƒ�ridS |dXƒ�rv|t	j2ƒ�rvdS |dYƒ�r†|t	jt	jfƒ�r†dS |dOdJd��r�dS |dOd?d��r˜dS |dOƒ�r°|t	j't	jt	j>t	j:t	jBt	j(fƒ�r°dS |dOƒ�rÅ|t	j>ƒ�rÅˆj<j?ˆ jk�rÅdS |dRdZd��rÎdS |dOƒ�rÝtˆj5t	j:ƒ�rÝdS tdƒ}tdƒ‰| Cd[¡�ròt	j3}t	j4}nƒ| Cd\¡�rt	j}t.ˆ j/ ‰‡fd]d„}nn| Cd^¡�r%t	j7}tDt	j8t	jEt	jFt	jGd_�| ‰‡fd`d„}nP|dav �r7t	j1}t	j4}‡ fdbd„}n>|dcv �rIt	j}t	j4}‡ fddd„}n,|dv �rVt	j}ded„ }n| Cdf¡�rct	j)}t	j3}n| Cdg¡�rut	j)}t	j1}‡ fdhd„}tHˆdidƒ}	|tdƒu�p�tIˆdiƒ �p�t|	|ƒ}
tˆ|ƒ�rž|
�rž|ˆƒ�rždS djtˆƒjJˆ j f }tK|ˆˆ ƒ‚)kzE
        checks if this node could gererate this instruction
        c                 S   s   dS )NTr   ©Úer   r   r   Ú<lambda>ý  s    z+PositionNodeFinder.verify.<locals>.<lambda>NÚopnamesÚkwargsr   c                    s0   t | tƒr| g} ˆ j| v o|‡ fdd„|D ƒkS )a)  
            match instruction

            Parameters:
                opnames: (str|Seq[str]): inst.opname has to be equal to or in `opname`
                **kwargs: every arg has to match inst.arg

            Returns:
                True if all conditions match the instruction

            c                    s   i | ]}|t ˆ |ƒ“qS r   ©Úgetattr)rY   Úk©rp   r   r   r[     s    ÿzAPositionNodeFinder.verify.<locals>.inst_match.<locals>.<dictcomp>)r)   Ústrrl   )rÈ   rÉ   rÍ   r   r   Ú
inst_match   s
   
ÿz-PositionNodeFinder.verify.<locals>.inst_matchÚ	node_type.c                    s$   t ˆ | ƒot‡ fdd„| ¡ D ƒƒS )a  
            match the ast-node

            Parameters:
                node_type: type of the node
                **kwargs: every `arg` has to be equal `node.arg`
                        or `node.arg` has to be an instance of `arg` if it is a type.
            c                 3   s<   � | ]\}}t |tƒrt tˆ |ƒ|ƒntˆ |ƒ|kV  qd S r    )r)   r<   rË   )rY   rÌ   Úvr   r   r   r�     s   € þÿ
ýz@PositionNodeFinder.verify.<locals>.node_match.<locals>.<genexpr>)r)   ÚallÚitems)rÐ   rÉ   r   r   r   Ú
node_match  s   	üz-PositionNodeFinder.verify.<locals>.node_matchr]   rc   )rc   r¥   r#   )ZLOAD_FAST_AND_CLEARrº   )rc   ÚCALL_FUNCTION_EXr�   Ú	LOAD_NAMEÚ__annotations__)r³   r_   Újoinr`   )rc   ÚBUILD_STRING)Úleftr·   ÚSTORE_SUBSCR)r½   r¾   )r.   rÂ   rÙ   )r·   )r‚   ÚWITH_EXCEPT_START)r¦   r¼   Ú__doc__)r¦   rº   r¼   r»   )r¦   rº   r»   r¼   c                 3   s$   � | ]}t tt|ƒƒˆ jkV  qd S r    )rC   r   r   r³   )rY   r/   rÍ   r   r   r�   u  s   €" z,PositionNodeFinder.verify.<locals>.<genexpr>)rº   r»   r¦   r¼   )rÂ   F)rº   r¦   )r1   r�   z==Z	BINARY_OPú=rb   )ÚJUMP_IF_TRUE_OR_POPÚJUMP_IF_FALSE_OR_POPÚPOP_JUMP_IF_TRUEÚPOP_JUMP_IF_FALSEÚDELETE_SUBSCR)rÖ   r¥   ZLOAD_FAST_CHECKÚLOAD_GLOBALr£   ÚLOAD_FROM_DICT_OR_DEREF)r½   rÀ   r¿   r�   r}   ZCALL_INTRINSIC_1ZINTRINSIC_UNARY_POSITIVE)ÚargreprZBINARY_SLICEZINTRINSIC_IMPORT_STARZINTRINSIC_ASYNC_GEN_WRAPr£   Z__classdict__ZINTRINSIC_TYPEVARZCALL_INTRINSIC_2ZINTRINSIC_TYPEVAR_WITH_BOUNDZ"INTRINSIC_TYPEVAR_WITH_CONSTRAINTS)rº   r»   ZINTRINSIC_TYPEVARTUPLEZINTRINSIC_PARAMSPECZINTRINSIC_TYPEALIAS)r¦   rº   r»   )r»   r£   rå   z.type_params)rº   r¥   z.generic_baseZINTRINSIC_SUBSCRIPT_GENERICZ"INTRINSIC_SET_FUNCTION_TYPE_PARAMSr¥   z	.defaultsz.kwdefaultsr¦   Z__classdictcell__)ÚLIST_APPENDrc   ÚFORMAT_VALUEr©   ÚNOPZTO_BOOLrd   Z__static_attributes__)ÚBINARY_SUBSCRzSLICE+ZBINARY_c                    ó   t ttj| ƒjˆ ƒS r    )r)   r   r*   ÚBinOpr·   rÅ   ©Úop_typer   r   rÇ   t  r\   ZUNARY_)ÚUNARY_POSITIVEÚUNARY_NEGATIVEÚ	UNARY_NOTÚUNARY_INVERTc                    rë   r    )r)   r   r*   rµ   r·   rÅ   rí   r   r   rÇ   }  r\   )r`   r_   ZLOOKUP_METHODZLOAD_SUPER_ATTRc                    ó   t | ƒˆ jkS r    ©rC   r³   rÅ   rÍ   r   r   rÇ   �  ó    )rÖ   rä   r¥   r£   ÚLOAD_CLASSDEREFc                    s   t tj| ƒjˆ jkS r    )r   r*   r-   r.   r³   rÅ   rÍ   r   r   rÇ   ‹  r\   c                 S   s   t ttj| ƒjƒdkS )Nr   )r”   r   r*   r“   r•   rÅ   r   r   r   rÇ   Ž  s    )ZSTORE_SLICErÛ   ra   c                    ró   r    rô   rÅ   rÍ   r   r   rÇ   •  rõ   rÂ   zast.%s is not created from %s)Lrl   r<   r   rÎ   r   r   Úboolr   r
   r*   ÚWithÚ	AsyncWithr…   rˆ   r†   r‡   r7   r8   r4   ro   r“   Ú	AnnAssignrì   ÚConstantÚModr)   r   rÚ   Úvaluer-   r³   rÄ   Ú	JoinedStrr6   rC   ÚImportÚ
ImportFromr¯   Únamesr3   r5   rÃ   ÚMatchAsÚMatchSequenceÚ
MatchValueÚ	AugAssignÚop_type_mapræ   Úremovesuffixr+   ÚBoolOpÚ	SubscriptÚLoadr   rƒ   rµ   ÚUAddÚYieldr9   ZTypeVarTupler1   Ú	ParamSpecÚ	TypeAliasr.   Ztype_paramsÚFormattedValueÚLambdar=   ÚdictÚUSubr¸   ÚInvertrË   r   Ú__name__r   )rv   r   rp   Zop_nameZextra_filterrÂ   rÏ   rÔ   rh   Znode_ctxZ	ctx_matchÚtitler   )rp   r   rî   r   rt   ÷  sX  &*
ÿ
ÿþ

ÿ
ÿÿ
þ
ýüúù

ÿÿÿÿÿþÿþýÿýþü	ÿÿÿù	ÿýü÷úÿÿÿþÿÿÿÿ
þ
ÿÿþÿûø

ÿþ
ÿý
ÿÿþûþÿ
ÿ
ÿþ
úÿÿþ
üû




ÿýþzPositionNodeFinder.verifyc                 C   s   | j  |d ¡S r    )rj   Úget)rv   rx   r   r   r   rp   ¬  s   zPositionNodeFinder.instructionc                 C   s   | j  |jd d ¡S )Nr^   )rj   r  rX   )rv   rp   r   r   r   rŠ   ¯  s   z%PositionNodeFinder.instruction_beforec                 C   s   |   |¡}|d u rdS |jS )Nr]   )rp   rl   )rv   rx   Úir   r   r   rl   ´  s   
zPositionNodeFinder.opnamer   r#   )Úlinenorf   Ú
col_offsetre   rg   rh   .c                    sV   |   |¡}|d usJ ‚|j‰ˆd urˆjd usJ ‚t‡ ‡‡fdd„| jjˆj D ƒƒS )Nc                 3   sT   � | ]%‰ t ˆ ˆƒrt ˆ tjƒst ˆ tjƒst‡ ‡fd d„ˆD ƒƒrttˆ ƒV  qdS )c                 3   s$   � | ]}t ˆ|ƒt ˆ |ƒkV  qd S r    rÊ   )rY   r,   )r   Úpositionr   r   r�   Ü  s
   € ÿ
ÿz9PositionNodeFinder.find_node.<locals>.<genexpr>.<genexpr>N)r)   r*   ÚExprr  rÒ   r   r   )rY   ©rg   r  rh   r   r   r�   Õ  s   € ý
ü
úþù
ÿz/PositionNodeFinder.find_node.<locals>.<genexpr>)rp   r‹   r  r   rW   Z_nodes_by_line)rv   rx   rg   rh   rp   r   r  r   rm   ¾  s   
þzPositionNodeFinder.find_node)&r  Ú
__module__Ú__qualname__rÝ   r   r	   r   r*   ÚModuleÚintr   rw   rs   rG   ÚInstructionrq   rr   Ústaticmethodr÷   r´   rt   r   rp   rŠ   rÎ   rl   Zextra_node_typesr7   r8   Z
type_paramÚexprÚstmtÚexcepthandlerr    r   Útupler   rm   r   r   r   r   rR   m   s\    $:/ÿÿ
þV 7   8ÿ
þ
üû÷þý
	÷ðrR   )>r*   r7   rG   Útypesr   r   Útypingr   r   r   r   r   r	   r
   r   r   r   Z	executingr   r   r   r   r   r   Ú_exceptionsr   r   Ú	functoolsr   r   r!   rÎ   rC   rF   r!  rH   ÚIfExpÚIfrœ   ÚWhiler¬   r…   r†   r‡   rˆ   r«   ÚPowÚMultÚMatMultÚFloorDivÚDivrü   ÚAddÚSubÚLShiftÚRShiftÚBitAndÚBitXorÚBitOrr  ÚobjectrR   r   r   r   r   Ú<module>   sN    0 	-üüó