o
    ih^                     @   s\  U 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 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 d dlmZ esMerTd dlmZ ne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Z"eeG dd dZ#de$dee$ fddZ%de$dee$ de$fddZ&dd Z'eeG dd  d e#Z(G d!d" d"eZ)G d#d$ d$eZ*G d%d& d&Z+e+ Z,d'Z-G d(d) d)e.Z/d*e$d+e*fd,d-Z0ej1d.ej2d/ej3d0ej4d1ej5d2ej6d3ej7d4ej8d5ej9d6ej:d7ej;d8ej<d9ej=d:iZ>eeej ee$ f e?d;< ej@d<ejAd=ejBd>ejCd?ejDd@ejEdAejFdBiZGeeejH ee$dCf f e?dD< ejIdEejJdFejKdGejLdHiZMeeejN ee$dCf f e?dI< de
ee$dCf df fdJdKZOdLe
ejPdf d+e*fdMdNZQh dOZReSe$eTeUeVejWejXejYejZej[ej\ej]e)e+hZ^ee e?dP< dcdQdRZ_dSZ`dTZaebecebebeced@ Zeefi g Zheejijj e?dU< efeUjkZlee?dV< efeZmeneoephZqh eTe_eTeSe_eSe`ehjreUe_eUeaebe_ebeeede_edese$e_e$eVe_eVeqdWdX eqD ejXe_ejXeaejWe_ejWe`ejYe_ejYe`ej[e_ej[e`ej\e_ej\eaej]e_ej]ece$ejte_ejte`ejtjuejtjvZwh e^ebedeefeqehelemZxee! e?dY< h exZye#dZd[d[d[d[eb d[d[d\e(e^eRexd]d^heydZdZdZewd_	e#dZdZdZdZdZdZdZd`daZzg dbZ{dS )d    )AnyCallableDictSetSequenceTuple
NamedTupleTypeLiteralUnionTYPE_CHECKINGN)cached_property)	dataclassfield)GENERATING_DOCUMENTATION)undoc)Protocolc                   @      e Zd ZdddZdS )
HasGetItemreturnNc                 C      d S N selfkeyr   r   T/var/www/edux/Edux_v2/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__)   r   zInstancesHaveGetItem.__call__N)r    r!   r"   r   r'   r   r   r   r   r$   '   s    r$   c                   @   r   )
HasGetAttrr   Nc                 C   r   r   r   r   r   r   r   __getattr__/   r   zHasGetAttr.__getattr__r   )r    r!   r"   r)   r   r   r   r   r(   -   r#   r(   c                   @   s   e Zd ZdS )DoesNotHaveGetAttrN)r    r!   r"   r   r   r   r   r*   3   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__Nr    __dict__)getattrtype)r+   ownerowner_classnameinstance_dict_overridesr   r   r   _unbind_method<   s   
r4   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   )r8   r   valueitemr   r   r   can_get_item_      zEvaluationPolicy.can_get_itemc                 C   r@   r   )r9   )r   rB   attrr   r   r   can_get_attrb   rE   zEvaluationPolicy.can_get_attrNdunders.c                 C   s   | j rdS d S NT)r;   r   rH   abr   r   r   can_operatee   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 rI   )r<   r?   r4   )r   r+   owner_methodr   r   r   can_calli   s   
zEvaluationPolicy.can_callr   )r    r!   r"   __doc__r6   bool__annotations__r7   r8   r9   r:   r;   r<   r   setr?   r   r   rD   rG   r   strrM   rO   r   r   r   r   r5   Q   s   
 r5   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 acess path does not match an exported object
    )sysmodulesr.   )rU   rV   member_typerF   r   r   r   _get_externalv   s   
rZ   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__)rW   rX   rZ   r/   
isinstancer.   AttributeErrorKeyError)rB   rU   rV   r[   rY   
value_typemethodmember_methodr   r   r   _has_original_dunder_external   s&   


rc   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.   rc   )	rB   allowed_typesallowed_methodsallowed_externalr[   r`   ra   rU   rV   r   r   r   _has_original_dunder   s   rg   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 )!SelectivePolicyr=   allowed_getitem.allowed_getitem_externalallowed_getattrallowed_getattr_externalallowed_operationsallowed_operations_externalF)r>   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 )Nr\   rd   re   rf   r[   r)   FT)rg   rk   _getattribute_methodsrl   _getattr_methodsr/   hasattrr.   r]   propertyrZ   r_   r^   )r   rB   rF   has_original_attributehas_original_attracceptvalue_classclass_attr_valis_propertyrU   rV   external_classexternal_class_attr_valr   r   r   rG      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   rq   )rg   ri   _getitem_methodsrj   rA   r   r   r   rD      s   zSelectivePolicy.can_get_itemNrH   c                    s0   |g |d ur  | t fdd|D S )Nc              
      s2   g | ]} D ]}t |j|j|d qqS )rq   )rg   rm   _operator_dunder_methodsrn   ).0dunderobjobjectsr   r   r   
<listcomp>  s    	z/SelectivePolicy.can_operate.<locals>.<listcomp>)appendallrJ   r   r   r   rM     s   
zSelectivePolicy.can_operater   r   c                 C   s(   || j vr| | j|| j |< | j | S r   )rp   _safe_get_methodsrm   )r   r   r   r   r   r     s
   


z(SelectivePolicy._operator_dunder_methodsc                 C      |  | jdS )Nr   )r   ri   r   r   r   r   r~   !     z SelectivePolicy._getitem_methodsc                 C   r   )Nr)   r   rk   r   r   r   r   rs   %  r   z SelectivePolicy._getattr_methodsc                 C   r   )Nr\   r   r   r   r   r   rr   )  r   z%SelectivePolicy._getattribute_methodsc                    s    fdd|D S )Nc                    s    h | ]}t | d }|r|qS r   r.   )r   class_ra   r2   r   r   	<setcomp>.  s    z4SelectivePolicy._safe_get_methods.<locals>.<setcomp>r   )r   classesr2   r   r   r   r   -  s   
z!SelectivePolicy._safe_get_methodsr   )r    r!   r"   r   rS   ri   r   r$   rR   rj   r   rT   rk   MayHaveGetattrrl   rm   rn   dictrp   r   r   rG   rD   rM   r   r   r~   rs   rr   r   r   r   r   r   rh      s*   
 6
rh   c                   @      e Zd ZdZdS )_DummyNamedTuplez<Used internally to retrieve methods of named tuple instance.Nr    r!   r"   rP   r   r   r   r   r   6  s    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)	r    r!   r"   r   rR   r   r
   r   rQ   r   r   r   r   r   :  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   K  r   z_IdentitySubscript.__getitem__N)r    r!   r"   rP   r   r   r   r   r   r   H  s    r   __SUBSCRIPT_SENTINEL__c                   @   r   )GuardRejectionz7Exception raised when guard rejects evaluation attempt.Nr   r   r   r   r   r   S  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_evalY  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                 C   s(   d }|  D ]\}}t| |r|}q|S r   )itemsr]   )node_oprH   r   opcandidate_dunderr   r   r   _find_dunder  s   
r   nodec                    sf  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| 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#r9 fdd| j!D S t| tj$rWt%t fdd| j&D  fdd| j'D S t| tj(rpt)t| j* t| j+ t| j, S t| tj-rt  fdd| j.D S t| tj/rt| j0 }t
| jt1}|r|||rt||d  S td| dt|d j dt| tj2rt| j }t| j) }|3||r|| S tdt|d j dt| tj4r7|j5r| j6 j7v r j7| j6 S |j8r| j6 j9v r j9| j6 S |j:rt;t<| j6rtt<| j6S |j8s/|j5s/td j dt=| j6 dt| tj>r_t| j }|?|| j@rRt|| j@S tdt|d j dt| tjAr{t| jB }|rut| j S t| jC S t| tjDrt| jE }|F|r| jGs fdd| jHD }|| S td|d j dtdtI| )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 z 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     r   c                    r   r   r   )r   vr   r   r   r     r   c                    r   r   r   )r   dimr   r   r   r     r   z$Subscript access (`__getitem__`) forz not allowed in z Namespace access not allowed in z+ not found in locals, globals, nor builtinsz$Attribute access (`__getattr__`) forc                    r   r   r   )r   argr   r   r   r   N  r   zCall forzUnhandled node)JEVALUATION_POLICIESr   r]   r   
Expressionr   bodyBinOpleftrightr   r   r   rM   r.   r   r/   Comparezipopscomparatorsr   NotInInIsIsNotoperator
ValueErrorConstantrB   Indexr   r   eltsListr   r   r   keysvaluesSliceslicelowerupperstepExtSlicedimsUnaryOpoperandr   	SubscriptrD   Namer6   idr   r7   r   r:   rt   builtins	NameError	AttributerG   rF   IfExptestorelseCallr+   rO   keywordsr%   dump)r   r   policyr   r   rH   all_truenegater   r   rK   rL   resultrB   slice_r
  r+   r%   r   r   r   r     s  










r   >   numpyvoidr  ndarraypandascoreindexing_LocIndexerr  r  r  _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   v  r   z!_list_methods.<locals>.<listcomp>)dir)r&  sourcer   r%  r   _list_methodst  s   "r)  )r   r   r   r   )r   indexcount	dict_keysmethod_descriptorc                 C   s   g | ]}t |D ]}|qqS r   )r)  )r   numeric_clsra   r   r   r   r     s    r   BUILTIN_GETATTRTF)r:   r6   r7   r8   r9   r?   r<   r;   r"  r   )	ri   rj   rk   rl   rm   r:   r6   r7   r?   )r:   r6   r7   r9   r8   r<   r;   )r   r   r   )r   r   r   r   r4   r   )|typingr   r   r   r   r   r   r   r	   r
   r   r   r   r  collectionsr   rW   	functoolsr   dataclassesr   r   IPython.utils.docsr   IPython.utils.decoratorsr   typing_extensionsr   objectr   r$   r(   r*   r   r4   r5   rT   rZ   rc   rg   rh   r   r   r   r   r   	Exceptionr   r   AddSubMultDivFloorDivModPowLShiftRShiftBitOrBitXorBitAndMatMultr   rR   EqNotEqLtLtEGtGtEr   r   cmpopUSubUAddInvertNotr   unaryopr   ASTr   SUPPORTED_EXTERNAL_GETITEMr   byteslistr   defaultdictdequeOrderedDictChainMapUserDictUserList
UserStringr$  r)  dict_non_mutating_methodslist_non_mutating_methodsrS   r'  	frozensetset_non_mutating_methodsr/   r   r,  abcKeysViewr   r-  moduleintfloatcomplexNUMERICS
isdisjointrangeCounterelementsmost_commonALLOWED_CALLSr/  BUILTIN_OPERATIONSr   __all__r   r   r   r   <module>   s  6 #
|%""	 0

	






 !"%	
&