o
    Ďir                     @   s6  U d dl mZ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mZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z% ej&dk rqd d	l'm(Z(m)Z) nd d	lm(Z(m)Z) ej&d
k rd dl'm*Z* nd dlm*Z* e%G dd deZ+e%G dd deZ,e%G dd deZ-e%G dd deZ.ee-e.f Z/dedeedf fddZ0e%eG dd dZ1de2dee2 fddZ3de2dee2 de2fdd Z4d!d" Z5e%eG d#d$ d$e1Z6G d%d& d&e
Z7G d'd( d(e
Z8G d)d* d*Z9e9 Z:d+Z;e Z<e= Z>G d,d- d-e?Z@d.e2d/e8fd0d1ZAejBd2ejCd3ejDd4ejEd5ejFd6ejGd7ejHd8ejId9ejJd:ejKd;ejLd<ejMd=ejNd>iZOeeej ee2 f ePd?< ejQd@ejRdAejSdBejTdCejUdDejVdEejWdFiZXeeejY ee2dGf f ePdH< ejZdIej[dJej\dKej]dLiZ^eeej_ ee2dGf f ePdM< G dNdO dOZ`G dPdQ dQZadeee2dGf df fdRdSZbdTeejcdf d/e8fdUdVZddedTejed/e8fdWdXZfdYededTejed/e8fdZd[Zgd\e2d/e8fd]d^ZhdTejed/e8fd_d`Zidadb Zjh dcZkele2emeneoejpejqejrejsejtejuejve7e9hZwee, ePdd< dvdedfZxdgZydhZze{e|e{e{e|e}@ Z~ei  Zeejj ePdi< eeehZh emexemelexeleyejenexeneze{exe{e~e}exe}ee2exe2eoexeoedjdk eD ejqexejqezejpexejpeyejrexejreyejtexejteyejuexejuezejvexejve|e2ejexejeyejjejjZh ewe{e}e=eeee"e#Zee/ ePdl< h eZe1dmdndndndne{ dndndoe6ewekedpdqhedmdmdmedr	e1dmdmdmdmdmdmdmdsdtZg duZdS )w    )isclass	signature	Signature)	AnnotatedAnyStrCallableDictLiteral
NamedTupleNewTypeOptionalProtocolSetSequenceTupleType	TypeGuardUnionget_args
get_originis_typeddictN)cached_property)	dataclassfield)MethodDescriptorType
ModuleType)undoc)      )SelfLiteralString)r      )TypeAliasTypec                   @      e Zd ZdddZdS )
HasGetItemreturnNc                 C      d S N selfkeyr(   r(   U/home/jeff/fluffinator/venv/lib/python3.10/site-packages/IPython/core/guarded_eval.py__getitem__/       zHasGetItem.__getitem__r%   N)__name__
__module____qualname__r-   r(   r(   r(   r,   r$   -       r$   c                   @   s   e Zd ZdefddZdS )InstancesHaveGetItemr%   c                 O   r&   r'   r(   )r*   argskwargsr(   r(   r,   __call__4   r.   zInstancesHaveGetItem.__call__N)r0   r1   r2   r$   r7   r(   r(   r(   r,   r4   2   s    r4   c                   @   r#   )
HasGetAttrr%   Nc                 C   r&   r'   r(   r)   r(   r(   r,   __getattr__9   r.   zHasGetAttr.__getattr__r/   )r0   r1   r2   r9   r(   r(   r(   r,   r8   7   r3   r8   c                   @   s   e Zd ZdS )DoesNotHaveGetAttrN)r0   r1   r2   r(   r(   r(   r,   r:   <   s    r:   funcr%   c                 C   sV   t | dd}t|}t | dd}t |dd}|dur)|r)|r$|r)||vr)t ||S dS )z}Get unbound method for given bound method.

    Returns None if cannot get unbound method, or method is already unbound.
    __self__Nr0   __dict__)getattrtype)r;   ownerowner_classnameinstance_dict_overridesr(   r(   r,   _unbind_methodE   s   
rD   c                   @   s   e Zd ZU dZdZeed< dZeed< dZeed< dZ	eed< dZ
eed< dZeed< dZeed	< eed
Zee ed< dd Zdd Zddeedf fddZdd ZdS )EvaluationPolicyz Definition of evaluation policy.Fallow_locals_accessallow_globals_accessallow_item_accessallow_attr_accessallow_builtins_accessallow_all_operationsallow_any_callsdefault_factoryallowed_callsc                 C      | j S r'   )rH   r*   valueitemr(   r(   r,   can_get_itemh      zEvaluationPolicy.can_get_itemc                 C   rP   r'   )rI   )r*   rR   attrr(   r(   r,   can_get_attrk   rU   zEvaluationPolicy.can_get_attrNdunders.c                 C   s   | j rdS d S NT)rK   r*   rX   abr(   r(   r,   can_operaten   s   zEvaluationPolicy.can_operatec                 C   s:   | j rdS || jv rdS t|}|r|| jv rdS d S d S rY   )rL   rO   rD   )r*   r;   owner_methodr(   r(   r,   can_callr   s   
zEvaluationPolicy.can_callr'   )r0   r1   r2   __doc__rF   bool__annotations__rG   rH   rI   rJ   rK   rL   r   setrO   r   r   rT   rW   r   strr]   r_   r(   r(   r(   r,   rE   Z   s   
 rE   module_nameaccess_pathc                 C   s"   t j|  }|D ]}t||}q|S )zGet value from external module given a dotted access path.

    Raises:
    * `KeyError` if module is removed not found, and
    * `AttributeError` if access path does not match an exported object
    )sysmodulesr>   )re   rf   member_typerV   r(   r(   r,   _get_external   s   
rj   method_namec              	   C   s   |t jvrdS z7t||}t| }t| |krW dS |dkr!W dS t| |r9t||d }t||d }||kr<W dS W d S W d S  ttfyJ   Y dS w )NFT__getattribute__)rg   rh   rj   r?   
isinstancer>   AttributeErrorKeyError)rR   re   rf   rk   ri   
value_typemethodmember_methodr(   r(   r,   _has_original_dunder_external   s&   


rs   c           	      C   s^   t | }||v r
dS t||d }|d u rd S ||v rdS |D ]^}}t| |||r, dS qdS )NTF)r?   r>   rs   )	rR   allowed_typesallowed_methodsallowed_externalrk   rp   rq   re   rf   r(   r(   r,   _has_original_dunder   s   rw   c                   @   sX  e Zd ZU eedZee ed< eedZ	ee
edf  ed< eedZee ed< eedZee
edf  ed< eedZeed< eedZee
edf  ed< eed	d
Zeeee f ed< dd Zdd Zd de
edf fddZdedee fddZedee fddZedee fddZedee fddZdee fddZdS )!SelectivePolicyrM   allowed_getitem.allowed_getitem_externalallowed_getattrallowed_getattr_externalallowed_operationsallowed_operations_externalF)rN   init_operation_methods_cachec              
   C   s   t || j| j| jdd}t || j| j| jdd}d}|d u r#|r#d}n|o&|}|rrt|}t||s4dS t||}t|t	}|sBdS t|| jv rKdS | jD ]#^}	}
zt
|	|
}t||}W n ttfyk   Y  dS w ||k  S dS )Nrl   rt   ru   rv   rk   r9   FT)rw   r{   _getattribute_methodsr|   _getattr_methodsr?   hasattrr>   rm   propertyrj   ro   rn   )r*   rR   rV   has_original_attributehas_original_attracceptvalue_classclass_attr_valis_propertyre   rf   external_classexternal_class_attr_valr(   r(   r,   rW      sJ   



zSelectivePolicy.can_get_attrc                 C   s   t || j| j| jddS )zTAllow accessing `__getiitem__` of allow-listed instances unless it was not modified.r-   r   )rw   ry   _getitem_methodsrz   rQ   r(   r(   r,   rT     s   zSelectivePolicy.can_get_itemNrX   c                    s0   |g |d ur  | t fdd|D S )Nc              
      s2   g | ]} D ]}t |j|j|d qqS )r   )rw   r}   _operator_dunder_methodsr~   ).0dunderobjobjectsr*   r(   r,   
<listcomp>  s    	z/SelectivePolicy.can_operate.<locals>.<listcomp>)appendallrZ   r(   r   r,   r]     s   
zSelectivePolicy.can_operater   r%   c                 C   s(   || j vr| | j|| j |< | j | S r'   )r   _safe_get_methodsr}   )r*   r   r(   r(   r,   r   #  s
   


z(SelectivePolicy._operator_dunder_methodsc                 C      |  | jdS )Nr-   )r   ry   r*   r(   r(   r,   r   *     z SelectivePolicy._getitem_methodsc                 C   r   )Nr9   r   r{   r   r(   r(   r,   r   .  r   z SelectivePolicy._getattr_methodsc                 C   r   )Nrl   r   r   r(   r(   r,   r   2  r   z%SelectivePolicy._getattribute_methodsc                    s    fdd|D S )Nc                    s    h | ]}t | d }|r|qS r'   r>   )r   class_rq   rB   r(   r,   	<setcomp>7  s    z4SelectivePolicy._safe_get_methods.<locals>.<setcomp>r(   )r*   classesrB   r(   r   r,   r   6  s   
z!SelectivePolicy._safe_get_methodsr'   )r0   r1   r2   r   rc   ry   r   r4   rb   rz   r   rd   r{   MayHaveGetattrr|   r}   r~   dictr   r   r   rW   rT   r]   r   r   r   r   r   r   r(   r(   r(   r,   rx      s*   
 6
rx   c                   @      e Zd ZdZdS )_DummyNamedTuplez<Used internally to retrieve methods of named tuple instance.Nr0   r1   r2   r`   r(   r(   r(   r,   r   ?      r   c                   @   s:   e Zd ZU eed< eed< dZed ed< dZeed< dS )	EvaluationContextlocalsglobals	forbidden)r   minimallimitedunsafe	dangerous
evaluationFin_subscriptN)	r0   r1   r2   r   rb   r   r	   r   ra   r(   r(   r(   r,   r   C  s   
 r   c                   @   s   e Zd ZdZdd ZdS )_IdentitySubscriptz<Returns the key itself when item is requested via subscript.c                 C   s   |S r'   r(   r)   r(   r(   r,   r-   T  s   z_IdentitySubscript.__getitem__N)r0   r1   r2   r`   r-   r(   r(   r(   r,   r   Q  s    r   __SUBSCRIPT_SENTINEL__c                   @   r   )GuardRejectionz7Exception raised when guard rejects evaluation attempt.Nr   r(   r(   r(   r,   r   ^  s    r   codecontextc                 C   s   |j }|jdkrtd|jr3| st S | }t|t< td |  d } td
i i |	 d|i}|jdkr@t
| |j|j S tj| dd}t||S )a7  Evaluate provided code in the evaluation context.

    If evaluation policy given by context is set to ``forbidden``
    no evaluation will be performed; if it is set to ``dangerous``
    standard :func:`eval` will be used; finally, for any other,
    policy :func:`eval_node` will be called on parsed AST.
    r   zForbidden mode[]r   r   eval)modeNr(   )r   r   r   r   tuplecopyIDENTITY_SUBSCRIPTSUBSCRIPT_MARKERr   _asdictr   r   astparse	eval_node)r   r   locals_
expressionr(   r(   r,   guarded_evald  s   


r   )__add__)__sub__)__mul__)__truediv__)__floordiv__)__mod__)__pow__)
__lshift__)
__rshift__)__or__)__xor__)__and__)
__matmul__BINARY_OP_DUNDERS)__eq__)__ne__r   )__lt____gt__)__le____ge__)r   r   )r   r   )__contains__.COMP_OP_DUNDERS)__neg__)__pos__)
__invert____inv__)__not__UNARY_OP_DUNDERSc                   @   r   )ImpersonatingDuckzXA dummy class used to create objects of other classes without calling their ``__init__``Nr   r(   r(   r(   r,   r     r   r   c                       s|   e Zd ZdZddee dee fddZdefdd	Zdefd
dZ	 fddZ
defddZdefddZdd Z  ZS )_DuckzHA dummy class used to create objects pretending to have given attributesN
attributesitemsc                 C   s   |pi | _ |pi | _d S r'   r   r   )r*   r   r   r(   r(   r,   __init__  s   
z_Duck.__init__rV   c                 C   
   | j | S r'   r   r*   rV   r(   r(   r,   r9        
z_Duck.__getattr__c                 C   s
   || j v S r'   r   r   r(   r(   r,   __hasattr__  r   z_Duck.__hasattr__c                    s   g t t| jS r'   )dirsuperr   r   	__class__r(   r,   __dir__  s   z_Duck.__dir__r+   c                 C   r   r'   r   r)   r(   r(   r,   r-     r   z_Duck.__getitem__c                 C   r   r'   r   r)   r(   r(   r,   __hasitem__  r   z_Duck.__hasitem__c                 C   s
   | j  S r'   )r   keysr   r(   r(   r,   _ipython_key_completions_  r   z_Duck._ipython_key_completions_)NN)r0   r1   r2   r`   r   r   r   rd   r9   r   r   r-   r   r   __classcell__r(   r(   r   r,   r     s    r   c                 C   s(   d }|  D ]\}}t| |r|}q|S r'   )r   rm   )node_oprX   r   opcandidate_dunderr(   r(   r,   _find_dunder  s   
r   nodec                    s  t  j }| du rdS t| tjrt| j S t| tjrRt| j }t| j	 }t
| jt}|rR||||rAt||d |S td| dt|d j dt| tjrt| j }d}d}t| j| jD ]\}}t| }d}	t
|t}|st|tjrttj }d}t|tjrd	}	t|tjrd	}	d}|	s|r|d }	|	r|	d
kr||fn||f\}
}|	d	ks|r|||
|rtt|	|
|}|r| }|sd}|}qitd|	 dt|d j dtd|	 d|S t| tjr| jS t| tjr
t fdd| j D S t| tj!r fdd| j D S t| tj"r, fdd| j D S t| tj#rJt$t fdd| j%D  fdd| j&D S t| tj'rct(t| j) t| j* t| j+ S t| tj,rt| j- }t
| jt.}|r|||rt||d  S td| dt|d j dt| tj/rt| j }t| j( }|0||r|| S tdt|d j dt| tj1rt2| j3 S t| tj4rt| j }|5|| j6rt|| j6S tdt|d j dt| tj7rt| j8 }|rt| j S t| j9 S t| tj:rit| j; }|<|r:| j=s: fdd| j>D }|| S t?|rQt@|jA|  }|tBurM|S tC|S t@||  }|tBur^|S td|d j dtdtD| )a  Evaluate AST node in provided context.

    Applies evaluation restrictions defined in the context. Currently does not support evaluation of functions with keyword arguments.

    Does not evaluate actions that always have side effects:

    - class definitions (``class sth: ...``)
    - function definitions (``def sth: ...``)
    - variable assignments (``x = 1``)
    - augmented assignments (``x += 1``)
    - deletions (``del x``)

    Does not evaluate operations which do not return values:

    - assertions (``assert x``)
    - pass (``pass``)
    - imports (``import x``)
    - control flow:

        - conditionals (``if x:``) except for ternary IfExp (``a if x else b``)
        - loops (``for`` and ``while``)
        - exception handling

    The purpose of this function is to guard against unwanted side-effects;
    it does not give guarantees on protection from malicious code execution.
    Nr   zOperation (`z`) forznot allowed in  modeTFis_r   zComparison (`zComparison `z` not supportedc                 3   s    | ]}t | V  qd S r'   r   r   er   r(   r,   	<genexpr>+  s    zeval_node.<locals>.<genexpr>c                       g | ]}t | qS r(   r   r   r  r(   r,   r   -      zeval_node.<locals>.<listcomp>c                    s   h | ]}t | qS r(   r   r   r  r(   r,   r   /  r  zeval_node.<locals>.<setcomp>c                    r  r(   r   r   kr  r(   r,   r   3  r  c                    r  r(   r   )r   vr  r(   r,   r   4  r  z$Subscript access (`__getitem__`) forz not allowed in z$Attribute access (`__getattr__`) forc                    r  r(   r   r   argr  r(   r,   r   g  r  zCall forzUnhandled node)EEVALUATION_POLICIESr   rm   r   
Expressionr   bodyBinOpleftrightr   r   r   r]   r>   r   r?   Comparezipopscomparatorsr   NotInInIsIsNotoperator
ValueErrorConstantrR   r   r   eltsListr   r   r   r   valuesSliceslicelowerupperstepUnaryOpoperandr   	SubscriptrT   Name_eval_node_nameid	AttributerW   rV   IfExptestorelseCallr;   r_   keywordsr5   r   _eval_return_type__new__NOT_EVALUATED_create_duck_for_heap_typedump)r   r   policyr  r  rX   all_truenegater   r   r[   r\   resultrR   slice_r+  r;   r5   overridden_return_typereturn_typer(   r  r,   r     s  













r   c                 C   sJ   zt | }W n ty   t}Y nw |jtju}|r#t|j|| ||S tS )zyEvaluate return type of a given callable function.

    Returns the built-in type, a duck or NOT_EVALUATED sentinel.
    )r   r  UNKNOWN_SIGNATUREreturn_annotationr   empty_resolve_annotationr1  )r;   r   r   sig	not_emptyr(   r(   r,   r/  ~  s   r/  r?  c                    s  t | tr
t|  n| } t| }| tu rtdrjS |tu r0t| }t	|dkr.|d S dS | t
u r6dS | tu rjd}tj D ]\}\}	}
|
jtu rR|} nqC|durf|t	jk rhtj|  S dS dS |tu rqt S |tu r fddt| D }tt|dS t| rtttt  fd	d
| j D dS t| drttt| dS |tu rt| d }t| S t | trt| j S t | t rt| j! S t|  S )zKResolve annotation created by user with `typing` module and custom objects.r<      r    Nc              	      s*   g | ]}t t| D ]}|qqS r(   )r   r>  )r   type_argrV   r   r;   r   r?  r(   r,   r     s    z'_resolve_annotation.<locals>.<listcomp>r   c              	      s"   i | ]\}}|t | qS r(   )r>  )r   r  r  rD  r(   r,   
<dictcomp>  s    z'_resolve_annotation.<locals>.<dictcomp>r   _is_protocol)"rm   rd   r'  r   r   r   r<   r	   r   lenr    r   	enumerate
parametersr   
annotationr5   r   r   ra   r   r   r   fromkeysr   r   rb   r   r>  r   _eval_or_create_duck__supertype__r"   	__value__)rJ  r?  r;   r   r   origin	type_argsindexir+   rR   r   rC  r(   rD  r,   r>    s`   




r>  node_idc                 C   s   t |j }|jr| |jv r|j|  S |jr| |jv r|j|  S |jr,tt| r,t	t| S |js;|js;t
d|j dt|  d)Nz Namespace access not allowed in r   z+ not found in locals, globals, nor builtins)r
  r   rF   r   rG   r   rJ   r   builtinsr>   r   	NameError)rS  r   r4  r(   r(   r,   r'    s   



r'  c                    s>   t  j }|| r|js fdd|jD }| | S t| S )Nc                    r  r(   r   r  r  r(   r,   r     r  z(_eval_or_create_duck.<locals>.<listcomp>)r
  r   r_   r.  r5   r2  )	duck_typer   r   r4  r5   r(   r  r,   rL    s
   
rL  c                 C   s(   t  }z| |_|W S  ty   Y tS w )zCreate an imitation of an object of a given type (a duck).

    Returns the duck or NOT_EVALUATED sentinel if duck could not be created.
    )r   r   	TypeErrorr1  )rV  duckr(   r(   r,   r2    s   r2  >   numpyvoidrZ  ndarraypandascoreindexing_LocIndexerr_  r`  ra  _iLocIndexerr_  Seriesr_  	DataFrameBUILTIN_GETITEMc                    s"    fdd|r|D S t  D S )z=For use on immutable objects or with methods returning a copyc                    s   g | ]}t  |qS r(   r   r  clsr(   r,   r     r  z!_list_methods.<locals>.<listcomp>)r   )rk  sourcer(   rj  r,   _list_methods  s   "rm  )r   r   r  r   )r   rQ  count	dict_keysc                 C   s   g | ]}t |D ]}|qqS r(   )rm  )r   numeric_clsrq   r(   r(   r,   r   1  s    r   BUILTIN_GETATTRTF)rJ   rF   rG   rH   rI   rO   rL   rK   rg  re  )	ry   rz   r{   r|   r}   rJ   rF   rG   rO   )rJ   rF   rG   rI   rH   rL   rK   )r   r   r   )r   r   r   r   rD   r'   )inspectr   r   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rT  collectionsr  rg   	functoolsr   dataclassesr   r   typesr   r   IPython.utils.decoratorsr   version_infotyping_extensionsr   r    r"   r$   r4   r8   r:   r   rD   rE   rd   rj   rs   rw   rx   r   r   r   r   r   r;  objectr1  	Exceptionr   r   AddSubMultDivFloorDivModPowLShiftRShiftBitOrBitXorBitAndMatMultr   rb   EqNotEqLtLtEGtGtEr  r   cmpopUSubUAddInvertNotr   unaryopr   r   r   ASTr   r-  r/  r>  r'  rL  r2  SUPPORTED_EXTERNAL_GETITEMr   byteslistr   defaultdictdequeOrderedDictChainMapUserDictUserList
UserStringri  rm  dict_non_mutating_methodslist_non_mutating_methodsrc   r   	frozensetset_non_mutating_methodsr?   r   ro  abcKeysViewintfloatcomplexNUMERICS
isdisjointrangeCounterelementsmost_commonALLOWED_CALLSrq  BUILTIN_OPERATIONSr
  __all__r(   r(   r(   r,   <module>   s   P

#
|%""	 +
<


	






 !"%	
&