o
    i1                     @   sn  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 dlmZ d dlZd	ed
e	e fddZ d	ed
e	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 j0e j1e j2e j3e j4e j5e j6e j7e j8e j9e j:e 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)mangled_name)	lru_cachenodereturnc                 c   s"    	 t | dr| j} | V  nd S q)NTparent)hasattrr   r    r   e/var/www/html/karishye-ai-python/venv/lib/python3.10/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"      codec                 C   s   t t| S r!   )listdisget_instructions)r$   r   r   r   r'      s   r'   )z***@z///%+-z<<z>>&^|c                
   @   sX  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de	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re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	yY   | |dv rAt
jf}n| |dv rMt
jf}n | j|d|d| _Y nw | |}|d useJ | | 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>J       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)r'   f_codebc_dictr2   r6   	decoratoropname	find_noderesultr   ast	AttributeCallinstruction
fix_resultknown_issuestest_for_decoratorverifyr   decorator_list)selfr2   r3   r4   r5   r6   rG   rQ   r   r   r   __init__I   s:   




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   PRECALL      rB   r=   )r<   EXTENDED_ARGSTORE_)
isinstancer   rN   ClassDefr   rV   rK   sysversion_info
startswithrL   rM   rJ   )rW   r   rY   	node_funcr   r   r   rT      s.   
z%PositionNodeFinder.test_for_decoratorrQ   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rt|jtjr||jju r|jjS t jdkr|jdkr| |}|d ur|jdkr|jd	v r|j|jkrt|jtjr||jju r|jjS t jdkrt|tjrt|jtjr|jd
kr|jS |S )N)r]   r^      GET_ITERFOR_ITER)r]   r^      rB   
LOAD_CONSTBEFORE_WITHr]      LOAD_SPECIAL)	__enter__
__aenter__	UNARY_NOT)rc   rd   rK   ra   r   rN   ForiterListCompSetCompDictCompGeneratorExpcomprehensioninstruction_before	positionswithitemcontext_exprargreprUnaryOpopNotoperand)rW   r   rQ   beforer   r   r   rR      sZ   










.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rt|tjrt|jtjr|jjdkr|j}t|drt|tjtjfs|j}t|drt|tjtjfrd }t|drg |jj|jj}|r|d j}|j |jfdd|fd|fd|ffv rtd| ||rtd|j dkr|jdkrt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ra|j d#v r0td$|j  d%|j d&v r@|jd'kr@td(|j d)krat|tj!rat|j"tjrat|j#tj$ra|j"| _tjd*kr| %  }rt&| j'( d+ }|d, |j)  k r|d- k std. td.| j*j+j,d/kr|j d0krtd1| j*j+j,d/krt|tj-rtd2t|tj.r| j*j+j,|j/jkrtd3|j dkr|j0d/krtd4|j d5krt|tjrtd6d S d S d S )7N
COMPARE_OPIS_OPCONTAINS_OPc                 S   s*   g | ]}t |tjrt|jd kr|qS )r   )ra   rN   Comparelenopsr8   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   rB   c                 s       | ]	}t |tjV  qd S r!   ra   rN   Assertr   r   r   r   	<genexpr>>      z2PositionNodeFinder.known_issues.<locals>.<genexpr>zBknown bug in 3.11.1 https://github.com/python/cpython/issues/95921assertc                 s   r   r!   )ra   rN   patternr   r   r   r   r   J  r   z)pattern matching ranges seems to be wrongr\   superr   args)
LOAD_DEREF	__class__	LOAD_FASTLOAD_FAST_BORROWr   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   )r8   pr   r   r   r     r   )r]   r   r=   z&exception generation maps to conditionr]      )STORE_FAST_STORE_FASTSTORE_FAST_LOAD_FASTLOAD_FAST_LOAD_FASTzcan not map z to two ast nodesr   r   r   z^loading of __class__ is accociated with a random node at the end of a class if you use super()r   rn   r=   rZ   zAsynthetic opcodes in annotations are just bound to the first node__annotate__STORE_SUBSCRz"synthetic code to store annotationz<some opcodes in the annotation are just bound specific nodesz7some opcodes in the annotation are just bound TypeAliaszjust a store of the annotationr   z3part of a check that a name like `all` is a builtin)1rK   ra   types_cmp_issuetypes_cmp_issue_fixrN   walktestr   r   r   r   rM   r   rc   rd   r   anyr"   r   rP   funcNameidr   r   AsyncFunctionDefFunctionDefr   posonlyargsargargvalis_except_cleanupr    r   r   r   r   annotation_header_sizer%   rI   keysr7   r2   rH   co_name	AnnAssign	TypeAliasnamer   )	rW   r   rQ   comparisonsr   	first_argr   header_lengthlast_offsetr   r   r   rS     s   
	










 "zPositionNodeFinder.known_issuesc                 C   sh   t jdkr2dd t| j dD }t|dkr2|d dv r%|d= d}n|d= d}|g dkr2|S dS )	Nrn   c                 S   s   g | ]}|j qS r   )rK   )r8   instr   r   r   r     s    z=PositionNodeFinder.annotation_header_size.<locals>.<listcomp>   r   )COPY_FREE_VARS	MAKE_CELL   )RESUMEr   LOAD_SMALL_INTr   POP_JUMP_IF_FALSE	NOT_TAKENLOAD_COMMON_CONSTANT)rc   rd   	itertoolsislicerI   valuesr   )rW   headerheader_sizer   r   r   r     s   
	z)PositionNodeFinder.annotation_header_sizer   c                    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`   DELETE_c                 3   s0    | ]}t |tjo|jot| jkV  qd S r!   )ra   rN   ExceptHandlerr   r   r   r   r   r   r   r     s
    
z7PositionNodeFinder.is_except_cleanup.<locals>.<genexpr>)rK   ra   rN   r   ctxStorere   r   r   Delr   r    )r   r   r   r   r   r     s*   





z$PositionNodeFinder.is_except_cleanupc                    sP
   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rdS |dddr|t	jrdS |ddds|ddds|dr|t	jt	jt	jdrttt	jtt	jjjtrdS |dr|t	jrdS |dr|t	j jt	jdrdS |dr|t	j s|t	jt	jd rdS |d!r|t	j
rd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/r} j-.d0}|d1kr}|t	j/t0| d r}dS |t	j1t	jd)r|d2t"drdS |d3r|t	j2rdS |d4r|t	j3t	jd)rdS |t	jt	j4d)s|t	jt	j)d)rtj5t	j/r|d5rt jt6rt" jv rdS  jt"krdS |t	jt	jd)r|d6t"drdS |t	jr|d7tt	jjdrdS |t	jt	jt	jt	jt	j7fr&|d8r&dS tjdkr|t	j8t	j9d r>|d9d:d;r>dS |t	j3rK|d<rKdS |t	j$rZ|d9d=d;rZdS |t	j:shtj5t	jrq|d9d>d;rqdS |t	jr|d?d@drdS |t	j;r|d9dAd;s|dBdCd;s|dBdDd;s|dEt"d;rdS |t	j<r|d9dFd;s|dEj=d;rdS |t	j>r|d9dGd;s|dEj=d;rdS |t	j?r|d9dHd;s|d%j=j@d;s|drdS |t	jrjAr|dIdJd;rdS |dKdLd;rdS |d9dMd;rdS |d?d@drdS |t	j't	j(fr]jAr]|dr3dS |dBdNd;r<dS |dOdPdrEdS |dOdQdrNdS tjdRkr]|dSdTdr]dS |dUdVdrfdS |t	j rz|dddsx|dWrzdS |t	jBr|dXrdS tjdYkr|dZrdS |d[r|t	j2rdS |d\r|t	jt	jfrdS |dOdJdrdS |dOd@drdS |d]r|t	j't	jt	j?t	j;t	jCt	j(frdS |dOr|t	j?rj=j@ jkrdS |dUd^drdS |d]rtj5t	j;rdS |dBd_d;r|t	j;t	j>t	j<frdS tjdRkrW|d/d1d;r1|t	j3r1dS |d`d@dr:dS |dadbdrCdS |dSrW|t	jrWj@ jv rWdS td}	td|Ddcrlt	j3}	t	j4}n|Dddrt	j}	t0 j- fded}nn|Ddfrt	j8}	tEt	j9t	jFt	jGt	jHdg| fdhd}nP|div rt	j1}	t	j4} fdjd}n>|dkv rt	j}	t	j4} fdld}n,|dv rt	j}	dmd }n|Ddnrt	j)}t	j3}	n|Ddort	j)}t	j1}	 fdpd}tIdqd}
|tduptJdq pt|
|}t|	r|r|rdS drtjK j f }tL| )szE
        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)r8   krQ   r   r   r:   -  s    zAPositionNodeFinder.verify.<locals>.inst_match.<locals>.<dictcomp>)ra   strrK   )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!   )ra   typer   )r8   r   vr   r   r   r   :  s    
z@PositionNodeFinder.verify.<locals>.node_match.<locals>.<genexpr>)ra   allitems)r   r   r   r   r   
node_match1  s   	z-PositionNodeFinder.verify.<locals>.node_matchr<   rB   )rB   r   r   r\   )LOAD_FAST_AND_CLEARr   )rB   CALL_FUNCTION_EXr   	LOAD_NAME__annotations__)r   r>   joinr?   )rB   BUILD_STRING)leftr   r   )r   r   )r   r   r   )r   )rm   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!   )r   r   r   r   )r8   aliasr   r   r   r     s   " z,PositionNodeFinder.verify.<locals>.<genexpr>)r   r   r   r   )r   F)r   r   )r   r   z==	BINARY_OP=z[]rA   )JUMP_IF_TRUE_OR_POPJUMP_IF_FALSE_OR_POPPOP_JUMP_IF_TRUEr   DELETE_SUBSCR)r   r   LOAD_FAST_CHECKr   LOAD_GLOBALr   LOAD_FROM_DICT_OR_DEREF!LOAD_FAST_BORROW_LOAD_FAST_BORROW)r   r   r   )rl   r   rh   CALL_INTRINSIC_1INTRINSIC_UNARY_POSITIVE)r   BINARY_SLICEINTRINSIC_IMPORT_STARINTRINSIC_ASYNC_GEN_WRAPr   __classdict__INTRINSIC_TYPEVARCALL_INTRINSIC_2INTRINSIC_TYPEVAR_WITH_BOUND"INTRINSIC_TYPEVAR_WITH_CONSTRAINTS)r   r   INTRINSIC_TYPEVARTUPLEINTRINSIC_PARAMSPECINTRINSIC_TYPEALIAS)r   r   r   z.type_params)r   r   z.generic_baseINTRINSIC_SUBSCRIPT_GENERIC"INTRINSIC_SET_FUNCTION_TYPE_PARAMSr   	.defaults.kwdefaultsrn   r  )r  r  r   __classdictcell__)LIST_APPENDrB   FORMAT_VALUEr   NOPTO_BOOLrC   r   __static_attributes__INTRINSIC_SET_TYPEPARAM_DEFAULTr   )r   r   __conditional_annotations__)BINARY_SUBSCRzSLICE+BINARY_c                       t ttj| j S r!   )ra   r   rN   BinOpr   r   op_typer   r   r     r;   UNARY_)UNARY_POSITIVEUNARY_NEGATIVErs   UNARY_INVERTc                    r  r!   )ra   r   rN   r   r   r   r  r   r   r     r;   )r?   r>   LOOKUP_METHODLOAD_SUPER_ATTRc                       t |  jkS r!   r   r   r   r   r   r   r         )r   r   r   r   LOAD_CLASSDEREFc                    s   t tj| j jkS r!   )r   rN   r   r   r   r   r   r   r   r     r;   c                 S   s   t ttj| jdkS )Nr   )r   r   rN   r   r   r   r   r   r   r     s    )STORE_SLICEr   r@   c                    r'  r!   r(  r   r   r   r   r     r)  r   zast.%s is not created from %s)MrK   r   r   r   r   r   boolr   r
   rN   With	AsyncWithrv   ry   rw   rx   rc   rd   rb   rP   r   r   r  ConstantModra   r   r   valuer   r   r   	JoinedStrr   r   Import
ImportFromr   namesr   r   r   MatchAsMatchSequence
MatchValuer   removesuffix	AugAssignop_type_maprO   BoolOp	SubscriptLoadr   tuplert   r   UAddYieldTypeVarTypeVarTupler   	ParamSpecr   r   type_paramsFormattedValueLambdare   dictUSubr   Invertr   r   __name__r   )rW   r   rQ   op_nameextra_filterr   r   r   r   rG   node_ctx	ctx_matchtitler   )rQ   r   r   r   rU     s|  &*








	
	









$$





zPositionNodeFinder.verifyc                 C   s   | j |d S r!   )rI   get)rW   rY   r   r   r   rQ     s   zPositionNodeFinder.instructionc                 C   s   | j |jd d S )Nr=   )rI   rQ  r7   )rW   rQ   r   r   r   r{     s   z%PositionNodeFinder.instruction_beforec                 C   s   |  |}|d u rdS |jS )Nr<   )rQ   rK   )rW   rY   ir   r   r   rK     s   
zPositionNodeFinder.opnamer   r\   )linenorE   
col_offsetrD   rF   rG   .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   )r8   attr)r   positionr   r   r     s
    
z9PositionNodeFinder.find_node.<locals>.<genexpr>.<genexpr>N)ra   rN   Exprr8  r   r   r   )r8   rF   rV  rG   r   r   r   
  s    


z/PositionNodeFinder.find_node.<locals>.<genexpr>)rQ   r|   rS  r   r6   _nodes_by_line)rW   rY   rF   rG   rQ   r   rX  r   rL     s   
zPositionNodeFinder.find_node)'rK  
__module____qualname__r   r   r	   r   rN   Moduleintr   rX   rT   r&   InstructionrR   rS   r   staticmethodr,  r   rU   r   rQ   r{   r   rK   extra_node_typesrc   rd   
type_paramexprstmtexcepthandlerr   r   r?  r   rL   r   r   r   r   r1   B   s^    $;/
g +7   O


	r1   )?rN   rc   r&   typesr   r   typingr   r   r   r   r   r	   r
   r   r   r   	executingr   r   r   r   r   r   _exceptionsr   r   _utilsr   	functoolsr   r   r    r"   r%   r^  r'   IfExpIfr   Whiler   rv   rw   rx   ry   r   PowMultMatMultFloorDivDivr0  AddSubLShiftRShiftBitAndBitXorBitOrr;  objectr1   r   r   r   r   <module>   sP    0 	