o
    û›hR  ã                    @   sN  d dl Z d dl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 d dlmZmZmZmZ d dlmZ d dlZe jdk rLd dlmZmZ nd dlmZmZ e jd	k r`d d
lmZ nd d
lmZ defdd„ZeedƒZ eedƒZ!eedƒZ"eedƒZ#eedƒZ$e"e#e$gZ%e!ge%¢Z&edefdd„ƒZ'dd„ Z(e )d¡dd„ ƒZ*e )d¡dd„ ƒZ+dd„ Z,e )d¡dd „ ƒZ-e )d¡d!d"„ ƒZ.e )d¡d#d$„ ƒZ/e )d¡d%d&„ ƒZ0d'd(„ Z1d)d*„ Z2d+d,„ Z3d-d.„ Z4d/d0„ Z5d1d2„ Z6d3d4„ Z7d5d6„ Z8d7d8„ Z9ej: ;d9d:e<j=gd;e>j?gd<e@jAgg¡d=d>„ ƒZBd?d@„ ZCG dAdB„ dBƒZDG dCdD„ dDƒZEG dEdF„ dFƒZFG dGdH„ dHƒZGG dIdJ„ dJƒZHG dKdL„ dLƒZIedMe<ƒZJedNeDƒZKedOe<ƒZLedPeDƒZMG dQdR„ dRe
ƒZNG dSdT„ dTeNƒZOG dUdV„ dVeƒZPG dWdX„ dXƒZQej: ;dYg dZ¢d[d\d]gd^d\id_d]d]geIƒ d`eDdageIƒ dbeIdageEƒ dceDdageFƒ dceRdageDdceDdageHdceRdageDƒ ddeDdageQƒ dee<dageQƒ dfeDdageQƒ dge<dageQƒ dheDdageQƒ dieQdageQƒ djdad]geQƒ dkedageQƒ dledageQƒ dmeSdageQƒ dne>dageQƒ doeQdageQƒ dpe<dageGdqeDdagg¡drds„ ƒZTej: ;dteQƒ dudvggeQƒ dwdxdyggeQƒ dzd{ggeQƒ d|g d}¢gg¡d~d„ ƒZUej: ;d€eQƒ d|e<ed�œgg¡d‚dƒ„ ƒZVej: ;d„g dZ¢d…gd^d\id†gg¡d‡dˆ„ ƒZWej: ;d9d‰dŠgd‹dŒggd�g dŽ¢gg¡ej: ;d�e%¡d�d‘„ ƒƒZXej: ;d9d’d\gd“d”gd•d–gd—d]gd˜dgd™i gdšg gg¡ej: ;d�e&¡d›dœ„ ƒƒZYej: ;d9d�džgdŸd gd¡d¢gg¡ej: ;d�e%¡d£d¤„ ƒƒZZej: ;d9d¥dŠgd¦dŠgd§d¨gd©dŠgdªd«gd¬d­gd®d\gd¯d°gd±d²gd³d\gd´d gg¡ej: ;d�e%¡dµd¶„ ƒƒZ[ej: ;d9d·d]gd¸dagd¹dagdºd]gd»dagd¼d]gd½d]gd¾dagd¿d]gdÀdagdÁdagdÂd]gdÃd]gdÄdagdÅd]gdÆdagdÇd]gdÈd]gdÉdagdÊd]gdËdagdÌdagdÍd]gdÎd]gdÏd]gdÐdagdÑdagdÒd]gg¡ej: ;d�e%¡dÓdÔ„ ƒƒZ\dÕdÖ„ Z]d×dØ„ Z^dÙdÚ„ Z_dÛdÜ„ Z`ej: ;d�e&¡dÝdÞ„ ƒZadßdà„ Zbdádâ„ Zcdãdä„ Zddådæ„ Zeej: ;dçg dè¢¡ej: ;d�e!ƒ e"ƒ e#ƒ g¡dédê„ ƒƒZfdëdì„ Zgdídî„ Zhdïdð„ Zidñdò„ Zje )dó¡dôdõ„ ƒZkdS )öé    N)Úcontextmanager)
Ú	AnnotatedÚAnyStrÚ
NamedTupleÚLiteralÚNewTypeÚOptionalÚProtocolÚ	TypeGuardÚUnionÚ	TypedDict)Úpartial)ÚEvaluationContextÚGuardRejectionÚguarded_evalÚ_unbind_method)Ú
decorators)é   é   )ÚSelfÚLiteralString)r   é   )ÚTypeAliasTypeÚ
evaluationc                 K   s   t |i | d�S )N©ÚlocalsÚglobalsr   )r   )r   Úkwargs© r   úZc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/tests/test_guarded_eval.pyÚcreate_context%   s   r    Ú	forbiddenÚminimalÚlimitedÚunsafeÚ	dangerousÚmodulec              	   c   s\   � dd l }z|j|  }|j| = W n ty   d }Y nw zd V  W ||j| < d S ||j| < w )Nr   )ÚsysÚmodulesÚKeyError)r&   r'   Z
to_restorer   r   r   Úmodule_not_installed3   s   €
ÿr*   c               	   C   sŒ   G dd„ dƒ} t dƒ�1 t| ƒ d�}t t¡� td|ƒ W d  ƒ n1 s'w   Y  W d  ƒ dS W d  ƒ dS 1 s?w   Y  dS )z“
    Because attribute check requires checking if object is not of allowed
    external type, this tests logic for absence of external module.
    c                   @   ó   e Zd Zdd„ Zdd„ ZdS )z+test_external_not_installed.<locals>.Customc                 S   s
   d| _ d S ©Né   )Útest©Úselfr   r   r   Ú__init__I   ó   
z4test_external_not_installed.<locals>.Custom.__init__c                 S   ó   |S ©Nr   ©r0   Úkeyr   r   r   Ú__getattr__L   ó   z7test_external_not_installed.<locals>.Custom.__getattr__N)Ú__name__Ú
__module__Ú__qualname__r1   r7   r   r   r   r   ÚCustomH   ó    r<   Úpandas)Úxzx.testN)r*   r#   ÚpytestÚraisesr   r   )r<   Úcontextr   r   r   Útest_external_not_installedB   s   
ÿþ"þrC   r>   c              	   C   s¢   ddl }|jdgdgd�}|  ¡ �6}| |d¡ t|d�}t t¡� td|ƒ W d  ƒ n1 s2w   Y  W d  ƒ dS W d  ƒ dS 1 sJw   Y  dS )	z>Check that the execution rejects if external API changed pathsr   Nr-   Úa©ÚindexÚSeries©Údataúdata.iloc[0])	r>   rG   rB   Údelattrr#   r@   rA   r   r   )ZmonkeypatchÚpdÚseriesÚmrB   r   r   r   Útest_external_changed_apiU   s   

ÿý"ýrO   c                  C   s:   dd l } | jdgdgd�}t|d�}td|ƒdksJ ‚d S )Nr   r-   rD   rE   rH   rJ   ©r>   rG   r#   r   )rL   rM   rB   r   r   r   Útest_pandas_series_ilocc   s   
rQ   c                  C   sX   G dd„ dƒ} | ƒ }t |d�}t t¡� td|ƒ W d   ƒ d S 1 s%w   Y  d S )Nc                   @   s   e Zd Zedd„ ƒZdS )z3test_rejects_custom_properties.<locals>.BadPropertyc                 S   s   d gS r4   r   r/   r   r   r   Úilocn   ó   z8test_rejects_custom_properties.<locals>.BadProperty.ilocN)r9   r:   r;   ÚpropertyrR   r   r   r   r   ÚBadPropertym   s    rU   rH   rJ   ©r#   r@   rA   r   r   )rU   rM   rB   r   r   r   Útest_rejects_custom_propertiesl   s   
"ÿrW   c                  C   sJ   dd l } G dd„ d| jƒ}|dgdgd�}t|d�}td|ƒdks#J ‚d S )	Nr   c                   @   ó   e Zd ZdS )z;test_accepts_non_overriden_properties.<locals>.GoodPropertyN©r9   r:   r;   r   r   r   r   ÚGoodProperty}   ó    rZ   r-   rD   rE   rH   rJ   rP   )rL   rZ   rM   rB   r   r   r   Ú%test_accepts_non_overriden_propertiesy   s
   
r\   c                  C   sl   dd l } t| jdgdgd�d�}td|ƒdksJ ‚t t¡� td|ƒ W d   ƒ d S 1 s/w   Y  d S )Nr   r-   rD   rE   rH   ú	data["a"]ú	data["c"])r>   r#   rG   r   r@   rA   r)   )rL   rB   r   r   r   Útest_pandas_series†   s   "ÿr_   c                  C   sB  dd l } G dd„ d| jƒ}G dd„ d| jƒ}|dgdgd�}t|d	�}t t¡� td
|ƒ W d   ƒ n1 s8w   Y  t t¡� td|ƒ W d   ƒ n1 sRw   Y  td|ƒdks`J ‚t|d	�}td
|ƒdksnJ ‚|dgdgd�}t|d	�}td
|ƒdks„J ‚t t¡� td|ƒ W d   ƒ d S 1 sšw   Y  d S )Nr   c                   @   ó   e Zd Zdd„ ZdS )z-test_pandas_bad_series.<locals>.BadItemSeriesc                 S   ó   dS )NÚCUSTOM_ITEMr   r5   r   r   r   Ú__getitem__•   r8   z9test_pandas_bad_series.<locals>.BadItemSeries.__getitem__N)r9   r:   r;   rc   r   r   r   r   ÚBadItemSeries”   ó    rd   c                   @   r`   )z-test_pandas_bad_series.<locals>.BadAttrSeriesc                 S   ra   )NZCUSTOM_ATTRr   r5   r   r   r   r7   ™   r8   z9test_pandas_bad_series.<locals>.BadAttrSeries.__getattr__N©r9   r:   r;   r7   r   r   r   r   ÚBadAttrSeries˜   re   rg   r-   rD   rE   rH   r]   r^   zdata.arb   )r>   rG   r#   r@   rA   r   r   r$   )rL   rd   rg   Z
bad_seriesrB   Zbad_attr_seriesr   r   r   Útest_pandas_bad_series�   s(   
ÿÿ

"ÿrh   c                  C   sF   dd l } ddlm} |  ddig¡}t|d�}|td|ƒ|d ƒ d S )Nr   )Úassert_series_equalrD   r-   rH   zdata.loc[:, "a"])r>   Zpandas.testingri   Z	DataFramer#   r   )rL   ri   rI   rB   r   r   r   Útest_pandas_dataframe_loc³   s
   
rj   c                  C   s”   G dd„ dt ƒ} G dd„ dt ƒ}| dd�}|dd�}t|d�}td|ƒdks(J ‚t|d�}t t¡� td|ƒ W d   ƒ d S 1 sCw   Y  d S )	Nc                   @   s   e Zd ZU eed< dS )z(test_named_tuple.<locals>.GoodNamedTuplerD   N)r9   r:   r;   ÚstrÚ__annotations__r   r   r   r   ÚGoodNamedTuple¾   s   
 rm   c                   @   s   e Zd ZU eed< dd„ ZdS )z'test_named_tuple.<locals>.BadNamedTuplerD   c                 S   ó   d S r4   r   r5   r   r   r   rc   Å   r8   z3test_named_tuple.<locals>.BadNamedTuple.__getitem__N)r9   r:   r;   rk   rl   rc   r   r   r   r   ÚBadNamedTupleÂ   s   
 ro   r?   )rD   rH   zdata[0])r   r#   r   r@   rA   r   )rm   ro   ÚgoodÚbadrB   r   r   r   Útest_named_tuple½   s   



"ÿrr   c                  C   st   t dddiddœd�} td| ƒdksJ ‚td| ƒddiksJ ‚td	| ƒdks(J ‚td
| ƒdks1J ‚td| ƒs8J ‚d S )Nr-   r?   é   r   )rD   Úb)r?   ÚyrH   r]   z	data["b"]zdata["b"]["x"]zdata["x", "y"]z	data.keys©r#   r   ©rB   r   r   r   Ú	test_dictÓ   s   rx   c                  C   s    t ddhd�} td| ƒsJ ‚d S )NrD   rt   rH   zdata.differencerv   rw   r   r   r   Útest_setÝ   s   ry   c                  C   s2   t g d¢d�} td| ƒdksJ ‚td| ƒsJ ‚d S )N©r-   rs   r   rH   zdata[1]rs   z	data.copyrv   rw   r   r   r   Ú	test_listâ   s   r{   c                  C   s2   t ƒ } td| ƒi ksJ ‚td| ƒddiksJ ‚d S )Nú{}z{"a": 1}rD   r-   rv   rw   r   r   r   Útest_dict_literalè   ó   r}   c                  C   s2   t ƒ } td| ƒg ksJ ‚td| ƒddgksJ ‚d S )Nú[]z[1, "a"]r-   rD   rv   rw   r   r   r   Útest_list_literalî   r~   r€   c                  C   s2   t ƒ } td| ƒtƒ ksJ ‚td| ƒdhksJ ‚d S )Nzset()z{"a"}rD   )r#   r   Úsetrw   r   r   r   Útest_set_literalô   s   r‚   c                  C   s.   t ƒ } td| ƒdksJ ‚td| ƒdksJ ‚d S )Nz2 if True else 3rs   z4 if False else 5é   rv   rw   r   r   r   Útest_evaluates_if_expressionú   s   r„   c                  C   s(   t ƒ } t| d�}td|ƒ| jksJ ‚d S )N)Úobjzobj.__dir__)Úobjectr#   r   Ú__dir__)r…   rB   r   r   r   Útest_object   s   
rˆ   zcode,expectedzint.numeratorzfloat.is_integerzcomplex.realc                 C   s   t | tƒ ƒ|ks
J ‚d S r4   )r   r#   )ÚcodeÚexpectedr   r   r   Útest_number_attributes  s   	r‹   c                  C   s   t ƒ } td| ƒdksJ ‚d S )Nzlist.copy.__name__Úcopyrv   rw   r   r   r   Útest_method_descriptor  s   r�   c                   @   rX   )ÚHeapTypeNrY   r   r   r   r   rŽ     r[   rŽ   c                   @   ó   e Zd Zdefdd„ZdS )ÚCallCreatesHeapTypeÚreturnc                 C   ó   t ƒ S r4   ©rŽ   r/   r   r   r   Ú__call__  ó   zCallCreatesHeapType.__call__N)r9   r:   r;   rŽ   r”   r   r   r   r   r�     ó    r�   c                   @   r�   )ÚCallCreatesBuiltinr‘   c                 C   r’   r4   ©Ú	frozensetr/   r   r   r   r”   !  r•   zCallCreatesBuiltin.__call__N)r9   r:   r;   r™   r”   r   r   r   r   r—      r–   r—   c                   @   s   e Zd Zedefdd„ƒZdS )ÚHasStaticMethodr‘   c                   C   r’   r4   r“   r   r   r   r   Ústatic_method&  rS   zHasStaticMethod.static_methodN)r9   r:   r;   ÚstaticmethodrŽ   r›   r   r   r   r   rš   %  s    rš   c                   @   r�   )ÚInitReturnsFrozensetr‘   c                 C   r’   r4   r˜   r/   r   r   r   Ú__new__,  r•   zInitReturnsFrozenset.__new__N)r9   r:   r;   r™   rž   r   r   r   r   r�   +  r–   r�   c                   @   s    e Zd Zddd„Zd	dd„ZdS )
ÚStringAnnotationr‘   rŽ   c                 C   r’   r4   r“   r/   r   r   r   Úheap1  r•   zStringAnnotation.heapc                 C   r’   r4   )rŸ   r/   r   r   r   rŒ   4  r•   zStringAnnotation.copyN)r‘   rŽ   )r‘   rŸ   )r9   r:   r;   r    rŒ   r   r   r   r   rŸ   0  s    
rŸ   ÚCustomIntTypeÚCustomHeapTypeÚIntTypeAliasÚHeapTypeAliasc                   @   r�   )ÚTestProtocolr‘   c                 C   rn   r4   r   r/   r   r   r   Útest_method?  r8   zTestProtocol.test_methodN©r9   r:   r;   Úboolr¦   r   r   r   r   r¥   >  r–   r¥   c                   @   r�   )ÚTestProtocolImplementerr‘   c                 C   ra   )NTr   r/   r   r   r   r¦   D  r8   z#TestProtocolImplementer.test_methodNr§   r   r   r   r   r©   C  r–   r©   c                   @   s   e Zd ZU eed< eed< dS )ÚMovieÚnameÚyearN)r9   r:   r;   rk   rl   Úintr   r   r   r   rª   H  s   
 rª   c                   @   s  e Zd Zdefdd„Zdefdd„Zdefdd„Zde	fdd	„Z
ded
 fdd„Zdefdd„Zdefdd„Zdedefdd„Zdeedf fdd„Zdeedf fdd„Zdee fdd„Zdee fdd„Zdeeef fdd„Zdefd d!„Z de!fd"d#„Z"d$S )%ÚSpecialTypingr‘   c                 C   s   t dƒS r,   )r¡   r/   r   r   r   Úcustom_int_typeN  s   zSpecialTyping.custom_int_typec                 C   s
   t tƒ ƒS r4   )r¢   rŽ   r/   r   r   r   Úcustom_heap_typeQ  r2   zSpecialTyping.custom_heap_typec                 C   ra   r,   r   r/   r   r   r   Úint_type_aliasW  r8   zSpecialTyping.int_type_aliasc                 C   ra   r,   r   r/   r   r   r   Úheap_type_aliasZ  r8   zSpecialTyping.heap_type_aliasFc                 C   ra   )NFr   r/   r   r   r   Úliteral]  r8   zSpecialTyping.literalc                 C   ra   ©Nr.   r   r/   r   r   r   Úliteral_string`  r8   zSpecialTyping.literal_stringc                 C   s   | S r4   r   r/   r   r   r   r0   c  r8   zSpecialTyping.selfr?   c                 C   r3   r4   r   ©r0   r?   r   r   r   Úany_strf  r8   zSpecialTyping.any_strzpositive numberc                 C   ra   r,   r   r/   r   r   r   Ú	annotatedi  r8   zSpecialTyping.annotatedzself with metadatac                 C   s
   d| _ | S r´   )Ú	_metadatar/   r   r   r   Úannotated_selfl  s   zSpecialTyping.annotated_selfc                 C   s
   t |tƒS r4   )Ú
isinstancer­   r¶   r   r   r   Úint_type_guardp  r2   zSpecialTyping.int_type_guardc                 C   ra   )Nç      ð?r   r/   r   r   r   Úoptional_floats  r8   zSpecialTyping.optional_floatc                 C   ra   )NÚ r   r/   r   r   r   Úunion_str_and_intv  r8   zSpecialTyping.union_str_and_intc                 C   r’   r4   )r©   r/   r   r   r   Úprotocoly  r•   zSpecialTyping.protocolc                 C   s
   dddœS )Nz
The MatrixiÏ  )r«   r¬   r   r/   r   r   r   Ú
typed_dict|  r2   zSpecialTyping.typed_dictN)#r9   r:   r;   r¡   r¯   r¢   r°   r£   r±   r¤   r²   r   r³   r   rµ   r   r0   r   r·   r   Úfloatr¸   rº   r
   r­   r¼   r   r¾   r   rk   rÀ   r¥   rÁ   rª   rÂ   r   r   r   r   r®   M  s     r®   zdata,code,expected,equalityrz   zdata.index(2)r-   TrD   zdata.keys().isdisjoint({})zdata.heap()Fzdata.copy()zdata()zdata.__class__()zdata.custom_int_type()zdata.custom_heap_type()zdata.int_type_alias()zdata.heap_type_alias()zdata.self()zdata.literal()zdata.literal_string()zdata.any_str('a')zdata.any_str(b'a')zdata.annotated()zdata.annotated_self()zdata.int_type_guard()zdata.static_method()c                 C   s>   t | ttd�}t||ƒ}|r||ksJ ‚d S t||ƒsJ ‚d S ©N)rI   rŽ   rŸ   )r#   rŽ   rŸ   r   r»   )rI   r‰   rŠ   ZequalityrB   Úvaluer   r   r   Útest_evaluates_calls€  s
    
rÆ   zdata,code,expected_attributeszdata.optional_float()Ú
is_integerzdata.union_str_and_int()Ú
capitalizeÚas_integer_ratiozdata.protocol()r¦   zdata.typed_dict())ÚkeysÚvaluesÚitemsc                 C   sD   t | ttd�}t||ƒ}|D ]}t||ƒsJ ‚|t|ƒv sJ ‚qd S rÄ   )r#   rŽ   rŸ   r   ÚhasattrÚdir)rI   r‰   Zexpected_attributesrB   ÚresultÚattrr   r   r   Ú%test_mocks_attributes_of_call_results¨  s   
þrÑ   zdata,code,expected_items)r¬   r«   c                 C   sT   t | ttd�}t||ƒ}| ¡ }| ¡ D ]\}}t|| |ƒs!J ‚||v s'J ‚qd S rÄ   )r#   rŽ   rŸ   r   Z_ipython_key_completions_rÌ   r»   )rI   r‰   Zexpected_itemsrB   rÏ   Zipython_keysr6   rÅ   r   r   r   Ú test_mocks_items_of_call_results½  s   
þrÒ   zdata,badzdata.append(4)zdata.update()c                 C   sD   t | d�}t t¡� t||ƒ W d   ƒ d S 1 sw   Y  d S )NrH   rV   )rI   rq   rB   r   r   r   Ú$test_rejects_calls_with_side_effectsÌ  s   
"ÿrÓ   z(1
+
1)rs   zlist(range(10))[-1:]é	   zlist(range(20))[3:-2:3])r   é   rÔ   r   é   rB   c                 C   ó   t | |ƒ ƒ|ks
J ‚d S r4   ©r   ©r‰   rŠ   rB   r   r   r   Útest_evaluates_complex_casesÚ  ó   
rÚ   Ú1z1.0r½   Z
0xdeedbeefl   ï>Û= ÚTrueÚNoner|   r   c                 C   r×   r4   rØ   rÙ   r   r   r   Útest_evaluates_literalsç  s   rß   z-5éûÿÿÿz+5rƒ   z~5iúÿÿÿc                 C   r×   r4   rØ   rÙ   r   r   r   Útest_evaluates_unary_operationsø  rÛ   rá   z1 + 1z3 - 1z2 * 3rÕ   z5 // 2z5 / 2g      @z5**2é   z2 >> 1z2 << 1é   z1 | 2r   z1 & 1z1 & 2c                 C   r×   r4   rØ   rÙ   r   r   r   Ú test_evaluates_binary_operations  s   rä   z2 > 1z2 < 1z2 <= 1z2 <= 2z1 >= 2z2 >= 2z2 == 2z1 == 2z1 != 2z1 != 1z	1 < 4 < 3z(1 < 4) < 3z4 > 3 > 2 > 1z4 > 3 > 2 > 9z1 < 2 < 3 < 4z9 < 2 < 3 < 4z1 < 2 > 1 > 0 > -1 < 1z1 in [1] in [[1]]z1 in [1] in [[2]]z1 in [1]z0 in [1]z1 not in [1]z0 not in [1]zTrue is TruezFalse is FalsezTrue is FalsezTrue is not TruezFalse is not Truec                 C   r×   r4   rØ   rÙ   r   r   r   Útest_evaluates_comparisons  s   #rå   c                  C   sP  G dd„ dt ƒ} G dd„ dt ƒ}t|dƒ| dƒd�}t t¡� td|ƒ W d   ƒ n1 s/w   Y  t t¡� td|ƒ W d   ƒ n1 sIw   Y  t t¡� td	|ƒ W d   ƒ n1 scw   Y  t t¡� td
|ƒ W d   ƒ n1 s}w   Y  td|ƒdu s‹J ‚td|ƒdu s”J ‚td|ƒdu s�J ‚td|ƒdu s¦J ‚d S )Nc                   @   rX   )z'test_guards_comparisons.<locals>.GoodEqNrY   r   r   r   r   ÚGoodEqA  r[   ræ   c                   @   r`   )z&test_guards_comparisons.<locals>.BadEqc                 S   ó   J ‚r4   r   ©r0   Úotherr   r   r   Ú__eq__E  r8   z-test_guards_comparisons.<locals>.BadEq.__eq__N)r9   r:   r;   rê   r   r   r   r   ÚBadEqD  re   rë   r-   )rq   rp   zbad == 1zbad != 1z1 == badz1 != badz	good == 1Tz	good != 1Fz	1 == goodz	1 != good©r­   r#   r@   rA   r   r   )ræ   rë   rB   r   r   r   Útest_guards_comparisons@  s&   ÿÿÿÿrí   c                  C   s¸   G dd„ dt ƒ} G dd„ dt ƒ}G dd„ dt ƒ}t| dƒ|dƒ|dƒd�}t t¡� td	|ƒ W d   ƒ n1 s:w   Y  t t¡� td
|ƒ W d   ƒ d S 1 sUw   Y  d S )Nc                   @   rX   )z,test_guards_unary_operations.<locals>.GoodOpNrY   r   r   r   r   ÚGoodOp]  r[   rî   c                   @   r`   )z.test_guards_unary_operations.<locals>.BadOpInvc                 S   rç   r4   r   rè   r   r   r   Ú__inv__a  r8   z6test_guards_unary_operations.<locals>.BadOpInv.__inv__N©r9   r:   r;   rï   r   r   r   r   ÚBadOpInv`  re   rñ   c                   @   r`   )z2test_guards_unary_operations.<locals>.BadOpInversec                 S   rç   r4   r   rè   r   r   r   rï   e  r8   z:test_guards_unary_operations.<locals>.BadOpInverse.__inv__Nrð   r   r   r   r   ÚBadOpInversed  re   rò   r-   ©rp   Zbad1Zbad2z~bad1z~bad2rì   )rî   rñ   rò   rB   r   r   r   Útest_guards_unary_operations\  s   ÿ"ÿrô   c                  C   sÄ   G dd„ dt ƒ} G dd„ dt ƒ}t| dƒ|dƒd�}t t¡� td|ƒ W d   ƒ n1 s/w   Y  t t¡� td|ƒ W d   ƒ n1 sIw   Y  td	|ƒd
ksWJ ‚td|ƒd
ks`J ‚d S )Nc                   @   rX   )z-test_guards_binary_operations.<locals>.GoodOpNrY   r   r   r   r   rî   r  r[   rî   c                   @   r`   )z,test_guards_binary_operations.<locals>.BadOpc                 S   rç   r4   r   rè   r   r   r   Ú__add__v  r8   z4test_guards_binary_operations.<locals>.BadOp.__add__N)r9   r:   r;   rõ   r   r   r   r   ÚBadOpu  re   rö   r-   )rp   rq   z1 + badzbad + 1zgood + 1rs   z1 + goodrì   )rî   rö   rB   r   r   r   Útest_guards_binary_operationsq  s   ÿÿr÷   c                  C   sÈ   G dd„ dt ƒ} G dd„ dt ƒ}G dd„ dt ƒ}t| dƒ|dƒ|dƒd�}t t¡� td	|ƒ W d   ƒ n1 s:w   Y  t t¡� td
|ƒ W d   ƒ n1 sTw   Y  td|ƒdksbJ ‚d S )Nc                   @   rX   )z(test_guards_attributes.<locals>.GoodAttrNrY   r   r   r   r   ÚGoodAttr†  r[   rø   c                   @   r`   )z(test_guards_attributes.<locals>.BadAttr1c                 S   rç   r4   r   r5   r   r   r   r7   Š  r8   z4test_guards_attributes.<locals>.BadAttr1.__getattr__Nrf   r   r   r   r   ÚBadAttr1‰  re   rù   c                   @   r`   )z(test_guards_attributes.<locals>.BadAttr2c                 S   rç   r4   r   r5   r   r   r   Ú__getattribute__Ž  r8   z9test_guards_attributes.<locals>.BadAttr2.__getattribute__N)r9   r:   r;   rú   r   r   r   r   ÚBadAttr2�  re   rû   g      à?ró   zbad1.as_integer_ratiozbad2.as_integer_ratiozgood.as_integer_ratio())r-   rs   )rÃ   r#   r@   rA   r   r   )rø   rù   rû   rB   r   r   r   Útest_guards_attributes…  s   ÿÿrü   c                 C   s   t d| ƒ ƒtks
J ‚d S )NÚround)r   rý   rw   r   r   r   Útest_access_builtinsœ  s   rþ   c                  C   ó@   t ƒ } t t¡� td| ƒ W d   ƒ d S 1 sw   Y  d S )NZthis_is_not_builtin)r#   r@   rA   Ú	NameErrorr   rw   r   r   r   Útest_access_builtins_fails¡  ó   "ÿr  c                  C   rÿ   )NrÜ   )r!   r@   rA   r   r   rw   r   r   r   Útest_rejects_forbidden§  r  r  c                  C   s„   t ddiddidd�} t t¡� td| ƒ W d   ƒ n1 s w   Y  t t¡� td| ƒ W d   ƒ d S 1 s;w   Y  d S )NÚlocal_arD   Úglobal_brt   r"   r   )r   r@   rA   r   r   rw   r   r   r   Útest_guards_locals_and_globals­  s   ÿÿ"ÿr  c                  C   s>   t ddiddidd�} td| ƒdksJ ‚td| ƒdksJ ‚d S )Nr  rD   r  rt   r#   r   )r   r   rw   r   r   r   Útest_access_locals_and_globals¹  s
   ÿr  r‰   )zdef func(): passzclass C: passzx = 1zx += 1zdel xz
import astc                 C   s:   t  t¡� t| |ƒ W d   ƒ d S 1 sw   Y  d S r4   )r@   rA   ÚSyntaxErrorr   )r‰   rB   r   r   r   Útest_rejects_side_effect_syntaxÁ  s   "ÿr	  c                  C   sv   t i i ddd�} td d d ƒ}td| ƒtƒ ksJ ‚td| ƒ|ks!J ‚td| ƒtddd	ƒks.J ‚td
| ƒ|dfks9J ‚d S )Nr#   T)r   r   r   Zin_subscriptr¿   ú:z1:2:3r-   rs   r   z:, "a"rD   )r   Úslicer   Útuple)rB   Zempty_slicer   r   r   Útest_subscriptË  s   ÿr  c                  C   sT   G dd„ dt ƒ} | ƒ }t|jƒ| ju sJ ‚tg jƒt ju sJ ‚tt jƒd u s(J ‚d S )Nc                   @   r`   )ztest_unbind_method.<locals>.Xc                 S   ra   )NZCUSTOMr   ©r0   Úkr   r   r   rF   Ø  r8   z#test_unbind_method.<locals>.X.indexN)r9   r:   r;   rF   r   r   r   r   ÚX×  re   r  )Úlistr   rF   )r  r?   r   r   r   Útest_unbind_methodÖ  s
   r  c                  C   sL   G dd„ dƒ} dd„ }| ƒ }||_ ||_|d dksJ ‚|d dks$J ‚dS )a  This is semi-specified in Python documentation.

    However, since the specification says 'not guaranteed
    to work' rather than 'is forbidden to work', future
    versions could invalidate this assumptions. This test
    is meant to catch such a change if it ever comes true.
    c                   @   r+   )z6test_assumption_instance_attr_do_not_matter.<locals>.Tc                 S   ra   ©NrD   r   r  r   r   r   rc   ë  r8   zBtest_assumption_instance_attr_do_not_matter.<locals>.T.__getitem__c                 S   ra   r  r   r  r   r   r   r7   î  r8   zBtest_assumption_instance_attr_do_not_matter.<locals>.T.__getattr__N)r9   r:   r;   rc   r7   r   r   r   r   ÚTê  r=   r  c                 S   ra   )Nrt   r   r/   r   r   r   Úfñ  r8   z6test_assumption_instance_attr_do_not_matter.<locals>.fr-   rD   N)rc   r7   )r  r  Útr   r   r   Ú+test_assumption_instance_attr_do_not_matterá  s   	r  c                  C   s@   ddl m}  G dd„ d| ƒ}G dd„ d| ƒ}|j|jksJ ‚dS )z4Check assumption on named tuples sharing __getitem__r   )r   c                   @   rX   )z5test_assumption_named_tuples_share_getitem.<locals>.ANrY   r   r   r   r   ÚAÿ  r[   r  c                   @   rX   )z5test_assumption_named_tuples_share_getitem.<locals>.BNrY   r   r   r   r   ÚB  r[   r  N)Útypingr   rc   )r   r  r  r   r   r   Ú*test_assumption_named_tuples_share_getitemû  s   r  Únumpyc                  C   sl   dd l } t| d�}td|ƒ| jjksJ ‚t| d�}t t¡� td|ƒ W d   ƒ d S 1 s/w   Y  d S )Nr   )r  znumpy.linalg.normznp.linalg.norm)	r  r#   r   ZlinalgZnormr"   r@   rA   r   )r  rB   r   r   r   Útest_module_access  s   

"ÿr  )lr'   Ú
contextlibr   r  r   r   r   r   r   r   r	   r
   r   r   Ú	functoolsr   ZIPython.core.guarded_evalr   r   r   r   ZIPython.testingr   Údecr@   Úversion_infoZtyping_extensionsr   r   r   rk   r    r!   r"   r#   r$   r%   ZLIMITED_OR_HIGHERZMINIMAL_OR_HIGHERr*   rC   Zskip_withoutrO   rQ   rW   r\   r_   rh   rj   rr   rx   ry   r{   r}   r€   r‚   r„   rˆ   ÚmarkZparametrizer­   Ú	numeratorrÃ   rÇ   ÚcomplexÚrealr‹   r�   rŽ   r�   r—   rš   r�   rŸ   r¡   r¢   r£   r¤   r¥   r©   rª   r®   r™   ÚbytesrÆ   rÑ   rÒ   rÓ   rÚ   rß   rá   rä   rå   rí   rô   r÷   rü   rþ   r  r  r  r  r	  r  r  r  r  r  r   r   r   r   Ú<module>   sÂ   0












	
"
	
ýþ




3


æþ
	ýøþ
ÿþ
	

þþ

ýþùþýþõþäþ!
þ