Format: application/x-python-code
⬇ Download File (17.7 KB)
   1  o
   2  
   3  ߛh���@slddlZddlZddlZddlmZmZddlmZmZm	Z	m
   4  Z
   5  mZmZm
   6  Z
   7  mZmZmZddlmZmZmZmZmZmZddlmZmZddlmZded	e	efd
   8  d�Zded	e	efdd
   9  �Zded	efdd�Z ed�ded	e!ej"fdd��Z#ej$ej%ej&ej'fZ(e(ej)ej*ej+ej,fZ-ej.ej/ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:d�
  10  Z;Gdd�de<�Z=dS)�N)�CodeType�	FrameType)
  11  �Any�Callable�Iterator�Optional�Sequence�Set�Tuple�Type�Union�cast�)�EnhancedAST�NotOneValueFound�Source�only�function_node_types�assert_)�
  12  KnownIssue�VerifierFailure)�	lru_cache�node�returnccs"�	t|d�r|j}|VndSq)NT�parent)�hasattrr�r�r�Uc:\Users\shubh\Videos\agent\nova\Lib\site-packages\executing/_position_node_finder.py�parentss�
  13  �rccs�|Vt|�EdHdS�N)rrrrr�node_and_parentss�r!cCsFt|tj�r
  14  |j}nSt|tj�r|j}nIt|tj�r&|jp$|j�	d�d}n7t|tj
  15  tjtjf�r5|j}n(t|tj
  16  �rD|js@J�|j}ntjdkrSt|tj�rS|j}n
  17  tdtt|����|�d�r�|�d�s�|j|}}t|tj�rx||jvs�t|d�s�	|S|j|}}t|tj�rx||jvrx|j�d�}|dkr�d||S|S)	z�
  18  
  19      Parameters:
  20          node: the node which should be mangled
  21          name: the name of the node
  22  
  23      Returns:
  24          The mangled name of `node`
  25      �.r���zno node to mangle for type �__r�_�)�
  26  isinstance�ast�	Attribute�attr�Name�id�alias�asname�name�split�FunctionDef�ClassDef�AsyncFunctionDef�
  27  ExceptHandler�sys�version_info�TypeVar�	TypeError�repr�type�
  28  startswith�endswithr�basesr�lstrip)rr1r�child�
  29  class_namerrr�mangled_names4
  30  
  31  
  32  
  33  ��rC��codecCstt�|��Sr )�list�dis�get_instructions)rErrrrHIsrH)
  34  z**�*�@z//�/�%�+�-z<<z>>�&�^�|c
  35  @sJeZdZdZdedeedejde	de
  36  f
  37  dd�Zd	ed
  38  e	ddfd
  39  d�Zd	ede
  40  jdefdd�Zd	ede
  41  jddfdd�Zede
  42  jd	edefdd��Zd	ede
  43  jddfdd�Zd
  44  e	dee
  45  jfdd�Zde
  46  jdee
  47  jfdd�Zd
  48  e	defdd�ZdZejd kr�ejfZd!ejejej ej!ge�Rfd
  49  e	d"e"ed#e#e$d$fdefd%d&�Z%dS)'�PositionNodeFindera%
  50      Mapping bytecode to ast-node based on the source positions, which where introduced in pyhon 3.11.
  51      In general every ast-node can be exactly referenced by its begin/end line/col_offset, which is stored in the bytecode.
  52      There are only some exceptions for methods and attributes.
  53      �frame�stmts�tree�lasti�sourcecCs"dd�t|j�D�|_||_d|_|�|�dkr#|d8}|�|�dksz|�|�|_Wn+tyV|�|�dvr>t	j
  54  f}n
  55  |�|�dvrJt	jf}n�|j|d|d�|_Ynw|�|�}|dusbJ�|�
  56  |j|�|_|�|j|�|�|j|�|jdur�|�|j|�dSt|j|jjv�dS)	NcSsi|]}|j|�qSr)�offset)�.0�bcrrr�
  57  <dictcomp>u�z/PositionNodeFinder.__init__.<locals>.<dictcomp>�CACHE�)�LOAD_METHOD�	LOAD_ATTR�
  58  STORE_ATTR�DELETE_ATTR)�CALL�CALL_KW)�end_col_offset�
  59  end_lineno)�match_positions�typ)rH�f_code�bc_dictrW�	decorator�opname�	find_node�resultrr*r+�Call�instruction�
  60  fix_result�known_issues�test_for_decorator�verifyr�decorator_list)�selfrSrTrUrVrWrhrprrr�__init__ts8�
  61  
  62  
  63  ��
  64  
  65  zPositionNodeFinder.__init__r�indexrNcCs�t|jtjtf�ra||jjvrc|j}	|�|d�dks!tjdkr(|�|�dks*dS|d7}|�|�dvr@|d7}|�|�dvs5|�|��	d�rW|�
  66  |�|krW||_||_dStjdkr`|d7}qdSdS)	NT�ZPRECALLr#rcr^)r]�EXTENDED_ARG�STORE_)
  67  r)rr*r4rrurlr7r8r=rmrnrk)rvrrxZ	node_funcrrrrs�s.���
  68  ��z%PositionNodeFinder.test_for_decoratorrpcCs tjdkr|jdvrt|jtj�r||jjur|jStjdkrD|jdvrDt|jjtjtj	tj
  69  tjf�rDt|jtj�rD||jjurD|jjStjdkrs|jdkrs|�
  70  |�}|durs|jdkrs|j|jkrst|jtj�rs||jjurs|jjStjdkr�|jdkr�t|jtj�r�||jjur�|jjS|S)N)r$r%���GET_ITER�FOR_ITER)r$r%�rc�
  71  LOAD_CONST�BEFORE_WITH)r7r8rlr)rr*�For�iter�ListComp�SetComp�DictComp�GeneratorExp�
  72  comprehension�instruction_before�	positions�withitem�context_expr)rvrrp�beforerrrrq�sB
  73  
  74  �
  75  
  76  ���
  77  
  78  �
  79  
  80  �zPositionNodeFinder.fix_resultcCs�|jdvr<t|t�r<t|t�r6dd�t�|j�D�}t|d�t|�dkr0t	t
  81  |d�}|_ntd|��td|��t
  82  jdd	�d
  83  kr_t|tj�r_|jdkr_tdd
  84  �t|�D��r_td��t|tj�ritd��tdd
  85  �t|�D��rxtd��t
  86  jdkr�t|tj�r�t|jtj�r�|jjdkr�|j}t|d�r�t|tjtjf�s�|j}t|d�r�t|tjtjf�r�d}t|d�r�g|jj�|jj�}|r�|dj}|j|jfdd|fd|ffvr�td��|�||�r�td��|jdkr�|jdkr�td��|jdk�rt|tj��stdd
  87  �t |�D���rt
  88  jdk�rtd ��t
  89  jd!k�r`|jd"v�r-td#|j�d$���|jdk�r=|jd%k�r=td&��|jd'k�rbt|tj!��rdt|j"tj��rft|j#tj$��rh|j"|_dSdSdSdSdSdS)(N��
  90  COMPARE_OP�IS_OP�CONTAINS_OPcSs*g|]}t|tj�rt|j�dkr|�qS)r)r)r*�Compare�len�ops�rY�nrrr�
  91  <listcomp>@s
  92  ��z3PositionNodeFinder.known_issues.<locals>.<listcomp>z expected at least one comparisonrrz4multiple chain comparison inside %s can not be fixedz+chain comparison inside %s can not be fixedr$)r$�rrccs��|]	}t|tj�VqdSr �r)r*�Assertr�rrr�	<genexpr>W��z2PositionNodeFinder.known_issues.<locals>.<genexpr>zBknown bug in 3.11.1 https://github.com/python/cpython/issues/95921�assertcsr�r )r)r*�patternr�rrrr�cr�z)pattern matching ranges seems to be wrongr#�superr�args)�
  93  LOAD_DEREF�	__class__�	LOAD_FASTr�zsuper optimizationzCexeption cleanup does not belong to the last node in a except block�
  94  STORE_NAME�
  95  __classcell__zstore __classcell__csr�r r�)rY�prrrr��r�)r$r�r^z&exception generation maps to condition�r$�
  96  )ZSTORE_FAST_STORE_FASTZSTORE_FAST_LOAD_FASTZLOAD_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�)%rlr)�types_cmp_issue�types_cmp_issue_fixr*�walk�testrr�r
  97  rrnrr7r8r��anyr!r�ro�funcr-r.rrr5r3r��posonlyargs�arg�argval�is_except_cleanupr�UnaryOp�operand�op�Not)rvrrpZcomparisonsr�Z	first_argr�rrrrr3s��
  98  	
  99  �
 100  �
 101  �
 102  ��
 103  
 104  �����
 105  
 106  
 107  �
 108  ���
 109  ����zPositionNodeFinder.known_issues�instcs��jdvrdSt|tj�r#t|jtj�r#�j�d�r#t|��jkr#dSt|tj�r?t|jtj	�r?�j�d�r?t|��jkr?dSt
 110  �fdd�t|�D��S)N)r��
 111  STORE_FAST�STORE_DEREF�STORE_GLOBAL�DELETE_NAME�DELETE_FAST�DELETE_DEREF�
 112  DELETE_GLOBALFr{ZDELETE_c3s0�|]}t|tj�o|jot|��jkVqdSr )r)r*r6r1rCr�r��r�rrr��s
 113  ��
 114  �z7PositionNodeFinder.is_except_cleanup.<locals>.<genexpr>)rlr)r*r-�ctx�Storer=rCr��Delr�r)r�rrr�rr��s*
 115  
 116  
 117  ��
 118  �
 119  ��
 120  ��z$PositionNodeFinder.is_except_cleanupcs\	�j}dd�}td�}dttttfdtdtf�fdd�}d	ttttd
 121  ffdtdtf�fdd�}|d
 122  kr9dS|d�rG|t	j
 123  t	jf�rGdS|d�rY|t	jt	j
 124  t	jt	jf�rYdStjdkrn|d�rn|t	jt	jt	jf�rndS|d�r||t	jt	jf�r|dS|d�r�|t	j�r�dS|ddd�r�|t	j�r�dS|ddd�s�|ddd�s�|d�r�|t	jt	jt	jd�r�ttt	jtt	j��j�jt�r�dS|d�r�|t	j�r�dS|d�r�|t	j�jt	jd�r�dS|d�r�|t	j �s�|t	jt	jd �r�dS|d!�r�|t	j
 125  �r�dS|d"d#d��r|t	j��rdS|d$��r|t	j!��r�jt"��k�rdS|d%��r=|t	j#t	j$f��r=t%�fd&d'�tt	j#��j&D���r=dS|d(��r`|t	j't	jt	j(f��sV|t	jt	j)d)��r`�jt"��k�r`dS	|d/��rv|t	j-t.�j/�0d0�d ��rvdS|t	j1t	jd)��r�|d1t"��d��r�dS|d2��r�|t	j2��r�dS|d3��r�|t	j3t	jd)��r�dS|t	jt	j4d)��s�|t	jt	j)d)��r�t�j5t	j-��r�|d4t"��d��r�dS|t	jt	jd)��r�|d5t"��d��r�dS|t	j��r�|d6tt	j��jd��r�dS|t	jt	jt	jt	j
 126  t	j6f��r
 127  |d7��r
 128  dStjdk�r\|t	j7t	j8d ��r"|d8d9d:��r"dS|t	j3��r/|d;��r/dS|t	j$��r>|d8d<d:��r>dS|t	j9��sLt�j5t	j
 129  ��rU|d8d=d:��rUdS|t	j��rd|d>d?d��rddS|t	j:��r�|d8d@d:��s�|dAdBd:��s�|dAdCd:��s�|dDt"��d:��r�dS|t	j;��r�|d8dEd:��s�|dD�j<d:��r�dS|t	j=��r�|d8dFd:��s�|dD�j<d:��r�dS|t	j>��r�|d8dGd:��s�|dH�j<j?d:��s�|d��r�dS|t	j��r�j@�r|dIdJd:��r�dS|dKdLd:��r�dS|d8dMd:��r�dS|d>d?d��rdS|t	j't	j(f��r2�j@�r2|d��rdS|dAdNd:��r dS|dOdPd��r)dS|dOdQd��r2dS|dRdSd��r;dS|t	j ��rO|ddd��sM|dT��rOdS|t	jA��r\|dU��r\dStjdVk�r�|dW��ridS|dX��rv|t	j2��rvdS|dY��r�|t	jt	jf��r�dS|dOdJd��r�dS|dOd?d��r�dS|dO��r�|t	j't	jt	j>t	j:t	jBt	j(f��r�dS|dO��r�|t	j>��rňj<j?�jk�r�dS|dRdZd��r�dS|dO��r�t�j5t	j:��r�dStd�}td��|�Cd[��r�t	j3}t	j4}n�|�Cd\��rt	j}t.�j/��fd]d�}nn|�Cd^��r%t	j7}tDt	j8t	jEt	jFt	jGd_�|��fd`d�}nP|dav�r7t	j1}t	j4}�fdbd�}n>|dcv�rIt	j}t	j4}�fddd�}n,|dv�rVt	j}ded�}n|�Cdf��rct	j)}t	j3}n|�Cdg��rut	j)}t	j1}�fdhd�}tH�did�}	|td�u�p�tI�di��p�t|	|�}
 130  t�|��r�|
 131  �r�|���r�dSdjt��jJ�jf}tK|����)kzE
 132          checks if this node could gererate this instruction
 133          cSsdS)NTr��errr�<lambda>�sz+PositionNodeFinder.verify.<locals>.<lambda>N�opnames�kwargsrcs0t|t�r|g}�j|vo|�fdd�|D�kS)a)
 134              match instruction
 135  
 136              Parameters:
 137                  opnames: (str|Seq[str]): inst.opname has to be equal to or in `opname`
 138                  **kwargs: every arg has to match inst.arg
 139  
 140              Returns:
 141                  True if all conditions match the instruction
 142  
 143              csi|]}|t�|��qSr��getattr)rY�k�rprrr[s�zAPositionNodeFinder.verify.<locals>.inst_match.<locals>.<dictcomp>)r)�strrl)r�r�r�rr�
 144  inst_matchs
 145  
 146  
 147  �z-PositionNodeFinder.verify.<locals>.inst_match�	node_type.cs$t�|�ot�fdd�|��D��S)a
 148              match the ast-node
 149  
 150              Parameters:
 151                  node_type: type of the node
 152                  **kwargs: every `arg` has to be equal `node.arg`
 153                          or `node.arg` has to be an instance of `arg` if it is a type.
 154              c3s<�|]\}}t|t�rtt�|�|�nt�|�|kVqdSr )r)r<r�)rYr��vrrrr�s���
 155  �z@PositionNodeFinder.verify.<locals>.node_match.<locals>.<genexpr>)r)�all�items)r�r�rrr�
 156  node_matchs	�z-PositionNodeFinder.verify.<locals>.node_matchr]rc)rcr�r#)ZLOAD_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�c3s$�|]
 157  }ttt|���jkVqdSr )rCr
 158  rr�)rYr/r�rrr�us�"z,PositionNodeFinder.verify.<locals>.<genexpr>)r�r�r�r�)r�F)r�r�)r1r�z==Z	BINARY_OP�=rb)�JUMP_IF_TRUE_OR_POP�JUMP_IF_FALSE_OR_POP�POP_JUMP_IF_TRUE�POP_JUMP_IF_FALSE�
 159  DELETE_SUBSCR)r�r�ZLOAD_FAST_CHECK�LOAD_GLOBALr��LOAD_FROM_DICT_OR_DEREF)r�r�r�r�r}ZCALL_INTRINSIC_1ZINTRINSIC_UNARY_POSITIVE)�argreprZBINARY_SLICEZINTRINSIC_IMPORT_STARZINTRINSIC_ASYNC_GEN_WRAPr�Z
 160  __classdict__ZINTRINSIC_TYPEVARZCALL_INTRINSIC_2ZINTRINSIC_TYPEVAR_WITH_BOUNDZ"INTRINSIC_TYPEVAR_WITH_CONSTRAINTS)r�r�ZINTRINSIC_TYPEVARTUPLEZINTRINSIC_PARAMSPECZINTRINSIC_TYPEALIAS)r�r�r�)r�r�r�z.type_params)r�r�z
 161  .generic_baseZINTRINSIC_SUBSCRIPT_GENERICZ"INTRINSIC_SET_FUNCTION_TYPE_PARAMSr�z	.defaultsz.kwdefaultsr�Z__classdictcell__)�LIST_APPENDrc�FORMAT_VALUEr��NOPZTO_BOOLrdZ__static_attributes__)�
 162  BINARY_SUBSCRzSLICE+ZBINARY_c�tttj|�j��Sr )r)r
 163  r*�BinOpr�r���op_typerrr�tr\ZUNARY_)�UNARY_POSITIVE�UNARY_NEGATIVE�	UNARY_NOT�UNARY_INVERTcr�r )r)r
 164  r*r�r�r�r�rrr�}r\)r`r_Z
 165  LOOKUP_METHODZLOAD_SUPER_ATTRc�t|��jkSr �rCr�r�r�rrr���)r�r�r�r��LOAD_CLASSDEREFcsttj|�j�jkSr )r
 166  r*r-r.r�r�r�rrr��r\cSstttj|�j�dkS)Nr)r�r
 167  r*r�r�r�rrrr��s)ZSTORE_SLICEr�racr�r r�r�r�rrr��r�r�zast.%s is not created from %s)Lrlr<rr�rr�boolrr
 168  r*�With�	AsyncWithr�r�r�r�r7r8r4ror��	AnnAssignr��Constant�Modr)r
 169  r��valuer-r�r��	JoinedStrr6rC�Import�
 170  ImportFromr��namesr3r5r��MatchAs�
 171  MatchSequence�
 172  MatchValue�	AugAssign�op_type_mapr��removesuffixr+�BoolOp�	Subscript�Loadrr�r��UAdd�Yieldr9ZTypeVarTupler1�	ParamSpec�	TypeAliasr.Ztype_params�FormattedValue�Lambdar=�dict�USubr��Invertr�r�__name__r)rvrrpZop_nameZextra_filterr�r�r�rhZnode_ctxZ	ctx_match�titler)rprr�rrt�sX&*
 173  �
 174  ��
 175  
 176  �
 177  ��
 178  �
 179  ����
 180  
 181  �������������	
 182  ����	�������������
 183  �
 184  ������
 185  
 186  ��
 187  ��
 188  ������
 189  �
 190  ��
 191  ��
 192  ��
 193  ��
 194  
 195  
 196  
 197  
 198  ���zPositionNodeFinder.verifycCs|j�|d�Sr )rj�get)rvrxrrrrp�szPositionNodeFinder.instructioncCs|j�|jdd�S)Nr^)rjrrX)rvrprrrr��sz%PositionNodeFinder.instruction_beforecCs|�|�}|durdS|jS)Nr])rprl)rvrx�irrrrl�s
 199  zPositionNodeFinder.opnamerr#)�linenorf�
 200  col_offsetrergrh.csV|�|�}|dusJ�|j��dur�jdusJ�t���fdd�|jj�jD��S)Nc3sT�|]%�t���rt�tj�st�tj�st��fdd��D��rtt��VqdS)c3s$�|]
 201  }t�|�t�|�kVqdSr r�)rYr,)r�positionrrr��s
 202  ��
 203  �z9PositionNodeFinder.find_node.<locals>.<genexpr>.<genexpr>N)r)r*�Exprrr�r
 204  r)rY�rgrrhrrr��s��
 205  �
 206  ���
 207  �z/PositionNodeFinder.find_node.<locals>.<genexpr>)rpr�rrrWZ_nodes_by_line)rvrxrgrhrprrrrm�s
 208  �zPositionNodeFinder.find_node)&r�
 209  __module__�__qualname__r�rr	rr*�Module�intrrwrsrG�Instructionrqrr�staticmethodr�r�rtrrpr�r�rlZextra_node_typesr7r8Z
 210  type_param�expr�stmt�
 211  excepthandlerr�r�tuplerrmrrrrrRms\$:/��
 212  �V
 213  78�
 214  �
 215  �����
 216  	��rR)>r*r7rG�typesrr�typingrrrrrr	r
 217  rrr
 218  Z	executingrrrrrr�_exceptionsrr�	functoolsrrr!r�rCrFr!rH�IfExp�Ifr��Whiler�r�r�r�r�r��Pow�Mult�MatMult�FloorDiv�Divr��Add�Sub�LShift�RShift�BitAnd�BitXor�BitOrr�objectrRrrrr�<module>sN0 	-���