o
    û›hl	 ã                   @   sê  d Z ddl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
 ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lm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' e
de(fdd„ƒZ)dd„ Z*dd„ Z+e
dd„ ƒZ,e
de-fdd„ƒZ.e
dd„ ƒZ/ej0dkr g d¢Z1ng d¢Z1ej2 3de1¡d d!„ ƒZ4d"d#„ Z5d$d%„ Z6G d&d'„ d'ƒZ7G d(d)„ d)ƒZ8G d*d+„ d+ej9ƒZ:ej2 3d,g d-¢¡d.d/„ ƒZ;ej2j<d0d1�ej2 3d2g d3¢¡d4d5„ ƒƒZ=ej2 3d6d7d8d9d:gd;gfd7d<d;gd9d=gfd>d?d9gd;gfd>d@d9gd;gfdAdBd9gd;gfg¡dCdD„ ƒZ>ej2 3dEg dF¢¡dGdH„ ƒZ?ej2 3dIdJdJgdKdKgdLdLgdMdMgdNdNgdOdOgdPdPgdQdgdRdgdSdgdTdUgdVdUgdWdPgdXdYgdZdgd[d[gd\d\gd]d]gd^dgd_dgg¡d`da„ ƒZ@dS )bz/Tests for the IPython tab-completion machinery.é    N)Úversion)Úcontextmanager)ÚConfig)Úget_ipython)Ú	completer)ÚTemporaryDirectoryÚTemporaryWorkingDirectory)Úcomplete_object)Ú
decorators)Úlatex_symbols)
Ú
CompletionÚprovisionalcompleterÚmatch_dict_keysÚ_deduplicate_completionsÚ _match_number_in_dict_key_prefixÚcompletion_matcherÚSimpleCompletionÚCompletionContextÚ_unicode_name_computeÚ_UNICODE_RANGES)ÚparseÚstatusc                 c   s2   � t ƒ j}z|j}| |_d V  W ||_d S ||_w ©N©r   Ú	CompleterÚuse_jedi)r   r   Úold© r   úWc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/tests/test_completer.pyÚjedi_status*   s   €r   c               	      sæ   ddl ‰ ddl} g }tddƒD ]}z	|  t|ƒ¡ W n	 ty#   Y qw | |¡ q‡ fdd„}t||ƒƒ}g }g }d\}}|D ],\}	}
| |
|	 ¡ | |	| t|d ƒt|	ƒt	|	| d d	 ƒ› d
�f¡ |	|
}}q@t
|ƒd S )z›
    utility to recompute the largest unicode range without any characters

    use to recompute the gap in the global _UNICODE_RANGES of completer.py
    r   Né   c                 3   sF   � ˆ   t| ƒdd„ ¡D ]\}}t|ƒ}|d d |d d fV  qd S )Nc                 S   s   | d | d  S )Né   r   r   )Úpairr   r   r   Ú<lambda>L   s    z:recompute_unicode_ranges.<locals>.ranges.<locals>.<lambda>r   r!   éÿÿÿÿ)ÚgroupbyÚ	enumerateÚlist)ÚiÚaÚb©Ú	itertoolsr   r   ÚrangesK   s
   €þz(recompute_unicode_ranges.<locals>.ranges)r   r   r!   ið éd   ú%r$   )r,   ÚunicodedataÚrangeÚnameÚchrÚ
ValueErrorÚappendr'   ÚhexÚroundÚsorted)r0   ZvalidÚcr-   ZrgZlensZgap_lensZ_pstartZpstopÚstartÚstopr   r+   r   Úrecompute_unicode_ranges:   s4   ÿ
üÿr<   c            	      C   s˜   t dgƒ} t tƒ}t| ƒ}t|ƒ}d}||ks|dkr:tƒ \}}}}d|› d|› d|› d|› d|› d	|› d
|› d�}||ksBJ |ƒ‚|dksJJ |ƒ‚dS )zz
    Test that the ranges we test for unicode names give the same number of
    results than testing the full length.
    )r   r    Nià z¿_UNICODE_RANGES likely wrong and need updating. This is
        likely due to a new release of Python. We've find that the biggest gap
        in unicode characters has reduces in size to be z characters
        (z), from z, to zH. In completer.py likely update to

            _UNICODE_RANGES = [(32, z), (zS, 0xe01f0)]

        And update the assertion below to use

            len_exp <= z	
        i41 )r   r   Úlenr<   )	Úexpected_listÚtestZlen_expZlen_testÚmessageÚsizer:   r;   Zprctr   r   r   Útest_unicode_rangec   s0   
þýýýûû	÷rB   c                  c   s8   � t ƒ } | jj}zd| j_d V  W || j_d S || j_w )NT)r   r   Zgreedy)ÚipZgreedy_originalr   r   r   Úgreedy_completion„   ó   €rD   Ú
evaluationc                 c   s8   � t ƒ }|jj}z| |j_d V  W ||j_d S ||j_w r   )r   r   rF   )rF   rC   Zevaluation_originalr   r   r   Úevaluation_policy�   rE   rG   c                 c   s>   � t ƒ }z|jj | ¡ d V  W |jj ¡  d S |jj ¡  w r   )r   r   Úcustom_matchersÚextendÚclear)ZmatchersrC   r   r   r   rH   š   s   €rH   Úwin32)©ÚabcrM   )ú abcz" abc")úa bcz"a bc")úa  bcz"a  bc")ú  bcz"  bc")rL   )rN   z\ abc)rO   za\ bc)rP   za\ \ bc)rQ   z\ \ bc)za(bcza\(bc)za)bcza\)bc)za( )bcz	a\(\ \)bc)za[1]bcza\[1\]bc)za{1}bcza\{1\}bc)za#bcza\#bc)za?bcza\?bc)za=bcza\=bc)za\bcza\\bc)za|bcza\|bc)za;bcza\;bc)za:bcza\:bc)za'bcza\'bc)za*bcza\*bc)za"bcza\"bc)za^bcza\^bc)za&bcza\&bczs1,expectedc                 C   s   t  | ¡|ks	J ‚d S r   )r   Zprotect_filename)Ús1Úexpectedr   r   r   Útest_protect_filenameÈ   s   rT   c                 C   s<   |D ]\}}}t |ƒ}|| }|  ||¡}||ksJ ‚qd S r   )r=   Z
split_line)ÚsplitterZ
test_specsZpart1Zpart2ÚsplitÚ
cursor_posÚlineÚoutr   r   r   Úcheck_line_splitÍ   s   ürZ   c                  C   s2   t  ¡ } g d¢}t| |ƒ t| dd„ |D ƒƒ dS )z,Basic line splitter test with default specs.)	)zrun some/scriptÚ zsome/script)zrun scripts/erz
ror.py fooú
scripts/er)z	echo $HOMr[   ZHOM)zprint sys.par[   úsys.pa)zprint(sys.par[   r]   )zexecfile('scripts/err[   r\   )úa[x.r[   úx.)r^   Úyr_   )zcd "some_file/r[   z
some_file/c                 S   s   g | ]}t t|ƒ‘qS r   )ÚmapÚstr)Ú.0Úpr   r   r   Ú
<listcomp>é   s    z#test_line_split.<locals>.<listcomp>N)r   ÚCompletionSplitterrZ   )ÚspÚtr   r   r   Útest_line_splitÔ   s   
ri   c                   @   s$   e Zd Zi Zdd„ Zedd„ ƒZdS )ÚNamedInstanceClassc                 C   s   | | j |< d S r   )Ú	instances)Úselfr2   r   r   r   Ú__init__ï   s   zNamedInstanceClass.__init__c                 C   s
   | j  ¡ S r   )rk   Úkeys)Úclsr   r   r   Ú_ipython_key_completions_ò   ó   
z,NamedInstanceClass._ipython_key_completions_N)Ú__name__Ú
__module__Ú__qualname__rk   rm   Úclassmethodrp   r   r   r   r   rj   ì   s
    rj   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚKeyCompletabler   c                 C   s
   || _ d S r   )Úthings)rl   rw   r   r   r   rm   ø   ó   
zKeyCompletable.__init__c                 C   s
   t | jƒS r   )r'   rw   ©rl   r   r   r   rp   û   rx   z(KeyCompletable._ipython_key_completions_N)r   )rr   rs   rt   rm   rp   r   r   r   r   rv   ÷   s    
rv   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zejjejd!kd"d#�d$d%„ ƒZd&d'„ Zd(d)„ Zejjejjd*v d+d#�d,d-„ ƒZejjejjd*v d+d#�d.d/„ ƒZejjejjd*v d+d#�d0d1„ ƒZejjejjd*v d+d#�d2d3„ ƒZ ejje!e"d4ƒƒe!d5ƒkd6d7d8�d9d:„ ƒZ#ejjejjd*v d+d#�d;d<„ ƒZ$d=d>„ Z%d?d@„ Z&dAdB„ Z'dCdD„ Z(dEdF„ Z)dGdH„ Z*dIdJ„ Z+dKdL„ Z,dMdN„ Z-dOdP„ Z.dQdR„ Z/dSdT„ Z0dUdV„ Z1dWdX„ Z2dYdZ„ Z3d[d\„ Z4d]d^„ Z5d_d`„ Z6dadb„ Z7dcdd„ Z8dedf„ Z9dgdh„ Z:didj„ Z;dkdl„ Z<dmdn„ Z=e> ?do¡dpdq„ ƒZ@e> ?dr¡dsdt„ ƒZAdudv„ ZBdwdx„ ZCdydz„ ZDd{d|„ ZEd}d~„ ZFdd€„ ZGd�d‚„ ZHdƒd„„ ZId…d†„ ZJd‡dˆ„ ZKd‰dŠ„ ZLd‹dŒ„ ZMd�dŽ„ ZNd�d�„ ZOd‘d’„ ZPejjejjd*v d+d#�d“d”„ ƒZQd•d–„ ZRd—d˜„ ZSd™S )šÚTestCompleterc                 C   s   |   t¡| _| j ¡  dS )z]
        We want to silence all PendingDeprecationWarning when testing the completer
        N)ZassertWarnsÚPendingDeprecationWarningÚ_assertwarnsÚ	__enter__ry   r   r   r   ÚsetUp   s   zTestCompleter.setUpc                 C   s,   z| j  d d d ¡ W d S  ty   Y d S w r   )r|   Ú__exit__ÚAssertionErrorry   r   r   r   ÚtearDown  s
   ÿzTestCompleter.tearDownc                 C   s@   t ƒ }G dd„ dƒ}|ƒ |jd< t |¡dd„ ƒ}| d¡ dS )ú?Test that errors from custom attribute completers are silenced.c                   @   ó   e Zd ZdS )z5TestCompleter.test_custom_completion_error.<locals>.AN©rr   rs   rt   r   r   r   r   ÚA  ó    r…   Úxc                 S   s   t dƒ‚)Nzthis should be silenced)Ú	TypeError)r)   Zexisting_completionsr   r   r   Ú
complete_A  s   z>TestCompleter.test_custom_completion_error.<locals>.complete_Ar_   N)r   Úuser_nsr	   ÚregisterÚcomplete)rl   rC   r…   r‰   r   r   r   Útest_custom_completion_error  s   
z*TestCompleter.test_custom_completion_errorc                 C   sn   t ƒ }| d¡\}}| d¡| d¡k sJ ‚dd„ }|jj d|¡ | d¡\}}| d¡| d	¡k s5J ‚d
S )r‚   ÚinÚinputÚintc                 S   s   ddgS )NÚexample2Úexample1r   )r)   r   r   r   Úcomplete_example#  s   zGTestCompleter.test_custom_completion_ordering.<locals>.complete_examplezex*Úexr‘   r’   N)r   rŒ   Úindexr   Zcustom_completersZadd_re)rl   rC   Ú_Úmatchesr“   r   r   r   Útest_custom_completion_ordering  s   z-TestCompleter.test_custom_completion_orderingc                 C   sP   t ƒ }g d¢}|ttt|ƒƒ D ]}| |¡\}}|  |t¡ |  |t¡ qd S )N)Úruz%ruzcd /Zfloaz	float(x)/)r   r'   ra   rb   rŒ   ZassertIsInstance)rl   rC   Úsrh   Útextr—   r   r   r   Útest_unicode_completions*  s   ùz&TestCompleter.test_unicode_completionsc                 C   s¤   t ƒ }t ttƒd¡}|D ]}| |¡\}}|  ||¡ |  |t| g¡ q| d¡\}}|  |d¡ |  |d td ¡ | d¡\}}|  d|¡ |  d|¡ d S )Né
   zprint(\alphaz\alphar   z\alz\aleph)r   ÚrandomÚsampler8   r   rŒ   ÚassertEqualÚassertIn)rl   rC   rn   Úkr›   r—   r   r   r   Útest_latex_completions8  s   z$TestCompleter.test_latex_completionsc                 C   s2   t ƒ }|j d¡\}}|  |d¡ |  |d¡ dS )za
        forward latex should really return nothing in either field if nothing is found.
        z\really_i_should_match_nothingr[   r   N)r   r   Zlatex_matchesr    )rl   rC   r›   r—   r   r   r   Útest_latex_no_resultsJ  s   z#TestCompleter.test_latex_no_resultsc                 C   ó&   t ƒ }| d¡\}}|  |dg¡ d S )Nu   \Î²z\beta©r   rŒ   r    ©rl   rC   r2   r—   r   r   r   Útest_back_latex_completionS  s   z(TestCompleter.test_back_latex_completionc                 C   r¥   )Nu   \â…¤ú\ROMAN NUMERAL FIVEr¦   r§   r   r   r   Útest_back_unicode_completionZ  s   z*TestCompleter.test_back_unicode_completionc                 C   s4   t ƒ }| d¡\}}|  |dg¡ |  |dg¡ d S )Nr©   õ   â…¤r¦   r§   r   r   r   Útest_forward_unicode_completion`  s   z-TestCompleter.test_forward_unicode_completionc                 C   s.   t  ¡ }d|_|  |jd¡ |  |jd¡ d S )Nú z[\ ])r   rf   Údelimsr    Z_delim_expr)rl   rg   r   r   r   Útest_delim_settingg  s   z TestCompleter.test_delim_settingc                 C   s$   t  ¡ }d|_g d¢}t||ƒ dS )z%Test with only spaces as split chars.r­   ))Úfoor[   r°   )úrun foor[   r°   )r±   Úbarr°   N)r   rf   r®   rZ   )rl   rg   rh   r   r   r   Útest_spacesm  s   zTestCompleter.test_spacesc                 C   ó    dD ]}|   t |¡d¡ qd S )N)ú'z'''z'hi' 'rµ   ©r    r   Úhas_open_quotes©rl   rš   r   r   r   Útest_has_open_quotes1t  ó   ÿz#TestCompleter.test_has_open_quotes1c                 C   r´   )N)ú"z"""z"hi" "r»   r¶   r¸   r   r   r   Útest_has_open_quotes2x  rº   z#TestCompleter.test_has_open_quotes2c                 C   ó   dD ]
}|   t |¡¡ qd S )N)z''z''' '''z'hi' 'ipython'©ÚassertFalser   r·   r¸   r   r   r   Útest_has_open_quotes3|  ó   ÿz#TestCompleter.test_has_open_quotes3c                 C   r½   )N)z""z""" """z"hi" "ipython"r¾   r¸   r   r   r   Útest_has_open_quotes4€  rÁ   z#TestCompleter.test_has_open_quotes4rK   z#abspath completions fail on Windows©Úreasonc           	         sÆ   t ƒ }tƒ �S}tj |d¡‰ ddg}‡ fdd„|D ƒ}|D ]}t|ddd� ¡  q| ˆ ¡d	 }|  ||¡ d
ˆ  }| ˆ |¡d	 }‡ fdd„|D ƒ}|  ||¡ W d   ƒ d S 1 s\w   Y  d S )Nr°   Ú1Ú2c                    ó   g | ]}ˆ | ‘qS r   r   ©rc   rš   ©Úprefixr   r   re   Œ  ó    z?TestCompleter.test_abspath_file_completions.<locals>.<listcomp>Úwúutf-8©Úencodingr!   ú	a = f("%sc                    rÇ   r   r   rÈ   rÉ   r   r   re   —  rË   )	r   r   ÚosÚpathÚjoinÚopenÚcloserŒ   r    )	rl   rC   ZtmpdirÚsuffixesÚnamesÚnr9   ÚcmdÚcompr   rÉ   r   Útest_abspath_file_completions„  s   "ñz+TestCompleter.test_abspath_file_completionsc                    sÄ   t ƒ }tƒ �R d‰ ddg}‡ fdd„|D ƒ}|D ]}t|ddd� ¡  q| ˆ ¡d	 }|  ||¡ d
ˆ  }| ˆ |¡d	 }‡ fdd„|D ƒ}|  | t|ƒ¡¡ W d   ƒ d S 1 s[w   Y  d S )Nz./foorÅ   rÆ   c                    rÇ   r   r   rÈ   rÉ   r   r   re   Ÿ  rË   z=TestCompleter.test_local_file_completions.<locals>.<listcomp>rÌ   rÍ   rÎ   r!   rÐ   c                    s   h | ]}ˆ | ’qS r   r   rÈ   rÉ   r   r   Ú	<setcomp>ª  rË   z<TestCompleter.test_local_file_completions.<locals>.<setcomp>)	r   r   rÔ   rÕ   rŒ   r    Ú
assertTrueÚissubsetÚset)rl   rC   rÖ   r×   rØ   r9   rÙ   rÚ   r   rÉ   r   Útest_local_file_completionsš  s   "ñz)TestCompleter.test_local_file_completionsc                    s´   t ƒ ‰ ‡ fdd„}tƒ �D d}t|ddd� ¡  tjdkr|nd}|d	ƒd
 }|  |j|¡ |dƒd
 }|  |j|¡ |dƒd
 }|  |j|¡ W d   ƒ d S 1 sSw   Y  d S )Nc                    s   ˆ j jdt| ƒ| d�d d S )Nr   )Zcursor_linerW   Ú	full_textzIPCompleter.file_matcherÚcompletions)r   Z	_completer=   ©r›   ©rC   r   r   r–   °  s   
ÿþþz5TestCompleter.test_quoted_file_completions.<locals>._zfoo'barrÌ   rÍ   rÎ   rK   zfoo\'barz	open('foor   z	open("fooz%ls foo)r   r   rÔ   rÕ   ÚsysÚplatformr    r›   )rl   r–   r2   Úescapedr9   r   rä   r   Útest_quoted_file_completions­  s   "ïz*TestCompleter.test_quoted_file_completions)ÚalphazParso does not yet parse 3.13c              	   C   sÌ   t ƒ }|j}| d¡ dD ]V}tƒ �I ||j_| d¡}|dgks'J ||fƒ‚| d¡}t|ƒdks8J ||fƒ‚| d¡}|rJ|ddgksIJ |ƒ‚n
|d	d
gksTJ |ƒ‚W d  ƒ n1 s^w   Y  qdS )zr
        Make sure the output of `IPCompleter.all_completions` does not have
        duplicated prefixes.
        zclass TestClass():
	a=1
	a1=2)TFZTestClZ	TestClassz
TestClass.é   zTestClass.azTestClass.a1z.az.a1N)r   r   r”   r   r   Úall_completionsr=   )rl   rC   r9   r   r—   r   r   r   Útest_all_completions_dupsÈ  s$   	



€ö€ÿz'TestCompleter.test_all_completions_dupsc                    s–   t ƒ ‰ d‡ fdd„	}‡ fdd„}ddl}tdd„ |j d	¡dd
… D ƒƒ}|dkr/|dddƒ |dddƒ |dddƒ |dddddƒ |dddƒ dS )z4
        A couple of issue we had with Jedi
        Nc                    sŽ   t |ƒ}|d ur
|n|}|d ur|n|}tƒ �& dˆ j_tˆ j ||¡ƒ}dˆ j_t|||ƒ|v s5J | ƒ‚W d   ƒ d S 1 s@w   Y  d S ©NTF©r=   r   r   r   rß   râ   r   )rÄ   rš   rÚ   r:   ÚendÚlrâ   rä   r   r   Ú_test_completeë  s   "üz/TestCompleter.test_jedi.<locals>._test_completec                    sn   t |ƒ}tƒ �& dˆ j_tˆ j ||¡ƒ}dˆ j_t|||ƒ|vs%J | ƒ‚W d   ƒ d S 1 s0w   Y  d S rí   rî   )rÄ   rš   rÚ   rð   râ   rä   r   r   Ú_test_not_completeõ  s   "üz3TestCompleter.test_jedi.<locals>._test_not_completer   c                 s   s   � | ]}t |ƒV  qd S r   )r�   )rc   r(   r   r   r   Ú	<genexpr>ÿ  s   € z*TestCompleter.test_jedi.<locals>.<genexpr>Ú.é   )r   r�   z'jedi >0.9 should complete and not crashza=1;a.Úrealzcan infer first argumentza=(1,"foo");a[0].zcan infer second argumentza=(1,"foo");a[1].Ú
capitalizezcover duplicate completionsZimÚimportrê   zdoes not mix types)NN)r   ÚjediÚtupleÚ__version__rV   )rl   rñ   rò   rù   Zjedi_versionr   rä   r   Ú	test_jediá  s   
"zTestCompleter.test_jedic                 C   sz   t ƒ }tƒ � d|j_|j dd¡}t|ƒ}d|j_W d  ƒ n1 s$w   Y  d|jv s2J dƒ‚d|jv s;J dƒ‚dS )	zp
        Lets make sure jedi is capable of pulling out the signature of the function we are completing.
        TZoperõ   FNÚfilez0Signature of function was not found by completerrÏ   )r   r   r   r   râ   ÚnextÚ	signature©rl   rC   râ   r9   r   r   r   Útest_completion_have_signature  s   
üÿz,TestCompleter.test_completion_have_signaturec                 C   s`   t ƒ }tƒ � d|j_|j dd¡}t|ƒ}W d  ƒ n1 s w   Y  |jdks.J dƒ‚dS )zB
        Lets make sure matchers provide completion type.
        Fz%timrõ   NÚmagicz+Type of magic was not assigned by completer)r   r   r   r   râ   rþ   Útyper   r   r   r   Útest_completions_have_type  s   
ýz(TestCompleter.test_completions_have_typerù   z0.18.0zKnown failure on jedi<=0.18.0T)rÄ   Ústrictc                 C   s’   t ƒ }| t d¡¡ tƒ � d|j_ttd|j 	dd¡ƒƒ}d|j_W d  ƒ n1 s-w   Y  t
|ƒdks>J d| ƒ‚|d	 jd
ksGJ ‚dS )zd
        Test that completions are correctly deduplicated (even if ranges are not the same)
        z.
        class Z:
            zoo = 1
        TzZ.zrõ   FNr!   z1Completions (Z.z<tab>) correctly deduplicate: %s r   Zzoo)r   r”   ÚtextwrapÚdedentr   r   r   r'   r   râ   r=   r›   )rl   rC   rð   r   r   r   Útest_deduplicate_completions*  s   	ÿÿÿ
ûz*TestCompleter.test_deduplicate_completionsc              
      s
  t ƒ ‰ ˆ  d¡ ˆ  d¡ ˆ jddd�\}}ˆ d|v d| ¡ ‡ ‡fdd	„}tƒ �Q |dd
ddtd
d
dƒƒ |ddddtd
ddƒƒ |ddddtd
ddƒƒ |ddddtdddƒƒ |ddddtddd ƒƒ |d!d"d#d$td%d"d&ƒƒ W d'  ƒ d'S 1 s~w   Y  d'S )(a-  
        Test the capability of the Greedy completer.

        Most of the test here does not really show off the greedy completer, for proof
        each of the text below now pass with Jedi. The greedy completer is capable of more.

        See the :any:`test_dict_key_completion_contexts`

        za=list(range(5))zd = {'a b': str}rô   za[0].)rX   z.realz$Shouldn't have completed on a[0]: %sc              
      sÜ   t ƒ �a tƒ �E dˆ j_ˆ jd| |d�\}}ˆ |||| ¡ dˆ j_tƒ � ˆ j | |¡}W d   ƒ n1 s8w   Y  ˆ |t|ƒ¡ W d   ƒ n1 sOw   Y  W d   ƒ d S W d   ƒ d S 1 sgw   Y  d S )NFrô   )rX   rW   T)rD   r   r   r   rŒ   r¡   râ   r'   )rX   rW   Úexpectr@   Ú
completionr–   r9   râ   ©rC   rl   r   r   r–   Z  s   ÿPøz0TestCompleter.test_greedy_completions.<locals>._é   z"Should have completed on a[0].: %srö   za[0].ré   z#Should have completed on a[0].r: %sz
a[0].from_r�   z.from_bytesz'Should have completed on a[0].from_: %sÚ
from_byteszassert str.staré   z.startswithz.Should have completed on `assert str.star`: %sé   Ú
startswithzd['a b'].stré   z.stripz+Should have completed on `d['a b'].str`: %sé	   Ústripza.appé   z.appendz$Should have completed on `a.app`: %srê   r5   N)r   r”   rŒ   r¿   r   r   )rl   r–   r9   r   r  r   Útest_greedy_completionsF  sd   


û
û
û
û
û
û"Üz%TestCompleter.test_greedy_completionsc                 C   s¦  t ƒ }d|_i |_|j}| d¡ tƒ }d|j_| |¡ t	ƒ � d|_
| d¡\}}|  d|¡ |  d|¡ W d   ƒ n1 sAw   Y  tƒ }d|j_| |¡ t	ƒ � d|_
| d¡\}}|  d|¡ W d   ƒ n1 spw   Y  tƒ }d|j_| |¡ t	ƒ � d|_
| d¡\}}|  d|¡ |  d|¡ W d   ƒ n1 s¥w   Y  t	ƒ � d|_
| d	¡\}}|  d
|¡ W d   ƒ n1 sÈw   Y  |`|`d S )Nr!   zip=get_ipython()r   Fzip.z.__str__z._hidden_attrrê   zip._x.z.keys)r   Z_hidden_attrZ_xr   r”   r   ÚIPCompleterZomit__namesÚupdate_configr   r   rŒ   r¡   ÚassertNotIn©rl   rC   r9   Úcfgrš   r—   r   r   r   Útest_omit__names‘  sL   

ü
ý
üý	zTestCompleter.test_omit__namesc                 C   s\   t ƒ }|j}d|_| d¡ | d¡ tƒ }d|j_| |¡ | d¡\}}|  	d|¡ dS )zV
        Limit to all is deprecated, once we remove it this test can go away.
        Fzclass D: x=24zd=D()zd.z.xN)
r   r   r   r”   r   r  Zlimit_to__all__r  rŒ   r¡   r  r   r   r   Útest_limit_to__all__False_okÎ  s   


z*TestCompleter.test_limit_to__all__False_okc                 C   s,   G dd„ dƒ}t  |ƒ ¡}|  |dg¡ d S )Nc                   @   s   e Zd ZddgZdS )z2TestCompleter.test_get__all__entries_ok.<locals>.Ar‡   r!   N)rr   rs   rt   Ú__all__r   r   r   r   r…   Þ  ó    r…   r‡   ©r   Zget__all__entriesr    ©rl   r…   Úwordsr   r   r   Útest_get__all__entries_okÝ  s   z'TestCompleter.test_get__all__entries_okc                 C   s*   G dd„ dƒ}t  |ƒ ¡}|  |g ¡ d S )Nc                   @   rƒ   )z;TestCompleter.test_get__all__entries_no__all__ok.<locals>.ANr„   r   r   r   r   r…   å  r†   r…   r   r!  r   r   r   Ú"test_get__all__entries_no__all__okä  s   z0TestCompleter.test_get__all__entries_no__all__okc                 C   sF   t ƒ }|j}d|_| d¡ | d¡ | d d¡\}}|  d|¡ d S )NFzlong_variable_name = 1za = []z	a.sort(loZlong_variable_name©r   r   r   r”   rŒ   r¡   ©rl   rC   r9   rš   r—   r   r   r   Ú)test_completes_globals_as_args_of_methodsë  s   

z7TestCompleter.test_completes_globals_as_args_of_methodsc                 C   sL   t ƒ }|j}d|_G dd„ dƒ}|ƒ |jd< | d d¡\}}|  d|¡ d S )NFc                   @   s   e Zd Zdd„ ZdS )zSTestCompleter.test_completes_attributes_in_fstring_expressions.<locals>.CustomClassc                 S   ó   d S r   r   ry   r   r   r   Ú
method_oneú  s   z^TestCompleter.test_completes_attributes_in_fstring_expressions.<locals>.CustomClass.method_oneN)rr   rs   rt   r)  r   r   r   r   ÚCustomClassù  r  r*  Z
custom_objzf'{custom_obj.methz.method_one©r   r   r   rŠ   rŒ   r¡   )rl   rC   r9   r*  rš   r—   r   r   r   Ú0test_completes_attributes_in_fstring_expressionsô  s   z>TestCompleter.test_completes_attributes_in_fstring_expressionsc                 C   sl   t ƒ }|j}d|_| d¡ | d¡ | d¡ | d d¡\}}|  d|¡ | d d¡\}}|  d|¡ d S )	NFzclass Test: passztest_obj = Test()ztest_obj.attribute = 'value'zd = {'key': test_obj.attrz
.attributezd = {'k.e.y': TeZTestr%  r&  r   r   r   Ú"test_completes_in_dict_expressions  s   


z0TestCompleter.test_completes_in_dict_expressionsc                 C   s’   t ƒ }|j}d|_| d¡ | d d¡\}}|  d|¡ | d dd¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  d	|¡ d S )
NFzdef myfunc(a=1,b=2): return a+bz
myfunc(1,bzb=zmyfunc(1,b)r�   zmyfunc(a="escaped\")string",bzmin(k, kzkey=r%  r&  r   r   r   Útest_func_kw_completions  s   
z&TestCompleter.test_func_kw_completionsc                 C   s\   t ƒ }|j}| d¡}|  |dg¡ | d¡}|  |g d¢¡ | d¡}|  |g d¢¡ d S )Nz"min(iterable[, key=func]) -> valueÚkeyz@Minuit.migrad(self, int ncall=10000, resume=True, int nsplit=1)
)ZncallÚresumeZnsplitzB
 Minuit.migrad(self, int ncall=10000, resume=True, int nsplit=1)
)r   r   Z!_default_arguments_from_docstringr    )rl   rC   r9   Zkwdr   r   r   Ú%test_default_arguments_from_docstring#  s   
ÿÿz3TestCompleter.test_default_arguments_from_docstringc                 C   sH   t ƒ }|j}| d d¡\}}|  d|¡ | d d¡\}}|  d|¡ d S )NZlsmagz%lsmagicz%lsmag)r   r   rŒ   r¡   r&  r   r   r   Útest_line_magics3  s   zTestCompleter.test_line_magicsc                 C   s`   ddl m} |dd„ ƒ}tƒ }|j}| d d¡\}}|  d|¡ | d d¡\}}|  d|¡ d S )Nr   )Úregister_cell_magicc                 S   r(  r   r   ©rX   Úcellr   r   r   Ú
_foo_cellm>  ó   z2TestCompleter.test_cell_magics.<locals>._foo_cellmZ_foo_cez%%_foo_cellmz	%%_foo_ce)ÚIPython.core.magicr3  r   r   rŒ   r¡   )rl   r3  r6  rC   r9   rš   r—   r   r   r   Útest_cell_magics;  s   
zTestCompleter.test_cell_magicsc                 C   s    ddl m} |dd„ ƒ}tƒ }|j}| d d¡\}}|  d|¡ |  d|¡ | d d¡\}}|  d|¡ |  d|¡ | d d	¡\}}|  d|¡ |  d|¡ d S )
Nr   )Úregister_line_cell_magicc                 S   r(  r   r   r4  r   r   r   Ú
_bar_cellmM  r7  z7TestCompleter.test_line_cell_magics.<locals>._bar_cellmZ_bar_cez%_bar_cellmz%%_bar_cellmz%_bar_cez	%%_bar_ce)r8  r:  r   r   rŒ   r¡   r  )rl   r:  r;  rC   r9   rš   r—   r   r   r   Útest_line_cell_magicsJ  s   
z#TestCompleter.test_line_cell_magicsc                 C   s.   t ƒ }|j}| d¡\}}|  |ddg¡ d S )NZtimeitz%timeitz%%timeit)r   r   rŒ   r    ©rl   rC   r9   r›   r—   r   r   r   Útest_magic_completion_orderb  s   z)TestCompleter.test_magic_completion_orderc                 C   s|   t ƒ }|j}d|_| d¡\}}|  |dg¡ | d¡ | d¡\}}|  |dg¡ |jd= | d¡\}}|  |dg¡ d S )NFÚmatú%matplotlibúmatplotlib = 1Z
matplotlib)r   r   r   rŒ   r    Úrun_cellrŠ   r=  r   r   r   Útest_magic_completion_shadowingj  s   
z-TestCompleter.test_magic_completion_shadowingc                 C   sR   t ƒ }|j}| d¡\}}|  |dg¡ | d¡ | d¡\}}|  |dg¡ dS )z�
        If the user try to complete a shadowed magic, and explicit % start should
        still return the completions.
        z%matr@  rA  N)r   r   rŒ   r    rB  r=  r   r   r   Ú(test_magic_completion_shadowing_explicit~  s   
z6TestCompleter.test_magic_completion_shadowing_explicitc                 C   sl  t ƒ }|j}| d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  dg|¡ | d d¡\}}|  dg|¡ | d d¡\}}|  dg|¡ | d d	¡\}}|  dg|¡ | d d
¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  dg|¡ | d d¡\}}|  dg|¡ d S )NÚconfz%configZAliasManagerzconfig z%config z
config Aliz%config Alizconfig AliasManagerz%config AliasManagerzconfig AliasManager.zAliasManager.default_aliasesz%config AliasManager.zconfig AliasManager.de©r   r   rŒ   r¡   r  ZassertListEqualr&  r   r   r   Útest_magic_config‘  s4   zTestCompleter.test_magic_configc                 C   sØ   t ƒ }|j}| d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  d|¡ | d d¡\}}|  dg|¡ | d d¡\}}|  dg|¡ d S )NZcoloz%colorsZNoColorzcolors z%colors zcolors NoCoz%colors NoCorF  r&  r   r   r   Útest_magic_color®  s    zTestCompleter.test_magic_colorc                    sÎ  d‰ ‡ fdd„}ddg}||dƒddd	gfksJ ‚||d
ƒddd	gfks&J ‚||dƒddd	gfks3J ‚||dƒddd	gfks@J ‚||dƒdddgfksMJ ‚||dƒdddgfksZJ ‚||dƒdddgfksgJ ‚||dƒdddgfkstJ ‚g d¢}||dƒdddgfks…J ‚||dƒdddgfks’J ‚g d¢}||dƒdddgfks£J ‚||dƒddddgfks±J ‚||dƒddddgfks¿J ‚||dƒddd d!gfksÍJ ‚||d"ƒddg fksÙJ ‚||d#ƒddg fksåJ ‚d$S )%z
        Test that match_dict_keys works on a couple of use case does return what
        expected, and does not crash
        ú 	
`!@#$^&*()=+[{]}\|;:'",<>?c                     s&   t | dˆ i|¤Ž\}}}||t|ƒfS )Nr®   ©r   r'   )ÚargsÚkwargsÚquoteÚoffsetr—   ©r®   r   r   ÚmatchÈ  s   z1TestCompleter.test_match_dict_keys.<locals>.matchr°   s   farúb'rµ   rê   Zfarzb'fúb"r»   zb"fr!   z'fz"f)©r°   éW  )r°   i®  ©é  r²   )rV  r?   Ú33r[   r   Ú3333©l   ï>[= rT  iÒ  Ú1999é   é   Z0xdeadÚ
0xdeadbeefrÅ   Ú1111Ú1234rÆ   Ú21Ú22Z0b101Ú0b10101Ú0b10110Z
a_variablez'' ''Nr   )rl   rP  rn   r   rO  r   Útest_match_dict_keysÁ  s*   z"TestCompleter.test_match_dict_keysc                    s�  d‰ g d¢}ddœ‡ fdd„
}||ddd�dd	d
dgfksJ ‚||ddd�dd	d
dgfks/J ‚||ddd�dd	dgfks>J ‚||ddd�dd	dgfksMJ ‚||ddd�ddd
gfks\J ‚||ddd�ddd
gfkskJ ‚||ddd�ddd
gfkszJ ‚||ddd�ddd
gfks‰J ‚||ddd�dd	g fks—J ‚||ddd�dd	g fks¥J ‚ddg}||ddd�dd	dgfks¸J ‚||ddd�dd	dgfksÇJ ‚||ddd�dd	dgfksÖJ ‚||ddd�dd	g fksäJ ‚g d¢}||ddd�dd	d gfks÷J ‚||d!dd�d!d"d#d$gfk�sJ ‚||dd%d�dd	d
gfk�sJ ‚||d!d%d�d!d"d&d'gfk�s)J ‚||dd(d�dd	g fk�s8J ‚||d)ƒd!d"d*gfk�sFJ ‚dS )+zš
        Test that match_dict_keys called with extra prefix works on a couple of use case,
        does return what expected, and does not crash.
        rI  )©r°   r²   )r°   Úoof)r°   s   bar)Úotherr?   N)Úextrac                    s(   t |ˆ | dœ|¤Ž\}}}||t|ƒfS )N)r®   Zextra_prefixrJ  )rh  rK  rL  rM  rN  r—   rO  r   r   rP  ù  s   ÿÿz7TestCompleter.test_match_dict_keys_tuple.<locals>.matchrµ   )r°   r!   r²   rf  r»   z'oz"orQ  rê   rR  zb'bzb"b)Zno_foo)Úfo)Úfoo1Úfoo2Úfoo3Úfoo4)rj  rk  r²   rm  z'foo)rj  rk  )rj  rk  rl  )rj  rk  rl  rm  )rS  )r°   Ú2222rU  )rV  i\  rn  r[   r   r^  z'2222')rV  ú'bar'Z4444)rX  rW  rX  r   )rl   rn   rP  r   rO  r   Útest_match_dict_keys_tupleð  s:     
ý" " z(TestCompleter.test_match_dict_keys_tuplec              	   C   sö   t ƒ }|jj}d|j_d d d d d d d d dœ|jd< |dd�\}}|  d|¡ |  d|¡ |  d|¡ |  d	|¡ |  d
|¡ |  d|¡ |dd�\}}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ d|j_d S )NT))Zaar  )Úbbr\  rq  Úcc)éM   r‡   )éX   r`   rt  éc   Údúd[©Úline_bufferz'aa', z'bb'z'cc']z77, Z88z99]zd['aa', z11]z'bb', z'bb']z'cc'z'cc', F)r   r   rŒ   Zauto_close_dict_keysrŠ   r¡   r  ©rl   rC   rŒ   r–   r—   r   r   r   Ú!test_dict_key_completion_closures  s8   òz/TestCompleter.test_dict_key_completion_closuresc                 C   sT  t ƒ }|jj}ddi|jd< |dd�\}}|  d|¡ |  d|¡ |dd�\}}|  d|¡ |  d	|¡ |d
d�\}}|  d|¡ |  d	|¡ |dd�\}}|  d|¡ |  d|¡ |dd�\}}|  d|¡ |  d|¡ |ddd�\}}|  d|¡ |ddd�\}}|  d|¡ |  d|¡ |  d	|¡ ddddddtƒ dddddddi|jd< |d
d�\}}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ tdd„ |D ƒƒrÛJ |ƒ‚dddddœ|jd< |d
d�\}}|  d|¡ |  d|¡ |  d |¡ |  d!|¡ td"d„ |D ƒƒ�rJ |ƒ‚|d#d�\}}|  d$|¡ |d%d�\}}|  d&|¡ |dd�\}}|  d'|¡ |d(d�\}}|  d&|¡ d)|jjj	v�rbd*di|jd< |d+d�\}}|  d*|¡ d,di|jd< |dd�\}}|  d-|¡ |  d.|¡ |  d/|¡ |  d0|¡ |  d1|¡ |d2d�\}}|  d0|¡ |  d3|¡ |  d4|¡ |d5d�\}}|  d0|¡ |d6d�\}}|  d/|¡ |d7d�\}}|  d1|¡ |  d0|¡ |d8d�\}}|  d1|¡ |  d0|¡ |d9d:d�\}}|  d/|¡ |  d1|¡ |  d-|¡ |  d0|¡ |ddd�\}}|  d0|¡ td;d„ |D ƒƒ�r#J |ƒ‚|d<dd�\}}|  d0|¡ td=d„ |D ƒƒ�r?J |ƒ‚|d>d?d�\}}|  d1|¡ td@d„ |D ƒƒ�r[J |ƒ‚|dAd:d�\}}|  d/|¡ |  d1|¡ dBdi|jd< |d7d�\}}|  d1|¡ |  d0|¡ |  dC|¡ |dDd�\}}|  dC|¡ |  d0|¡ |  d1|¡ dS )Ez.Test dictionary key completion for string keysrM   Nrv  rw  rx  ú'abc'ú'abc']úd['úabc']zd['azd["zabc"]úd["azd[]rê   )ry  rW   zd['']rõ   úabc'ZabdÚbadr  )ÚabeN)NÚabfrƒ  r„  c                 s   ó   � | ]}|  d ¡V  qdS ©)ú]r»   rµ   N©Úendswith©rc   Úmr   r   r   ró   †  ó   € z@TestCompleter.test_dict_key_completion_string.<locals>.<genexpr>)za
bza'búa"búa wordza\nbza\'br�  rŽ  c                 s   r…  r†  rˆ  rŠ  r   r   r   ró   �  rŒ  zd['a wÚwordzd['a\'r*   z"a'b"zd["a'ú-zbefore-afterzd['before-afre  z'foo'z'foo']ro  r°   r²   zd['fzfoo']zfoo"]zd['fooz	d['foo', zd['foo', 'bzd['foo', 'fz	d['foo',]é   c                 s   r…  r†  rˆ  rŠ  r   r   r   ró   Í  rŒ  zd[""]c                 s   r…  r†  rˆ  rŠ  r   r   r   ró   Ñ  rŒ  z
d["foo","]r  c                 s   r…  r†  rˆ  rŠ  r   r   r   ró   Õ  rŒ  z	d["foo",])r°   r²   Úfoobarr’  zd['foo', 'bar', 'fo)
r   r   rŒ   rŠ   r¡   r  ÚobjectÚanyrU   r®   rz  r   r   r   Útest_dict_key_completion_stringO  sÒ   
ù
z-TestCompleter.test_dict_key_completion_stringc                 C   sÎ   t ƒ }|jj}d d d d d d dœ|jd< |dd�\}}|  d|¡ |  d|¡ |  d|¡ |  d|¡ |d	d�\}}|  d
|¡ |dd�\}}|  d|¡ |  d|¡ |dd�\}}|  d|¡ |  d|¡ d S )NrY  rv  zd[1rx  r^  r_  rZ  z'1999'zd[0xdeadr]  zd[2r`  ra  zd[0b101rb  rc  ©r   r   rŒ   rŠ   r¡   r  rz  r   r   r   Ú test_dict_key_completion_numbersê  s,   úz.TestCompleter.test_dict_key_completion_numbersc              	      sš  t ƒ }|jj‰ ddi‰ˆ|jd< G ‡fdd„dƒ}||jd< ‡fdd„|jd< d	ˆi|jd
< ‡ ‡fdd„}‡ ‡fdd„}|dd� |dd� |dd� |dd� |dd� |dd� |dd� |dd� tdƒ�" t t¡� |dd� W d  ƒ n1 s~w   Y  W d  ƒ n1 s�w   Y  ‡ ‡fdd„}|dd� tƒ �" |dd� |dd� |dd� |dd� |dd� W d  ƒ dS 1 sÆw   Y  dS )z<Test expression contexts in which dict key completion occursrM   Nrv  c                       s   e Zd Z” ZdS )z:TestCompleter.test_dict_key_completion_contexts.<locals>.CN)rr   rs   rt   Údatar   ©rv  r   r   ÚC  s    rš  c                      s   ˆ S r   r   r   r™  r   r   r#     s    zATestCompleter.test_dict_key_completion_contexts.<locals>.<lambda>Úgetr‡   Únestedc                     sR   ˆ di | ¤Ž\}}ˆ  d|¡ ˆ  d|¡ ˆ  d|¡ ˆ  d|¡ ˆ  d|¡ d S )NrM   r�  r  r|  r}  r   )r  ©rL  r–   r—   ©rŒ   rl   r   r   Úassert_no_completion  s   zMTestCompleter.test_dict_key_completion_contexts.<locals>.assert_no_completionc                     s.   ˆ di | ¤Ž\}}ˆ  d|¡ ˆ d|¡ d S )Nr|  r}  r   )r¡   r  r�  rž  r   r   Úassert_completion  s   zJTestCompleter.test_dict_key_completion_contexts.<locals>.assert_completionzd['a'rx  zd["a"zd['a' + z	d['a' + 'z+ d[z(d[zC.data[znested['x'][Úminimalc                     s"   ˆ di | ¤Ž\}}ˆ  d|¡ d S )Nzget()['abc']r   )r¡   r�  rž  r   r   r   5  s   zget()[zget()['zget()['az	get()['abz
get()['abc)	r   r   rŒ   rŠ   rG   ÚpytestÚraisesr€   rD   )rl   rC   rš  rŸ  r   r   )rŒ   rv  rl   r   Ú!test_dict_key_completion_contexts  sB   










ÿ€ÿ




"ûz/TestCompleter.test_dict_key_completion_contextsc                 C   sH   t ƒ }|jj}dddœ|jd< |dd�\}}|  d|¡ |  d|¡ dS )z-Test handling of bytes in dict key completionN)rM   s   abdrv  rw  rx  r|  zb'abd'r–  rz  r   r   r   Útest_dict_key_completion_bytesA  s   z,TestCompleter.test_dict_key_completion_bytesc                 C   sº   t ƒ }|jj}ddi|jd< tjdkr |dd�\}}|  d|¡ |dd�\}}|  d|¡ tƒ �# |dd�\}}|  d	|¡ |dd�\}}|  d
|¡ W d  ƒ dS 1 sVw   Y  dS )z/Test handling of unicode in dict key completionu   a×�Nrv  rK   z
d['a\u05d0rx  Zu05d0u   d['a×�zd['a\u05d0']u   d['a×�'])r   r   rŒ   rŠ   rå   ræ   r¡   rD   rz  r   r   r   Ú$test_dict_key_completion_unicode_py3]  s   
"ùz2TestCompleter.test_dict_key_completion_unicode_py3Únumpyc              	      sˆ  ddl ‰tƒ ‰ˆjj‰ ˆjg ddgd�ˆjd< ˆ dd�\}}ˆ d	|¡ ˆ d
|¡ ˆ dddgfdg¡‰ˆjdˆd�}|d ˆjd< ˆ dd�\}}ˆ d|¡ ˆ d|¡ ‡ ‡‡‡‡fdd„}t	ƒ � |ƒ  W d  ƒ n1 sqw   Y  t
dƒ� |ƒ  W d  ƒ n1 sˆw   Y  t
dƒ�) t t¡� |ƒ  W d  ƒ n1 s¥w   Y  W d  ƒ dS W d  ƒ dS 1 s½w   Y  dS )z7Test dict key completion applies to numpy struct arraysr   N)ÚhelloÚf)Úworldr©  ©Údtyperv  r~  rx  r¨  rª  Zmy_head)Úmy_dtú>u4)Úmy_dfr®  )Úmy_dataz>f4r  rê   r!   r°  c                     sV   ˆj dˆd�ˆjd< ˆ dd�\} }ˆ tdd„ |D ƒƒ¡ ˆ tdd„ |D ƒƒ¡ d S )	Nrê   r«  rv  zd[1]['my_head']['rx  c                 S   ó   g | ]}d |v ‘qS )r­  r   rŠ  r   r   r   re   �  rË   z_TestCompleter.test_struct_array_key_completion.<locals>.completes_on_nested.<locals>.<listcomp>c                 S   r±  )r¯  r   rŠ  r   r   r   re   �  rË   )ÚzerosrŠ   rÝ   r”  )r–   r—   ©rŒ   ÚdtrC   r§  rl   r   r   Úcompletes_on_nestedŒ  s   zKTestCompleter.test_struct_array_key_completion.<locals>.completes_on_nestedZlimitedr¡  )r§  r   r   rŒ   ÚarrayrŠ   r¡   r¬  r²  rD   rG   r¢  r£  r€   )rl   r–   r—   r‡   rµ  r   r³  r   Ú test_struct_array_key_completionw  s:   ÿÿ
ÿ
ÿÿ"ÿz.TestCompleter.test_struct_array_key_completionÚpandasc                 C   sè   ddl }tƒ }|jj}| dgdgdœ¡|jd< |dd�\}}|  d	|¡ |  d
|¡ |dd�\}}|  d	|¡ |  d
|¡ |dd�\}}|  d	|¡ |dd�\}}|  d	|¡ |dd�\}}|  d	|¡ |dd�\}}|  d	|¡ dS )z5Test dict key completion applies to pandas DataFramesr   Nr!   rê   )r¨  rª  rv  r~  rx  r¨  rª  z
d.loc[:, 'zd.loc[1:, 'zd.loc[1:1, 'zd.loc[1:1:-1, 'zd.loc[::, ')r¸  r   r   rŒ   Z	DataFramerŠ   r¡   )rl   r¸  rC   rŒ   r–   r—   r   r   r   Útest_dataframe_key_completionœ  s$   z+TestCompleter.test_dataframe_key_completionc                 C   sœ   t ƒ }|jj}d|jd< g |jd< t|jd< i |jd< ddi|jd< |d	d
�\}}|dd
�\}}|dd
�\}}|dd
�\}}|dd
�\}}|dd
�\}}dS )z1Smoke test cases dict key completion can't handleNZ
no_getitemZno_keysZcant_call_keysÚemptyrM   r  rv  zno_getitem['rx  z	no_keys['zcant_call_keys['zempty['zname_error['zd['\)r   r   rŒ   rŠ   Údictrz  r   r   r   Ú!test_dict_key_completion_invalids³  s   



z/TestCompleter.test_dict_key_completion_invalidsc                 C   sF   t ƒ }tddgƒ|jd< |jjdd�\}}|  d|¡ |  d|¡ d S )NÚqwertyÚqwickZkey_completablezkey_completable['qwrx  )r   rv   rŠ   r   rŒ   r¡   ©rl   rC   r–   r—   r   r   r   Útest_object_key_completionÅ  s
   z(TestCompleter.test_object_key_completionc                 C   sN   t ƒ }tdƒ tdƒ t|jd< |jjdd�\}}|  d|¡ |  d|¡ d S )Nr½  r¾  Znamed_instance_classznamed_instance_class['qwrx  )r   rj   rŠ   r   rŒ   r¡   r¿  r   r   r   Útest_class_key_completionÍ  s   
z'TestCompleter.test_class_key_completionc                 C   s   ddl m} |dƒsJ ‚dS )z]
        Test that try-import don't crash on trailing dot, and import modules before
        r   )Ú
try_importzIPython.N)ZIPython.core.completerlibrÂ  )rl   rÂ  r   r   r   Útest_tryimport×  s   zTestCompleter.test_tryimportc                 C   ó2   t ƒ }| dd¡\}}|  d|¡ |  d|¡ d S )Nr(   z
%aimport iÚior�   ©r   rŒ   r¡   r  r¿  r   r   r   Útest_aimport_module_completerß  ó   z+TestCompleter.test_aimport_module_completerc                 C   s@   t ƒ }| d dd¡\}}|  d|¡ |  d|¡ |  d|¡ d S )Nzimport IPython.coé   zIPython.corezimport IPython.corezIPython.displayrÆ  r¿  r   r   r   Ú#test_nested_import_module_completerå  s
   z1TestCompleter.test_nested_import_module_completerc                 C   rÄ  )Nr(   zimport irÅ  r�   rÆ  r¿  r   r   r   Útest_import_module_completerì  rÈ  z*TestCompleter.test_import_module_completerc                 C   s4   t ƒ }| ddd¡\}}|  d|¡ |  d|¡ d S )NÚBzfrom io import Bé   ÚBytesIOÚBaseExceptionrÆ  r¿  r   r   r   Útest_from_module_completerò  s   z(TestCompleter.test_from_module_completerc                 C   sN   t ƒ }d|j_d|jd< d|jd< | dd¡\}}|  d|¡ |  d|¡ d S )NFrõ   Z
some_threer  Z	some_fourZs_z	print(s_fr+  r¿  r   r   r   Útest_snake_case_completionø  s   

z(TestCompleter.test_snake_case_completionc                 C   sT   t ƒ }ddlm} d|j_| |dƒ¡ | d d¡\}}|  d|¡ |  d|¡ d S )Nr   )r  FaH  
            class Test:
                def meth(self, meth_arg1):
                    print("meth")

                def meth_1(self, meth1_arg1, meth1_arg2):
                    print("meth1")

                def meth_2(self, meth2_arg1, meth2_arg2):
                    print("meth2")
            test = Test()
            z
test.meth(z
meth_arg1=zmeth2_arg1=)	r   r  r  r   r   r”   rŒ   r¡   r  )rl   rC   r  r–   r—   r   r   r   Útest_mix_terms  s   ÿÿzTestCompleter.test_mix_termsc                 C   sn   t ƒ }|j}d}tƒ �" d|_| |t|ƒ¡}|D ]}|  |jd d¡ qW d   ƒ d S 1 s0w   Y  d S )Nz%aTr   r/   )r   r   r   r   râ   r=   r    r›   )rl   rC   r   r›   râ   r9   r   r   r   Ú1test_percent_symbol_restrict_to_magic_completions  s   ÿ"ýz?TestCompleter.test_percent_symbol_restrict_to_magic_completionsc                 C   sj   t ƒ }|j}d}tƒ �  d|_dd„ | |t|ƒ¡D ƒ}|  |dg¡ W d   ƒ d S 1 s.w   Y  d S )Nr©   Tc                 S   ó   g | ]}|j ‘qS r   rã   ©rc   r
  r   r   r   re   ,  ó    ÿz<TestCompleter.test_fwd_unicode_restricts.<locals>.<listcomp>r«   )r   r   r   r   râ   r=   r    )rl   rC   r   r›   râ   r   r   r   Útest_fwd_unicode_restricts%  s   ÿ"ûz(TestCompleter.test_fwd_unicode_restrictsc                    s†   t ƒ }|j‰ ddi}||jd< d‰‡ ‡fdd„}|ƒ }|  |dg¡ tƒ }ddi|j_ˆ  |¡ |ƒ }|  d|¡ |  	t
|ƒd	¡ dS )
z7Test that dict key suppresses non-dict completion itemsrM   Nrv  r€  c                      sJ   t ƒ � dˆ _dd„ ˆ  ˆtˆƒ¡D ƒW  d   ƒ S 1 sw   Y  d S )NTc                 S   rÔ  r   rã   rÕ  r   r   r   re   =  rÖ  zLTestCompleter.test_dict_key_restrict_to_dicts.<locals>._.<locals>.<listcomp>)r   r   râ   r=   r   ©r9   r›   r   r   r–   :  s   ÿ$þz8TestCompleter.test_dict_key_restrict_to_dicts.<locals>._zIPCompleter.dict_key_matcherFr!   )r   r   rŠ   r    r   r  Úsuppress_competing_matchersr  r¡   ZassertGreaterr=   )rl   rC   rv  r–   râ   r  r   rØ  r   Útest_dict_key_restrict_to_dicts1  s   
ÿ
z-TestCompleter.test_dict_key_restrict_to_dictsc                    sB  t dd�dd„ ƒ}t ddd�dtfd	d
„ƒ}t dd�dd„ ƒ}t|||gƒ�q tƒ }|j‰ ‡ ‡fdd„}|dg d¢ƒ |ddgƒ |dddgƒ |dddgƒ ‡ fdd„}|dƒ |dg d¢ƒ |ddiƒ |dg d¢ƒ |ddiƒ |ddgƒ |ddiƒ |ddgƒ |dƒ |ddgƒ W d   ƒ d S 1 sšw   Y  d S )NÚ	a_matcher©Ú
identifierc                 S   ó   dgS ©NÚcompletion_ar   rã   r   r   r   rÛ  P  ó   z9TestCompleter.test_matcher_suppression.<locals>.a_matcherÚ	b_matcherrê   )rÝ  Úapi_versionÚcontextc                 S   s`   | j }dtdƒgi}|dkrdh|d< | d¡r.d|d< |dkr%dh|d	< |d
kr.dh|d	< |S )Nrâ   Úcompletion_bz
suppress cÚ	c_matcherÚsuppressúsuppress allTúsuppress all but cZdo_not_suppressúsuppress all but arÛ  )Útokenr   r  )rä  r›   Úresultr   r   r   râ  T  s   



z9TestCompleter.test_matcher_suppression.<locals>.b_matcherræ  c                 S   rÞ  )NÚcompletion_cr   rã   r   r   r   ræ  e  rá  z9TestCompleter.test_matcher_suppression.<locals>.c_matcherc                    ó$   dˆ _ ˆ  | ¡\}}ˆ ||¡ d S ©NF©r   rŒ   r    ©r›   rS   rš   r—   ©r9   rl   r   r   r–   m  ó   z1TestCompleter.test_matcher_suppression.<locals>._zdo not suppress)rà  rå  rí  rè  rå  rê  rà  ré  rí  c                    ó   t ƒ }| |j_ˆ  |¡ d S r   ©r   r  rÙ  r  ©Zsuppression_configr  ©r9   r   r   Ú	configurew  ó   z9TestCompleter.test_matcher_suppression.<locals>.configureFT)r   r   rH   r   r   )rl   rÛ  râ  ræ  rC   r–   rø  r   rò  r   Útest_matcher_suppressionO  s4   


"Þz&TestCompleter.test_matcher_suppressionc                    s¼   t dd�dd„ ƒ}t dd�dd„ ƒ}t||gƒ�< tƒ }|j‰ ‡ ‡fdd	„}‡ fd
d„}|dƒ |dddgƒ |dƒ |ddgƒ |d ƒ |dddgƒ W d   ƒ d S 1 sWw   Y  d S )NÚmatcher_returning_iteratorrÜ  c                 S   s
   t dgƒS )NÚcompletion_iter)Úiterrã   r   r   r   rû  Ž  rq   zXTestCompleter.test_matcher_suppression_with_iterator.<locals>.matcher_returning_iteratorÚmatcher_returning_listc                 S   rÞ  )NÚcompletion_listr   rã   r   r   r   rþ  ’  rá  zTTestCompleter.test_matcher_suppression_with_iterator.<locals>.matcher_returning_listc                    rî  rï  rð  rñ  rò  r   r   r–   š  ró  z?TestCompleter.test_matcher_suppression_with_iterator.<locals>._c                    rô  r   rõ  rö  r÷  r   r   rø  Ÿ  rù  zGTestCompleter.test_matcher_suppression_with_iterator.<locals>.configureFz---rü  rÿ  Tz--)r   rH   r   r   )rl   rû  rþ  rC   r–   rø  r   rò  r   Ú&test_matcher_suppression_with_iterator�  s    

"ëz4TestCompleter.test_matcher_suppression_with_iteratorc                    sZ   t ƒ }|j‰ dˆ _‡ fdd„}‡ ‡fdd„}|dƒ |ƒ  |dƒ |ƒ  |d ƒ |ƒ  d S )NTc                    rô  r   rõ  rö  r÷  r   r   rø  ¶  rù  zCTestCompleter.test_matcher_suppression_with_jedi.<locals>.configurec                     sN   t ƒ � dd„ ˆ  dd¡D ƒ} ˆ d| ¡ W d   ƒ d S 1 s w   Y  d S )Nc                 S   rÔ  r   rã   rÕ  r   r   r   re   ½  s    zOTestCompleter.test_matcher_suppression_with_jedi.<locals>._.<locals>.<listcomp>zdict.r  rn   )r   râ   r¡   )r—   rò  r   r   r–   »  s   "þz;TestCompleter.test_matcher_suppression_with_jedi.<locals>._Fr   )rl   rC   rø  r–   r   rò  r   Ú"test_matcher_suppression_with_jedi­  s   
z0TestCompleter.test_matcher_suppression_with_jedic                    s²   t dd�dd„ ƒ}t dd�dd„ ƒ}‡ ‡fdd	„}t||gƒ�0 tƒ }|j‰ |d
dgƒ tƒ }dg|j_ˆ  |¡ |d
gƒ g |j_ˆ  |¡ W d   ƒ d S 1 sRw   Y  d S )NrÛ  rÜ  c                 S   rÞ  rß  r   rã   r   r   r   rÛ  Ê  rá  z7TestCompleter.test_matcher_disabling.<locals>.a_matcherrâ  c                 S   rÞ  )Nrå  r   rã   r   r   r   râ  Î  rá  z7TestCompleter.test_matcher_disabling.<locals>.b_matcherc                    ó   ˆ   d¡\}}ˆ | |¡ d S ©NZcompletion_©rŒ   r    ©rS   rš   r—   rò  r   r   r–   Ò  ó   z/TestCompleter.test_matcher_disabling.<locals>._rà  rå  )r   rH   r   r   r   r  Zdisable_matchersr  )rl   rÛ  râ  r–   rC   r  r   rò  r   Útest_matcher_disablingÉ  s    




"óz$TestCompleter.test_matcher_disablingc                    s’   t dddd�dd„ ƒ}t dddd�dd	„ ƒ}‡ ‡fd
d„}t||gƒ� tƒ }|j‰ |dgƒ d|_|dgƒ W d   ƒ d S 1 sBw   Y  d S )NrÛ  r   rê   )rÝ  Úpriorityrã  c                 S   ó   t dƒgddœS )Nrà  T©râ   rç  ©r   rã   r   r   r   rÛ  æ  ó   z6TestCompleter.test_matcher_priority.<locals>.a_matcherrâ  c                 S   r	  )Nrå  Tr
  r  rã   r   r   r   râ  ê  r  z6TestCompleter.test_matcher_priority.<locals>.b_matcherc                    r  r  r  r  rò  r   r   r–   î  r  z.TestCompleter.test_matcher_priority.<locals>._rå  rõ   rà  )r   rH   r   r   Zmatcher_priority)rl   rÛ  râ  r–   rC   r   rò  r   Útest_matcher_priorityå  s   


"úz#TestCompleter.test_matcher_priorityN)Trr   rs   rt   r~   r�   r�   r˜   rœ   r£   r¤   r¨   rª   r¬   r¯   r³   r¹   r¼   rÀ   rÂ   r¢  ÚmarkÚxfailrå   ræ   rÛ   rà   rè   Úversion_infoÚreleaselevelrì   rü   r  r  r   r   r  r  r  r  r#  r$  r'  r,  r-  r.  r1  r2  r9  r<  r>  rC  rD  rG  rH  rd  rp  r{  r•  r—  r¤  r¥  r¦  ÚdecZskip_withoutr·  r¹  r¼  rÀ  rÁ  rÃ  rÇ  rÊ  rË  rÐ  rÑ  rÒ  rÓ  r×  rÚ  rú  r   r  r  r  r   r   r   r   rz   ÿ   sÔ    	
ÿ

þ

þ
#
þ

þ
ý

þ
G=	//0 :
$

	> 
þ
rz   zline,expected)()znp.Ú	attribute)znp.ranr  )znp.random.rand(np.random.ranr  )znp.random.rand(nÚglobal)zd['k.e.y.'](ranr  )zd[0].kr  )za = { 'a': np.ranr  )rØ   r  ©r[   r  )z(some_var = "this is a string with a dot.r  )z"text = 'another string with a dot.r  )zf"greeting {user.nar  )zt"welcome {guest.nar  )zf"hello {name} worlr  )zf"hello {{a.r  )zf"hello {{{a.r  )z-var = "string with \"escaped quote and a dot.r  )z'escaped = 'single \'quote\' with a dot.r  )z'multi = """This is line one
with a dot.r  )z0multi_single = '''Another
multi-line
with a dot.r  )zx = 5  # This is a commentr  )z,y = obj.method()  # Comment after dot.methodr  )zd['#'] = np.r  )z+complex_expr = (func((obj.method(param.attrr  )z$multiple_nesting = {key: [value.attrr  )z3.r  )z3.14r  )z-42.14r  )zx = func(3.14r  )zx = func(a3.r  )zx = func(a3.12r  )z3.1.r  )z-3.1.r  )z(3).r  r  )zstr_with_code = "x.attrr  )zf"formatted {obj.attrr  )zf"formatted {obj.attr}r  )z-dict_with_dots = {'key.with.dots': value.attrr  )zd[f'{a}']['{a.r  c                 C   ó4   t ƒ }|jj}|| ƒ}|j|ksJ d| › d�ƒ‚dS )zTest completion contextúFailed on input: 'rµ   N©r   r   Z_determine_completion_contextÚvalue©rX   rS   rC   Zget_contextrì  r   r   r   Útest_completion_contextû  s   8r  z$Completion context not yet supportedrÃ   zline, expected))zf'{f'a.r  )z3a.r  )z$).r  c                 C   r  )z#Test unsupported completion contextr  rµ   Nr  r  r   r   r   Ú#test_unsupported_completion_context9  s   r  z setup,code,expected,not_expectedza="str"; b=1z(a, b.z
.bit_countz
.conjugatez.countz(a, b).z.capitalizezx="str"; y=1z
x = {1, y.z
x = [1, y.zx="str"; y=1; fun=lambda x:xzx = fun(1, y.c              	   C   sÂ   t ƒ }|j}| | ¡ tƒ �I tdƒ�, | |¡}t|ƒt|ƒ tƒ ks*J t|ƒƒ‚t|ƒ t|ƒ¡tƒ ks8J ‚W d   ƒ n1 sBw   Y  W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S rï  )r   r   r”   r   r   rë   rß   Úintersection)ÚsetupÚcoderS   Znot_expectedrC   r9   r—   r   r   r   Útest_misc_no_jedi_completionsJ  s   

"Pýr   zcode,expected)	)z (a, br*   )z(a, br*   )ú(a, b)r[   )z (a, b)r!  )z [a, b]z[a, b])z a, br*   )z	x = {1, yr`   )z	x = [1, yr`   )zx = fun(1, yr`   c                 C   s   t ƒ j}| | ¡|ksJ ‚d S r   )r   r   Z
_trim_expr)r  rS   r9   r   r   r   Útest_trim_expr^  s   r"  zinput, expectedz1.234z+1z-1z-1.0z-1.z+1.z.1z1..z..z.1.z,1rÅ   z, 1z, .1z, +.1z+.1z.1 Z0b_0011_1111_0100_1110r]  Z0b_1110_0101z1 + 1z, 1 + 1c                 C   s   t | ƒ|ksJ ‚d S r   )r   )r�   rS   r   r   r   Ú'test_match_numeric_literal_for_dict_keyq  s    r#  )AÚ__doc__rÑ   r¢  rå   r  Zunittestrž   Úimportlib.metadatar   Ú
contextlibr   Ztraitlets.config.loaderr   ZIPythonr   ZIPython.corer   ZIPython.utils.tempdirr   r   ZIPython.utils.genericsr	   ZIPython.testingr
   r  ZIPython.core.latex_symbolsr   ZIPython.core.completerr   r   r   r   r   r   r   r   r   r   Zpackaging.versionr   Úboolr   r<   rB   rD   rb   rG   rH   ræ   Úpairsr  ZparametrizerT   rZ   ri   rj   rv   ZTestCaserz   r  r  r  r   r"  r#  r   r   r   r   Ú<module>   sÊ   0)!




	

            þ
6þûþ


þ
æþ