o
    û›h+µ  ã                   @   sP  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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 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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& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z/ ddl-m0Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ej$G dd„ dej!ƒƒZ?dd„ Z@dd„ ZAdd „ ZBd!d"„ ZCd#d$„ ZDd%d&„ ZEd'd(„ ZFd)d*„ ZGd+d,„ ZHd-d.„ ZId/d0„ ZJd1d2„ ZKd3d4„ ZLd5d6„ ZMd7d8„ ZNd9d:„ ZOd;d<„ ZPd=d>„ ZQe/jRd?d@„ ƒZSdAdB„ ZTdCdD„ ZUdEdF„ ZVdGdH„ ZWG dIdJ„ dJeƒZXdKdL„ ZYdMdN„ ZZdOdP„ Z[dQdR„ Z\e/j]dSdT„ ƒZ^dUdV„ Z_dWdX„ Z`dYdZ„ Zad[d\„ Zbd]d^„ Zcd_d`„ Zddadb„ Zedcdd„ Zfdedf„ Zgdgdh„ Zhdidj„ Zidkdl„ Zjdmdn„ ZkG dodp„ dpe1jlƒZmdqdr„ Zndsdt„ Zodudv„ Zpdwdx„ Zqdydz„ Zrd{d|„ Zsd}d~„ Ztdd€„ Zud�d‚„ Zvdƒd„„ Zwd…d†„ Zxd‡dˆ„ Zye/ ze)j{du ¡d‰dŠ„ ƒZ|e/ ze)j{du ¡d‹dŒ„ ƒZ}d�dŽ„ Z~d�d�„ ZG d‘d’„ d’eƒZ€G d“d”„ d”eƒZ�d•d–„ Z‚e/j]d—d˜„ ƒZƒe/j]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“d¹dº„ Z”d»d¼„ Z•e$G d½d¾„ d¾e!ƒƒZ–d¿dÀ„ Z—dÁdÂ„ Z˜dÃdÄ„ Z™dÅdÆ„ ZšdÇdÈ„ Z›dÉdÊ„ Zœ		Ë		dê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äZ©dådæ„ ZªdçZ«dèdé„ Z¬dS )ëz"Tests for various magic functions.é    N)Úinvalidate_caches)ÚStringIO)ÚPath)Úsleep)ÚThread)ÚCalledProcessError)Údedent)ÚTestCaseÚmock)Úget_ipython)Úmagic)Ú
UsageError)ÚMagicsÚ
cell_magicÚ
line_magicÚmagics_classÚregister_cell_magicÚregister_line_magic)ÚcodeÚ	executionÚloggingÚosmÚscript)Ú
decorators)Útools)Úcapture_output)Úfind_cmd)ÚTemporaryDirectoryÚTemporaryWorkingDirectory)Úprepended_to_syspathé   )ÚPdbTestInput)ÚNamedTemporaryFilec                   @   s   e Zd ZdS )ÚDummyMagicsN)Ú__name__Ú
__module__Ú__qualname__© r'   r'   úSc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/tests/test_magic.pyr#   0   s    r#   c                  C   s*   d} g d¢}t t | ¡ƒ}||ksJ ‚d S )Nz#1 3 5-6 7-9 10:15 17: :10 10- -13 :)
)r   r    )é   é   )é   é   )r,   é	   )r-   é   )é   N)Nr-   )r-   N)Né   )NN)Úlistr   Zextract_code_ranges)ÚinstrÚexpectedÚactualr'   r'   r(   Útest_extract_code_ranges3   s   r5   c                  C   sp   d} g d¢}g dgfdgg fdgg fddgg fdgdgfg dgfg}t ||ƒD ]\}}t | |¡|ks5J ‚q'd S )Nz;import foo
a = 10
def b():
    return 42


class A: pass


)ÚaÚbÚAzA,bzA,aÚzr6   zdef b():
    return 42
zclass A: pass
r9   )Úzipr   Úextract_symbols)ÚsourceZsymbols_argsr3   ÚsymbolsÚexpr'   r'   r(   Útest_extract_symbolsD   s   

ûÿr?   c                  C   s@   d} t  t¡� t | d¡ W d   ƒ d S 1 sw   Y  d S )Nz==begin A Ruby program :)=end
def hello
puts 'Hello world'
endÚhello)ÚpytestÚraisesÚSyntaxErrorr   r;   )r<   r'   r'   r(   Ú:test_extract_symbols_raises_exception_with_non_python_codeQ   s   "ÿrD   c                  C   sT   t  t¡� t dd¡ W d   ƒ n1 sw   Y  t d¡} t| jtƒs(J ‚d S )NÚdoesntexistÚ z%doesntexist)rA   rB   r   Ú_ipÚrun_line_magicÚrun_cellÚ
isinstanceÚerror_in_exec©Úresultr'   r'   r(   Útest_magic_not_foundZ   s
   ÿ
rN   c                  C   sV   t  t¡� t ddd¡ W d   ƒ n1 sw   Y  t d¡} t| jtƒs)J ‚d S )NrE   ÚlineÚcellz%%doesntexist)rA   rB   r   rG   Úrun_cell_magicrI   rJ   rK   rL   r'   r'   r(   Útest_cell_magic_not_foundd   s
   ÿ
rR   c                  C   s0   dd„ } t  | ¡ t  d¡}t|jtƒsJ ‚d S )Nc                 S   s   dd  d S )Nr    r   r'   ©Úshellr'   r'   r(   Úfailo   s   z%test_magic_error_status.<locals>.failz%fail)rG   Úregister_magic_functionrI   rJ   rK   ÚZeroDivisionError)rU   rM   r'   r'   r(   Útest_magic_error_statusn   s   

rX   c                   C   ó   t  dd¡ dS )z¶ test that config magic does not raise
    can happen if Configurable init is moved too early into
    Magics.__init__ as then a Config object will be registered as a
    magic.
    ÚconfigrF   N©rG   rH   r'   r'   r'   r(   Útest_configv   s   r\   c                  C   sf   t ƒ �} t dd¡ W d  ƒ n1 sw   Y  | j}| ¡  d¡dd… }|tt|ƒƒks1J ‚dS )zQ test that config magic prints available configs in unique and
    sorted order. rZ   rF   NÚ
r    )r   rG   rH   ÚstdoutÚstripÚsplitÚsortedÚset)Úcapturedr^   Zconfig_classesr'   r'   r(   Útest_config_available_configs€   s   ÿrd   c                  C   s^   t ƒ �} t dd¡ W d  ƒ n1 sw   Y  | j}t d| ¡ d ¡s-J |› d�ƒ‚dS )z? test that config with a classname prints the class's options. rZ   ÚTerminalInteractiveShellNz"TerminalInteractiveShell.* optionsr   zB

1st line of stdout not like 'TerminalInteractiveShell.* options')r   rG   rH   r^   ÚreÚmatchÚ
splitlines)rc   r^   r'   r'   r(   Útest_config_print_classŠ   s   ÿÿþri   c                  C   sn   t j ¡  t jd= t  dd¡ tt jjƒdksJ ‚t jjD ]
\} }d| vs'J ‚qt jd }t|ƒdks5J ‚d S )NZ
syscmdlistZrehashxrF   é
   Ú.)rG   Zalias_managerZclear_aliasesÚdbrH   ÚlenÚaliases)ÚnameÚcmdZscomsr'   r'   r(   Útest_rehashx•   s   

rq   c                  C   sN   t ƒ } d}t| ƒ}| d| d¡d }tjdkrd}n|}|d |ks%J ‚dS )	z;Test that we don't mangle paths when parsing magic options.zc:\xz-f %szf:r   Úposixzc:xÚfN)r   r#   Úparse_optionsÚosro   )ÚipÚpathÚmÚoptsr3   r'   r'   r(   Útest_magic_parse_options§   s   
rz   c                  C   sN   t ƒ } t| ƒ}| dddd¡\}}d|v sJ ‚d|v sJ ‚|d dks%J ‚dS )z5Magic.parse_options can handle --foo=bar long optionsz--foo --bar=bubbler6   Úfoozbar=ÚbarZbubbleN)r   r#   rt   )rv   rx   ry   Ú_r'   r'   r(   Útest_magic_parse_long_optionsµ   s   r~   c                   C   ó   dS )zÒTest %hist -f with temporary filename.

    In [9]: import tempfile

    In [10]: tfile = tempfile.mktemp('.py','tmp-ipython-')

    In [11]: %hist -nl -f $tfile 3

    In [13]: import os; os.unlink(tfile)
    Nr'   r'   r'   r'   r(   Údoctest_hist_f¿   ó    r€   c                   C   r   )a¦  Test %hist -op

    In [1]: class b(float):
       ...:     pass
       ...:

    In [2]: class s(object):
       ...:     def __str__(self):
       ...:         return 's'
       ...:

    In [3]:

    In [4]: class r(b):
       ...:     def __repr__(self):
       ...:         return 'r'
       ...:

    In [5]: class sr(s,r): pass
       ...:

    In [6]:

    In [7]: bb=b()

    In [8]: ss=s()

    In [9]: rr=r()

    In [10]: ssrr=sr()

    In [11]: 4.5
    Out[11]: 4.5

    In [12]: str(ss)
    Out[12]: 's'

    In [13]:

    In [14]: %hist -op
    >>> class b:
    ...     pass
    ...
    >>> class s(b):
    ...     def __str__(self):
    ...         return 's'
    ...
    >>>
    >>> class r(b):
    ...     def __repr__(self):
    ...         return 'r'
    ...
    >>> class sr(s,r): pass
    >>>
    >>> bb=b()
    >>> ss=s()
    >>> rr=r()
    >>> ssrr=sr()
    >>> 4.5
    4.5
    >>> str(ss)
    's'
    >>>
    Nr'   r'   r'   r'   r(   Údoctest_hist_opÌ   r�   r‚   c                  C   sn   t ƒ } | jddd� tƒ � }tj |d¡}|  dd| ¡ tj |¡s%J ‚W d   ƒ d S 1 s0w   Y  d S )Nz1+2T©Zstore_historyzhist.pyÚhistoryz-pof %s)r   rI   r   ru   rw   ÚjoinrH   Úisfile)rv   ÚtdÚtfr'   r'   r(   Útest_hist_pof  s   "ýr‰   c                  C   s~   t ƒ } | j ¡  g d¢}t|dd�D ]\}}| j ||¡ q|  dd¡ | jd jd |¡d ks3J ‚d|  dd¡v s=J ‚d S )	N)úa=1údef b():
  return a**2zprint(a,b())r    ©ÚstartÚmacroztest 1-3Útestr]   rF   )	r   Úhistory_managerÚresetÚ	enumerateÚstore_inputsrH   Úuser_nsÚvaluer…   )rv   ÚcmdsÚirp   r'   r'   r(   Ú
test_macro  s   
r˜   c                  C   s²   t ƒ } | j ¡  g d¢}|D ]	}| j|dd� q| jd jdks"J ‚t d¡� |  d¡ W d  ƒ n1 s7w   Y  t d¡� |  d¡ W d  ƒ dS 1 sRw   Y  dS )	z5Test that we can run a multi-line macro successfully.)za=10za+=1zprint(a)z%macro test 2-3Trƒ   r�   za+=1
print(a)
Z12NÚ13)r   r�   r‘   rI   r”   r•   ÚttÚAssertPrints)rv   r–   rp   r'   r'   r(   Útest_macro_run&  s   
ÿ"ÿrœ   c                  C   sf   t ƒ } tƒ �}|  dd¡ W d  ƒ n1 sw   Y  |j}d|v s%J ‚d|v s+J ‚d|v s1J ‚dS )zTest %magicr   rF   Nz%magicÚIPythonZ	Available)r   r   rH   r^   )rv   rc   r^   r'   r'   r(   Útest_magic_magic4  s   ÿrž   c                   C   s@   t  d¡ t  d¡ dt jv sJ ‚t  dd¡ dt jvsJ ‚dS )z!Test '%reset array' functionalityzimport numpy as npza = np.empty(2)r6   r‘   z-f arrayN)rG   Úexr”   rH   r'   r'   r'   r(   Útest_numpy_reset_array_undec@  s
   

r    c                   C   sn   t jddd� t jddd� ddd„ dD ƒv sJ ‚t  d	d
¡ ddd„ dD ƒvs*J ‚tt jd ƒdks5J ‚dS )zTest '%reset out' magiczparrot = 'dead'Trƒ   ÚparrotZdeadc                 S   ó   g | ]}t j| ‘qS r'   ©rG   r”   ©Ú.0Úxr'   r'   r(   Ú
<listcomp>O  ó    z"test_reset_out.<locals>.<listcomp>)r}   Ú__Z___r‘   z-f outc                 S   r¢   r'   r£   r¤   r'   r'   r(   r§   Q  r¨   ZOutr   N)rG   rI   rH   rm   r”   r'   r'   r'   r(   Útest_reset_outJ  s   rª   c                   C   sd   t jddd� ddd„ dD ƒv sJ ‚t  dd¡ dd	d„ dD ƒvs#J ‚ttt jd
 ƒƒdks0J ‚dS )zTest '%reset in' magicr¡   Trƒ   c                 S   r¢   r'   r£   r¤   r'   r'   r(   r§   Y  r¨   z!test_reset_in.<locals>.<listcomp>)Z_iZ_iiZ_iiir‘   z-f inc                 S   r¢   r'   r£   r¤   r'   r'   r(   r§   [  r¨   ÚInr    N)rG   rI   rH   rm   rb   r”   r'   r'   r'   r(   Útest_reset_inU  s
   r¬   c                   C   sr   t  d¡ t  dtj tj¡¡ t  dd¡ tt j	d ƒdks!J ‚t  dd¡ tt j	d ƒdks2J ‚t  d¡ d	S )
zTest '%reset dhist' magicztmp = [d for d in _dh]Úcdú-Z_dhr   r‘   z-f dhistz_dh = [d for d in tmp]N)
rG   rI   rH   ru   rw   ÚdirnamerA   Ú__file__rm   r”   r'   r'   r'   r(   Útest_reset_dhist_  s   
r±   c                   C   s6   t  d¡ t  d¡ tt jd ƒt jjd ksJ ‚dS )z+Test that '%reset in' preserves In[] lengthzprint 'foo'zreset -f inr«   r    N)rG   rI   rm   r”   ÚdisplayhookZprompt_countr'   r'   r'   r(   Útest_reset_in_lengthj  s   

"r³   c                   @   ó   e Zd Zdd„ ZdS )ÚTestResetErrorsc                 C   s˜   t G dd„ dtƒƒ}t |¡ |  ¡ �}dd l}| ¡ }| d¡ t d¡ W d   ƒ n1 s0w   Y  t	|j
ƒdks>J ‚|j
D ]}d|vsIJ ‚qAd S )Nc                   @   ó   e Zd Zedd„ ƒZdS )z9TestResetErrors.test_reset_redefine.<locals>.KernelMagicsc                 S   s   d S ©Nr'   )ÚselfrT   r'   r'   r(   Úlessw  ó   z>TestResetErrors.test_reset_redefine.<locals>.KernelMagics.lessN)r$   r%   r&   r   r¹   r'   r'   r'   r(   ÚKernelMagicsu  s    r»   r   ZNothingzreset -fr    zInvalid alias)r   r   rG   Úregister_magicsZ
assertLogsr   Ú	getLoggerÚinforI   rm   Úoutput)r¸   r»   ÚcmZlog_modÚlogÚoutr'   r'   r(   Útest_reset_redefines  s   


ø

ÿz#TestResetErrors.test_reset_redefineN)r$   r%   r&   rÃ   r'   r'   r'   r(   rµ   q  s    rµ   c                  C   sj   t ƒ } |  d¡ tj}ztƒ t_|  d¡ tj ¡ }W |t_n|t_w | ¡  ¡ d  ¡ }|dks3J ‚dS )ztest %tb after a SyntaxErrorÚforz%tbéÿÿÿÿzSyntaxError: invalid syntaxN)	r   rI   Úsysr^   r   ÚgetvalueÚrstriprh   r_   )rv   Zsave_stdoutrÂ   Ú	last_liner'   r'   r(   Útest_tb_syntaxerrorŠ  s   

rÊ   c               	   C   s¼   t ƒ } t d¡� |  d¡ W d   ƒ n1 sw   Y  |  d¡ t d¡�- tjddd�� |  d¡ W d   ƒ n1 s?w   Y  W d   ƒ d S W d   ƒ d S 1 sWw   Y  d S )NúWall time: ú
%time Nonez%def f(kmjy):
    %time print (2*kmjy)ZhihiF©Úsuppresszf('hi')©r   rš   r›   rI   ©rv   r'   r'   r(   Ú	test_timeœ  s   ÿ
ÿÿ"ÿrÑ   c               
   C   sæ  t ƒ } t d¡�; tjddd��$ tjddd�� |  d¡ W d   ƒ n1 s(w   Y  W d   ƒ n1 s7w   Y  W d   ƒ n1 sFw   Y  t d¡�; tjddd��$ tjddd�� |  d¡ W d   ƒ n1 spw   Y  W d   ƒ n1 sw   Y  W d   ƒ n1 sŽw   Y  t d¡�; tjddd��$ tjddd�� |  d¡ W d   ƒ n1 s¸w   Y  W d   ƒ n1 sÇw   Y  W d   ƒ n1 sÖw   Y  t d¡�= tjddd��% tjddd�� |  d	¡ W d   ƒ n	1 �sw   Y  W d   ƒ n	1 �sw   Y  W d   ƒ n	1 �s!w   Y  t d¡�= tjddd��% tjddd�� |  d
¡ W d   ƒ n	1 �sLw   Y  W d   ƒ n	1 �s\w   Y  W d   ƒ n	1 �slw   Y  t d¡�= tjddd��% tjddd�� |  d¡ W d   ƒ n	1 �s—w   Y  W d   ƒ n	1 �s§w   Y  W d   ƒ n	1 �s·w   Y  t d¡�= tjddd��% tjddd�� |  d¡ W d   ƒ n	1 �sâw   Y  W d   ƒ n	1 �sòw   Y  W d   ƒ n	1 �sw   Y  t d¡�= tjddd��% tjddd�� |  d¡ W d   ƒ n	1 �s-w   Y  W d   ƒ n	1 �s=w   Y  W d   ƒ n	1 �sMw   Y  t d¡�= tjddd��% tjddd�� |  d¡ W d   ƒ n	1 �sxw   Y  W d   ƒ n	1 �sˆw   Y  W d   ƒ n	1 �s˜w   Y  t d¡�F tjddd��% tjddd�� |  d¡ W d   ƒ n	1 �sÃw   Y  W d   ƒ n1 �sÓw   Y  W d   ƒ d S W d   ƒ d S 1 �sìw   Y  d S )Nz 123456rË   FrÍ   zCPU times: z%time 123000+456z%time 123000+456;z%time 123000+456 # Commentz%time 123000+456; # Commentz%time 123000+456 # ;CommentZ123456z%%time
123000+456


z%%time
123000+456;


z%%time
123000+456  # Comment


z %%time
123000+456;  # Comment


z %%time
123000+456  # ;Comment


)r   rš   r›   rI   ÚAssertNotPrintsrÐ   r'   r'   r(   Ú"test_time_no_output_with_semicolon¬  s¸   ÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ÿ€ÿÿ€ ÿÿ$ÿrÓ   c                   C   sB   t  d¡ t jd dksJ ‚t jd= t jd dksJ ‚t jd= d S )Nz%%time
var_1 = 1
var_2 = 2
Zvar_1r    Zvar_2r)   )rv   rI   r”   r'   r'   r'   r(   Útest_time_last_not_expressionä  s
   
rÔ   c                  C   s@   t ƒ } t d¡� |  d¡ W d   ƒ d S 1 sw   Y  d S )NzCPU times: user rÌ   rÏ   rÐ   r'   r'   r(   Ú
test_time2î  s   "ÿrÕ   c                  C   sR   t ƒ } | j dd¡ tjddd�� |  d¡ W d  ƒ dS 1 s"w   Y  dS )z-Erroneous magic function calls, issue gh-3334ÚrunNz	not foundÚstderr)Zchannelz%%time
run = 0
run += 1)r   r”   Úpoprš   rÒ   rI   rÐ   r'   r'   r(   Ú
test_time3õ  s
   "ÿrÙ   c                  C   s8   t ƒ } | j dd¡ |  tdƒ¡ | jd dksJ ‚dS )z2Make sure last statement from time return a value.rÖ   NzF        %%time
        a = "ho"
        b = "hey"
        a+b
        r}   Zhohey)r   r”   rØ   rI   r   Zuser_ns_hiddenrÐ   r'   r'   r(   Útest_multiline_timeÿ  s   ÿÿ
rÚ   c                  C   s.   t ƒ } |  d¡ | jd dksJ ‚| jd= dS )zL
    Test that local_ns is actually global_ns when running a cell magic
    z%%time
myvar = 1Zmyvarr    N)r   rI   r”   rÐ   r'   r'   r(   Útest_time_local_ns  s   
rÛ   c                   C   sš   t  dtjtƒ dd�¡� t d¡dksJ ‚W d  ƒ n1 s w   Y  t  dtjtƒ dd�¡� t d¡dks;J ‚W d  ƒ dS 1 sFw   Y  dS )	z#Ensure ASCII is used when necessaryz
sys.stdoutúutf-8©Úencodingg�íµ ÷Æ°>u   1 Î¼sNÚasciiz1 us)r
   ÚpatchÚioÚTextIOWrapperr   r   Z_format_timer'   r'   r'   r(   Útest_time_microseconds_display  s   ÿ"ÿrã   c                  C   s   t ƒ } |  d¡ tjddd�� |  d¡ W d   ƒ n1 sw   Y  tjddd�� |  d¡ W d   ƒ n1 s;w   Y  tjddd�� |  d¡ W d   ƒ n1 sWw   Y  |  d	¡ tjd
dd�� |  d¡ W d   ƒ d S 1 syw   Y  d S )Nz%%capture abc
1+2ÚTrueFrÍ   z'abc' in locals()z'outputs' in dir(abc)Ú3zabc.outputs[0]z%%capture abc
7+8;ÚFalse)r   rI   rš   r›   rÐ   r'   r'   r(   Útest_capture$  s   
ÿÿÿ
"ÿrç   c                   C   s   t  dd¡ t  dd¡ dS )zEToggle doctest_mode twice, it should be a no-op and run without errorZdoctest_moderF   Nr[   r'   r'   r'   r(   Útest_doctest_mode6  s   rè   c                  C   s<   t tƒ} |  dd¡d dksJ ‚|  dd¡d dksJ ‚dS )z*Tests for basic options parsing in magics.r{   rF   r    N©r#   rG   rt   )rx   r'   r'   r(   Útest_parse_options<  s   rê   c                  C   s>   t tƒ} | jdddd�\}}|dddœksJ ‚|dksJ ‚d	S )
z[Test to assert preservation of non-option part of magic-block, while parsing magic options.z -n1  -r 13 _ = 314 + foozn:r:T)Zpreserve_non_optsÚ1r™   )ÚnÚrz_ = 314 + fooNré   )rx   ry   Ústmtr'   r'   r(   Ú-test_parse_options_preserve_non_option_stringE  s   
ÿrï   c                   C   s0   g t jd< t  dd¡ t jd dggksJ ‚dS )zSTest to assert preservation of non-option part of magic-block, while running magic.ÚspacesÚtimeitz;-n1 -r1 spaces.append([s.count(' ') for s in ['document']])r   N©rG   r”   rH   r'   r'   r'   r(   Ú"test_run_magic_preserve_code_blockO  s
   
ÿró   c               	   C   sª   t j} t  ¡ }t j tj¡}z@t dd| ¡ | ƒ |ksJ ‚t dd¡ | ƒ |ks+J ‚t dd| ¡ | ƒ |ks:J ‚t dd¡ | ƒ |ksGJ ‚W t  |¡ dS t  |¡ w )z+Test various directory handling operations.r­   ú"%s"r®   ZpushdZpopdrF   N)ru   Úgetcwdrw   ÚrealpathrG   Úipython_dirrH   Úchdir)ZcurpathÚstartdirÚipdirr'   r'   r(   Útest_diropsX  s   rû   c               	   C   sÆ   dt jj_tjt d�} t ¡ }tj t j	¡}zFt
 |¡� |  d| ¡ W d  ƒ n1 s.w   Y  t
 |¡� |  d¡ W d  ƒ n1 sHw   Y  W t |¡ dS W t |¡ dS t |¡ w )z#Test OSMagics.cd_force_quiet optionTrS   rô   Nr®   )rG   rZ   ZOSMagicsZcd_force_quietr   ru   rõ   rw   rö   r÷   rš   rÒ   r­   rø   )Zosmagicsrù   rú   r'   r'   r(   Útest_cd_force_quietk  s   
ÿÿýrü   c                  C   s6   t jj} tdƒD ]}t  dd¡ qt jj| ksJ ‚d S )Nr+   ÚxmoderF   )rG   ZInteractiveTBÚmodeÚrangerH   )rý   r—   r'   r'   r(   Ú
test_xmode|  s   r   c                     sX   g ‰ G ‡ fdd„dt ƒ} | ƒ tjd< t d¡ ˆ g ksJ ‚t dd¡ ˆ dgks*J ‚d S )Nc                       s    e Zd Z‡ fdd„Zdd„ ZdS )ztest_reset_hard.<locals>.Ac                    s   ˆ   d¡ d S ©Nr    )Úappend©r¸   ©Úmonitorr'   r(   Ú__del__†  s   z"test_reset_hard.<locals>.A.__del__c                 S   r   )Nz<A instance>r'   r  r'   r'   r(   Ú__repr__ˆ  rº   z#test_reset_hard.<locals>.A.__repr__N)r$   r%   r&   r  r  r'   r  r'   r(   r8   …  s    r8   r6   r‘   z-fr    )ÚobjectrG   r”   rI   rH   ©r8   r'   r  r(   Útest_reset_hardƒ  s   
r
  c                   @   r´   )ÚTestXdelc                 C   sj   d}|   |¡ t dd| j ¡ t d¡ tjd j}|g ks!J ‚t dd¡ t d¡ |dgks3J ‚d	S )
z3Test that references from %run are cleared by xdel.z`class A(object):
    monitor = []
    def __del__(self):
        self.monitor.append(1)
a = A()
rÖ   ú%sr6   r8   Zxdelr   r    N)	ZmktmprG   rH   ÚfnamerI   r”   r  ÚgcZcollect)r¸   Úsrcr  r'   r'   r(   Ú	test_xdel“  s   


zTestXdel.test_xdelN)r$   r%   r&   r  r'   r'   r'   r(   r  ’  ó    r  c                   C   r   )a_  doctest for %who

    In [1]: %reset -sf

    In [2]: alpha = 123

    In [3]: beta = 'beta'

    In [4]: %who int
    alpha

    In [5]: %who str
    beta

    In [6]: %whos
    Variable   Type    Data/Info
    ----------------------------
    alpha      int     123
    beta       str     beta

    In [7]: %who_ls
    Out[7]: ['alpha', 'beta']
    Nr'   r'   r'   r'   r(   Údoctest_who©  r�   r  c                  C   s,   G dd„ dt ƒ} | ƒ tjd< t dd¡ dS )z@Check that whos is protected against objects where repr() fails.c                   @   r´   )ztest_whos.<locals>.Ac                 S   s   t ƒ ‚r·   )Ú	Exceptionr  r'   r'   r(   r  Å  s   ztest_whos.<locals>.A.__repr__N)r$   r%   r&   r  r'   r'   r'   r(   r8   Ä  r  r8   r6   ZwhosrF   N)r  rG   r”   rH   r	  r'   r'   r(   Ú	test_whosÂ  s   r  c                   C   r   )a"  doctest for %precision

    In [1]: f = get_ipython().display_formatter.formatters['text/plain']

    In [2]: %precision 5
    Out[2]: '%.5f'

    In [3]: f.float_format
    Out[3]: '%.5f'

    In [4]: %precision %e
    Out[4]: '%e'

    In [5]: f(3.1415927)
    Out[5]: '3.141593e+00'
    Nr'   r'   r'   r'   r(   Údoctest_precisionÊ  r�   r  c                   C   r   )z¿Test debugging a small code with %debug

    In [1]: with PdbTestInput(['c']):
       ...:     %debug print("a b") #doctest: +ELLIPSIS
       ...:
    ...
    ipdb> c
    a b
    In [2]:
    Nr'   r'   r'   r'   r(   Útest_debug_magicÝ  r�   r  c                   C   r   )a  Test debugging a small code with %debug with locals

    In [1]: with PdbTestInput(['c']):
       ...:     def fun():
       ...:         res = 1
       ...:         %debug print(res)
       ...:     fun()
       ...:
    ...
    ipdb> c
    1
    In [2]:
    Nr'   r'   r'   r'   r(   Útest_debug_magic_localsê  r�   r  c                   C   sn   t  d¡� t d¡ W d   ƒ n1 sw   Y  t  d¡� t d¡ W d   ƒ d S 1 s0w   Y  d S )Nzdict.fromkeysz	dict.fr*?u   Ï€.is_integeru   Ï€ = 3.14;
Ï€.is_integ*?)rš   r›   rG   rI   r'   r'   r'   r(   Útest_psearchù  s   ÿ"ÿr  c                   C   sV   t  d¡ t  dd¡ t  dd¡ t  dd¡ t  dd¡ t  dd¡ t  dd¡ d	S )
z%test shlex issues with timeit (#1109)zdef f(*a,**kw): passrñ   z-n1 "this is a bug".count(" ")z-r1 -n1 f(" ", 1)z-r1 -n1 f(" ", 1, " ", 2, " ")z-r1 -n1 ("a " + "b")z-r1 -n1 f("a " + "b")z-r1 -n1 f("a " + "b ")N)rG   rŸ   rH   r'   r'   r'   r(   Útest_timeit_shlexÿ  s   
r  c                  C   óN   t dd„ ƒ} t dd¡ tjd dksJ ‚t ddd¡ tjd d	ks%J ‚d
S )z)Test %%timeit with IPython special syntaxc                 S   ó   t ƒ }| |jd< d S ©NÚ
lmagic_out©r   r”   ©rO   rv   r'   r'   r(   Úlmagic  ó   z*test_timeit_special_syntax.<locals>.lmagicrñ   z-n1 -r1 %lmagic my liner  úmy linez-n1 -r1ú%lmagic my line2úmy line2N©r   rG   rH   r”   rQ   ©r   r'   r'   r(   Útest_timeit_special_syntax
  s   
r'  c                  C   s   t  dd¡} | dusJ ‚dS )z.
    test whether timeit -o return object
    rñ   z-n10 -r10 -o 1Nr[   ©Úresr'   r'   r(   Útest_timeit_return  s   r*  c                   C   s:   t  d¡� t d¡ W d  ƒ dS 1 sw   Y  dS )z+
    test quiet option of timeit magic
    Úloopsz%timeit -n1 -r1 -q 1N)rš   rÒ   rG   rI   r'   r'   r'   r(   Útest_timeit_quiet!  s   "ÿr,  c                  C   sF   t  d¡� t dd¡} W d   ƒ n1 sw   Y  | d us!J ‚d S )Nr+  rñ   z-n1 -r1 -q -o 1)rš   rÒ   rG   rH   r(  r'   r'   r(   Útest_timeit_return_quiet(  s   ÿr-  c                   C   s<   t  t¡� t dd¡ W d   ƒ d S 1 sw   Y  d S )Nrñ   Úreturn)rA   rB   rC   rG   rH   r'   r'   r'   r(   Útest_timeit_invalid_return-  s   "ÿr/  c                  C   r  )z'Test %%prun with IPython special syntaxc                 S   r  r  r  r  r'   r'   r(   r   4  r!  z(test_prun_special_syntax.<locals>.lmagicÚprunz-q %lmagic my liner  r"  z-qr#  r$  Nr%  r&  r'   r'   r(   Útest_prun_special_syntax1  s   
r1  c                   C   s"   t  dd¡ t jd dksJ ‚dS )z9Test that prun does not clobber string escapes (GH #1302)r0  z-q x = '\t'r¦   ú	N)rG   rH   r”   r'   r'   r'   r(   Útest_prun_quotesA  s   r3  c               	   C   sÐ   t dƒ tjD ]} t d| ƒ qt dt ¡ ƒ t ttj	dd¡ tj 
tj t¡d¡}tj d|¡ z/tj dd ¡ tƒ  t 	dd¡ tjd dksKJ ‚t 	d	d¡ dtjvsXJ ‚W tj |¡ d S tj |¡ w )
Nz	sys.path:ú ZCWDÚload_extZdaft_extensionr   Zarqé¹   Z
unload_ext)ÚprintrÆ   rw   ru   rõ   rA   rB   ÚImportErrorrG   rH   r…   r¯   r°   Úinsertr”   rØ   r   Úremove)ÚpZ	daft_pathr'   r'   r(   Útest_extensionH  s   
r<  c                  C   s�   t  d¡ tƒ } | j ¡  g d¢}t|dd�D ]\}}| j ||¡ qtƒ �}tj	 
|d¡}|  dd| ¡ W d   ƒ d S 1 sAw   Y  d S )NZnbformat)rŠ   r‹   u   print('noÃ«l, Ã©tÃ©', b())r    rŒ   znb.ipynbÚnotebookr  )rA   Zimportorskipr   r�   r‘   r’   r“   r   ru   rw   r…   rH   )rG   r–   r—   rp   r‡   Úoutfiler'   r'   r(   Útest_notebook_export_json]  s   

"þr?  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S )ÚTestEnvc                 C   s    t  dd¡}|  t|tƒ¡ d S )NÚenvrF   )rG   rH   Ú
assertTruerJ   Údict©r¸   rA  r'   r'   r(   Útest_envk  s   zTestEnv.test_envc                 C   sš   t  dd¡}d}tj tjdddddœ¡� t  dd¡}W d   ƒ n1 s&w   Y  |d |ks3J ‚|d	 |ks;J ‚|d
 |ksCJ ‚|d dksKJ ‚d S )NrA  rF   z<hidden>Zabc123ZssshhhÚabc)ÚAPI_KEYÚSECRET_THINGÚJUPYTER_TOKENÚVARrG  rH  rI  rJ  )rG   rH   r
   rà   rC  ru   Úenviron)r¸   rA  Zhiddenr'   r'   r(   Útest_env_secreto  s    üþ	÷
zTestEnv.test_env_secretc                 C   ól   t  dd¡}|  |d ¡ |  tjd d¡ |  t  dd¡d¡ t  dd¡}|  |d ¡ |  tjd d¡ d S )NrA  zvar val1ÚvarZval1zvar=val2Zval2©rG   rH   ÚassertEqualru   rK  rD  r'   r'   r(   Útest_env_get_set_simple�  ó   zTestEnv.test_env_get_set_simplec                 C   rM  )NrA  zvar 'val1 '' 'val2rN  z'val1 '' 'val2zvar=val2 val3="val4zval2 val3="val4rO  rD  r'   r'   r(   Útest_env_get_set_complexŠ  rR  z TestEnv.test_env_get_set_complexc                 C   ó   |   tdd„ ¡ d S )Nc                   S   ó   t  dd¡S )NZset_envrN  r[   r'   r'   r'   r(   Ú<lambda>”  ó    z0TestEnv.test_env_set_bad_input.<locals>.<lambda>©ÚassertRaisesr   r  r'   r'   r(   Útest_env_set_bad_input“  ó   zTestEnv.test_env_set_bad_inputc                 C   rT  )Nc                   S   rU  )NrA  zvar A=Br[   r'   r'   r'   r(   rV  —  rW  z1TestEnv.test_env_set_whitespace.<locals>.<lambda>rX  r  r'   r'   r(   Útest_env_set_whitespace–  r[  zTestEnv.test_env_set_whitespaceN)	r$   r%   r&   rE  rL  rQ  rS  rZ  r\  r'   r'   r'   r(   r@  i  s    		r@  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚCellMagicTestCasec                 C   sB   t  |dd¡}|dksJ ‚t  d| d ¡ t jd dksJ ‚d S )Nr6   r7   )r6   r7   z%%z c
d
r}   )Úczd
)rG   rQ   rI   r”   )r¸   r   rÂ   r'   r'   r(   Úcheck_identœ  s   zCellMagicTestCase.check_identc                 C   s   t dd„ ƒ}|  d¡ dS )z!Cell magic using simple decoratorc                 S   ó   | |fS r·   r'   ©rO   rP   r'   r'   r(   Úcellm¦  ó   z:CellMagicTestCase.test_cell_magic_func_deco.<locals>.cellmrb  N)r   r_  ©r¸   rb  r'   r'   r(   Útest_cell_magic_func_deco¤  s   
z+CellMagicTestCase.test_cell_magic_func_decoc                 C   s$   dd„ }t  |dd¡ |  d¡ dS )zCell magic manually registeredc                 S   r`  r·   r'   ra  r'   r'   r(   rb  ®  s   z4CellMagicTestCase.test_cell_magic_reg.<locals>.cellmrP   Zcellm2N)rG   rV   r_  rd  r'   r'   r(   Útest_cell_magic_reg¬  s   z%CellMagicTestCase.test_cell_magic_regc                 C   s,   t G dd„ dtƒƒ}t |¡ |  d¡ dS )z Cell magics declared via a classc                   @   r¶   )z9CellMagicTestCase.test_cell_magic_class.<locals>.MyMagicsc                 S   ó   ||fS r·   r'   ©r¸   rO   rP   r'   r'   r(   Úcellm3¹  rc  z@CellMagicTestCase.test_cell_magic_class.<locals>.MyMagics.cellm3N)r$   r%   r&   r   ri  r'   r'   r'   r(   ÚMyMagics¶  s    rj  ri  N)r   r   rG   r¼   r_  )r¸   rj  r'   r'   r(   Útest_cell_magic_class´  s   
z'CellMagicTestCase.test_cell_magic_classc                 C   sB   t G dd„ dtƒƒ}t |¡ |  d¡ t d¡}|dksJ ‚dS )z$Cell magics declared via a class, #2c                   @   s   e Zd Zedƒdd„ ƒZdS )z;CellMagicTestCase.test_cell_magic_class2.<locals>.MyMagics2Úcellm4c                 S   rg  r·   r'   rh  r'   r'   r(   Úcellm33Å  rc  zCCellMagicTestCase.test_cell_magic_class2.<locals>.MyMagics2.cellm33N)r$   r%   r&   r   rm  r'   r'   r'   r(   Ú	MyMagics2Â  s    rn  rl  rm  N)r   r   rG   r¼   r_  Zfind_cell_magic)r¸   rn  Zc33r'   r'   r(   Útest_cell_magic_class2À  s   


z(CellMagicTestCase.test_cell_magic_class2N)r$   r%   r&   r_  re  rf  rk  ro  r'   r'   r'   r(   r]  š  s    r]  c               	   C   ó€   t ƒ } tƒ �0}tj |d¡}|  d|d ddg¡¡ t|ƒjdd�}d|v s(J ‚d|v s.J ‚W d	  ƒ d	S 1 s9w   Y  d	S )
zBasic %%writefileÚfile1Ú	writefiler]   Úline1Úline2rÜ   rÝ   úline1
N©r   r   ru   rw   r…   rQ   r   Ú	read_text©rv   r‡   r  Úsr'   r'   r(   Ú	test_fileÏ  s    þÿý
"òrz  c               	   C   rp  )
z-Basic %%writefile with embedded single quotesz'file1'rr  r]   rs  rt  rÜ   rÝ   ru  Nrv  rx  r'   r'   r(   Útest_file_single_quoteã  ó    þÿý
"òr{  c               	   C   rp  )
z-Basic %%writefile with embedded double quotesz"file1"rr  r]   rs  rt  rÜ   rÝ   ru  Nrv  rx  r'   r'   r(   Útest_file_double_quoteø  r|  r}  c               	   C   sŠ   t ƒ } tƒ �5}tj |d¡}|| jd< |  ddd ddg¡¡ t|ƒjdd	�}d
|v s-J ‚d|v s3J ‚W d  ƒ dS 1 s>w   Y  dS )z%%writefile $filenamerq  Úfilenamerr  z	$filenamer]   rs  rt  rÜ   rÝ   ru  N)	r   r   ru   rw   r…   r”   rQ   r   rw  rx  r'   r'   r(   Útest_file_var_expand  s"   
þÿý
"ñr  c               	   C   s¦   t ƒ } tƒ �C}tj |d¡}|  d|d ddg¡¡ tj|dd��}| ¡ }W d  ƒ n1 s0w   Y  d	|v s;J ‚d|v sAJ ‚W d  ƒ dS 1 sLw   Y  dS )
z%%writefile with unicode cellrq  rr  r]   u   linÃ©1u   linÃ©2rÜ   rÝ   Nu   linÃ©1
)	r   r   ru   rw   r…   rQ   rá   ÚopenÚread)rv   r‡   r  rs   ry  r'   r'   r(   Útest_file_unicode"  s   þ
ÿ"÷r‚  c               	   C   sœ   t ƒ } tƒ �>}tj |d¡}|  d|d ddg¡¡ |  dd| d ddg¡¡ t|ƒjd	d
�}d|v s6J ‚d|v s<J ‚W d  ƒ dS 1 sGw   Y  dS )z%%writefile -a amends filesZfile2rr  r]   rs  rt  z-a %sÚline3Úline4rÜ   rÝ   ru  zline3
Nrv  rx  r'   r'   r(   Útest_file_amend1  s2   þÿý
þÿý
"èr…  c               	   C   sz   t ƒ } tƒ �-}d}|  dd| d ddg¡¡ t|ƒjdd�}d	|v s%J ‚d|v s+J ‚W d
  ƒ d
S 1 s6w   Y  d
S )z%%file with spaces in filenamez	file nameÚfilerô   r]   rs  rt  rÜ   rÝ   ru  N)r   r   rQ   r…   r   rw  rx  r'   r'   r(   Útest_file_spacesO  s    þÿý
"òr‡  c                  C   s4   t ƒ } dg| jj_tj| d�}d|jd v sJ ‚d S )NZwhodarS   rP   )r   rZ   ZScriptMagicsZscript_magicsr   Úmagics)rv   Úsmr'   r'   r(   Útest_script_configc  s   rŠ  c                   C   s   t dƒ t tj¡ d S r  )r   ÚsignalÚraise_signalÚSIGINTr'   r'   r'   r(   Ú_interrupt_after_1sj  ó   rŽ  c                  C   sb   t ƒ } t t¡� ttd�}| ¡  |  dtj	› d¡ | 
¡  W d   ƒ d S 1 s*w   Y  d S )N©Útargetr   ú from time import sleep; sleep(2))r   rA   rB   r   r   rŽ  r�   rQ   rÆ   Ú
executabler…   ©rv   Úthreadr'   r'   r(   Útest_script_raise_on_interrupto  s   

ÿ
"úr–  c                  C   s:   t ƒ } ttd�}| ¡  |  ddtj› �d¡ | ¡  d S )Nr�  r   z--no-raise-error r’  )r   r   rŽ  r�   rQ   rÆ   r“  r…   r”  r'   r'   r(   Ú%test_script_do_not_raise_on_interrupt{  s   

ýr—  c                  C   ó6   t ƒ } |  ddtj› �d¡ | jd  ¡ dksJ ‚d S )Nr   z--out output úprint('hi')r¿   Úhi©r   rQ   rÆ   r“  r”   r_   rÐ   r'   r'   r(   Útest_script_outˆ  s   rœ  c                  C   r˜  )Nr   z--err error ú+import sys; print('hello', file=sys.stderr)Úerrorr@   r›  rÐ   r'   r'   r(   Útest_script_errŽ  s   
ýrŸ  c                  C   sV   t ƒ } |  ddtj› �d g d¢¡¡ | jd  ¡ dksJ ‚| jd  ¡ dks)J ‚d S )	Nr   z--out output --err error r]   ©z
import sysr™  zprint('hello', file=sys.stderr)r¿   rš  rž  r@   )r   rQ   rÆ   r“  r…   r”   r_   rÐ   r'   r'   r(   Útest_script_out_err˜  s   
ÿýr¡  c                  Ã   óT   �t ƒ } |  ddtj› �d¡ | jd  ¡ I d H  ¡ dksJ ‚| jd  ¡ s(J ‚d S )Nr   z--bg --out output r™  r¿   ó   hi©r   rQ   rÆ   r“  r”   r�  r_   Úat_eofrÐ   r'   r'   r(   Útest_script_bg_out©  s
   € r¦  c                  Ã   r¢  )Nr   z--bg --err error r�  rž  ó   hellor¤  rÐ   r'   r'   r(   Útest_script_bg_err°  s   €
ý r¨  c                  Ã   s�   �t ƒ } |  ddtj› �d g d¢¡¡ | jd  ¡ I d H  ¡ dks$J ‚| jd  ¡ I d H  ¡ dks4J ‚| jd  ¡ s=J ‚| jd  ¡ sFJ ‚d S )	Nr   z--bg --out output --err error r]   r   r¿   r£  rž  r§  )	r   rQ   rÆ   r“  r…   r”   r�  r_   r¥  rÐ   r'   r'   r(   Útest_script_bg_out_err»  s   €
ÿý  r©  c                  Ã   s¢   �t ƒ } |  ddtj› �d g d¢¡¡ | jd }| ¡ I d H  |jdks'J ‚|j 	¡ I d H  
¡ dks5J ‚|j 	¡ I d H dksAJ ‚|j ¡ sHJ ‚|j ¡ sOJ ‚d S )	Nr   z--bg --out output --proc p r]   r   r;  r   r£  ó    )r   rQ   rÆ   r“  r…   r”   ÚwaitÚ
returncoder^   r�  r_   r×   r¥  )rv   r;  r'   r'   r(   Útest_script_bg_procÎ  s    €
ÿý
r­  c               	   C   sH   t ƒ } dD ]}zt|ƒ W n	 ty   Y qw || jjd v s!J ‚qd S )N)ÚshÚbashÚperlÚrubyrP   )r   r   r  Úmagics_managerrˆ  )rv   rp   r'   r'   r(   Útest_script_defaultså  s   ÿúr³  c                 ƒ   sŒ   �t ƒ }tjdk}|rdnd‰ tdˆ › d�ƒ}‡ fdd„}t|d�}| ¡  tˆ d	 ƒ | d
tj	› |¡ | 
¡  |  ¡ }|jdksDJ ‚d S )NÚntr*   r    z:    import time
    for _ in range(3):
        time.sleep(z-)
        print(".", flush=True, end="")
    c                     s(   t dƒD ]} tˆ ƒ t| ddd� qd S )Nr*   TrF   )ÚflushÚend)rÿ   r   r7  )r—   ©Ústepr'   r(   Úprint_numbersþ  s   þz7test_script_streams_continiously.<locals>.print_numbersr�  r)   r   z0.1.2.)r   ru   ro   r   r   r�   r   rQ   rÆ   r“  r…   Z
readouterrrÂ   )Zcapsysrv   Z
is_windowsr   r¹  r•  rc   r'   r·  r(   Ú test_script_streams_continiouslyð  s"   €
ýÿ	
rº  c                   @   s0   e Zd ZdZedƒdd„ ƒZedƒdd„ ƒZdS )ÚFooFooz%class with both %foo and %%foo magicsr{   c                 C   r   )zI am line fooNr'   )r¸   rO   r'   r'   r(   Úline_foo  ó   zFooFoo.line_fooc                 C   r   )zI am cell foo, not line fooNr'   rh  r'   r'   r(   Úcell_foo  r½  zFooFoo.cell_fooN)r$   r%   r&   Ú__doc__r   r¼  r   r¾  r'   r'   r'   r(   r»    s    
r»  c                  C   s¼   t ƒ } | j t¡ |  d¡}|d du sJ ‚|d du sJ ‚|  d¡}|d du s+J ‚|d du s3J ‚|d tjjks=J ‚|  d¡}|d du sJJ ‚|d du sRJ ‚|d tjjks\J ‚dS )	z4%%foo and %foo magics are distinguishable to inspectr{   ÚfoundTZismagicz%%fooÚ	docstringz%fooN)r   r²  Úregisterr»  Zobject_inspectr¾  r¿  r¼  )rv   Zoinfor'   r'   r(   Útest_line_cell_info  s   


rÃ  c                  C   sd   t ƒ } t| ƒ}t| ƒ}| j}| |¡ |jd d j|u sJ ‚| |¡ |jd d j|u s0J ‚d S )NrO   r{   )r   r»  r²  rÂ  rˆ  Ú__self__)rv   Zfoo1Zfoo2Úmmr'   r'   r(   Útest_multiple_magics/  s   

rÆ  c                  C   sÀ   t ƒ } | j}|  dd¡ d|jd v sJ ‚d|jd v sJ ‚|  dd¡ d|jd vs-J ‚d|jd v s6J ‚|  dd¡ |  d	d
¡|  dd
¡ksJJ ‚|  ddt d¡ ¡ d|jd v s^J ‚dS )zTest %alias_magic.Zalias_magicztimeit_alias timeitZtimeit_aliasrO   rP   z--cell timeit_cell_alias timeitZtimeit_cell_aliasz--line env_alias envrA  rF   Z	env_aliasz&--line history_alias history --params rå   Zhistory_aliasN)r   r²  rH   rˆ  ÚshlexÚquote)rv   rÅ  r'   r'   r(   Útest_alias_magic:  s   ÿrÉ  c                  C   sú   t ƒ } | j ¡  g d¢}t|dd�D ]\}}| j ||¡ qtƒ �R}tj |d¡}|  	dd| ¡ t
|ƒjdd�}| |d	 ¡dksDJ ‚d
|v sJJ ‚|  	dd| ¡ t
|ƒjdd�}| |d	 ¡dkseJ ‚d
|v skJ ‚W d  ƒ dS 1 svw   Y  dS )zTest %save.)rŠ   r‹   úprint(a, b())r    rŒ   útestsave.pyÚsavez%s 1-10rÜ   rÝ   r   zcoding: utf-8z
-a %s 1-10r)   N)r   r�   r‘   r’   r“   r   ru   rw   r…   rH   r   rw  Úcount)rv   r–   r—   rp   Útmpdirr†  Úcontentr'   r'   r(   Ú	test_saveT  s    
"÷rÐ  c                  C   s¦   t ƒ } | j ¡  g d¢}t|dd�D ]\}}| j ||¡ qtƒ �(}tj |d¡}|  	d|¡ t
|ƒjdd�}tdƒ}||ksAJ ‚W d   ƒ d S 1 sLw   Y  d S )	N)rŠ   zdef b():
    return a**2rÊ  z%saver    rŒ   rË  rÌ  rÜ   rÝ   zƒ            # coding: utf-8
            a=1
            def b():
                return a**2
            print(a, b())
            )r   r�   r‘   r’   r“   r   ru   rw   r…   rH   r   rw  r   )rv   r–   r—   rp   rÎ  rw   rÏ  Zexpected_contentr'   r'   r(   Útest_save_with_no_argsg  s   
ÿ	"órÑ  c                  C   s”   t ƒ } |  dd¡ |  dd¡ d| jd< |  dd¡ d| jd< |  dd¡ | jd dks.J ‚|  dd	¡ d| jd< |  dd¡ | jd dksHJ ‚d
S )zTest %store.r5  Z
storemagicÚstorez-zé*   rN  é'   z-rz-d varN)r   rH   r”   rÐ   r'   r'   r(   Ú
test_store~  s   


rÕ  rÅ   c                 C   sÎ   t ƒ }t |¡}ddg}| | d¡\}}	| ||	||¡\}
}}|d ur)||
ks)J ‚|d urOtj|
ddd��}| ¡ }W d   ƒ n1 sDw   Y  ||ksOJ ‚|dkrY||ksYJ ‚|d urc||kseJ ‚d S d S )NrF   zprxn:rí   rÜ   rÝ   rÅ   )r   r   Z
CodeMagicsrt   Z_find_edit_targetrá   r€  r�  )Zarg_sÚexp_filenameZ
exp_linenoÚexp_contentsÚexp_is_temprv   ÚMZ	last_callry   Úargsr~  ÚlinenoZis_temprs   Úcontentsr'   r'   r(   Ú_run_edit_test‘  s$   

ÿÿrÝ  c                  C   sb   t ƒ } | j}| jddd� t tj¡�}tdƒ W d  ƒ n1 s"w   Y  |jj	|ks/J ‚dS )z&%edit on interactively defined objectsúdef foo(): return 1Trƒ   r{   N)
r   Zexecution_countrI   rA   rB   r   ZInteractivelyDefinedrÝ  r•   Úindex)rv   rì   Úer'   r'   r(   Útest_edit_interactive§  s   
ÿrá  c                  C   s0   t ƒ } | jddd� td| jd d dd� dS )	z%edit [cell id]rÞ  Trƒ   rë   r«   r    )r×  rØ  N)r   rI   rÝ  r”   rÐ   r'   r'   r(   Útest_edit_cell²  s   râ  c                   C   s   t ddd� dS )z
%edit fileztest file.py)rÖ  N)rÝ  r'   r'   r'   r(   Útest_edit_fname»  s   rã  c                  C   sX   t ƒ } |  dd¡ t d¡� |  dd¡ W d   ƒ n1 sw   Y  |  dd¡ d S )NÚbookmarkZbmnamez-lz	-d bmname)r   rH   rš   r›   rÐ   r'   r'   r(   Útest_bookmarkÀ  s   ÿrå  c                  C   s|   t ƒ } | jjd }d|_|  dd¡}tjdd��}||ƒ}W d   ƒ n1 s'w   Y  t|ƒddgks6J ‚|g ks<J ‚d S )Nzapplication/jsonTÚlsmagicrF   )ÚrecordrP   rO   )r   Údisplay_formatterÚ
formattersÚenabledrH   ÚwarningsÚcatch_warningsra   )rv   Zjson_formatterræ  ÚwÚjr'   r'   r(   Útest_ls_magicÇ  s   
ÿrï  c                  C   s<   dd„ } | dƒdksJ ‚| dƒdksJ ‚| dƒdksJ ‚d S )Nc                 S   s   |   ¡ }d t |¡¡S )Nr]   )rh   r…   r   Zstrip_initial_indent)ry  Úlinesr'   r'   r(   ÚsiiÓ  r�  z&test_strip_initial_indent.<locals>.siiz  a = 1
b = 2za = 1
b = 2z  a
    b
cza
  b
cza
  br'   )rñ  r'   r'   r(   Útest_strip_initial_indentÒ  s   rò  c               
   C   s¨   dt jj_tjt d�} tƒ �<}z,t t 	d¡¡� |  
d tj |d¡¡¡ W d   ƒ n1 s0w   Y  W t j ¡  nt j ¡  w W d   ƒ d S 1 sMw   Y  d S )NFrS   úActivating.*z-q {}zquiet_from_arg.log)rG   rZ   ÚLoggingMagicsÚquietr   r   rš   rÒ   rf   ÚcompileÚlogstartÚformatru   rw   r…   ÚloggerÚlogstop©Zlmr‡   r'   r'   r(   Ú!test_logging_magic_quiet_from_argÛ  s   
ÿÿ€"úrü  c               	   C   ó¢   dt jj_tjt d�} tƒ �9}z)t t 	d¡¡� |  
tj |d¡¡ W d   ƒ n1 s-w   Y  W t j ¡  nt j ¡  w W d   ƒ d S 1 sJw   Y  d S )NTrS   ró  zquiet_from_config.log)rG   rZ   rô  rõ  r   r   rš   rÒ   rf   rö  r÷  ru   rw   r…   rù  rú  rû  r'   r'   r(   Ú$test_logging_magic_quiet_from_configæ  ó   
ÿ€"ûrþ  c               	   C   rý  )NFrS   ró  znot_quiet.log)rG   rZ   rô  rõ  r   r   rš   r›   rf   rö  r÷  ru   rw   r…   rù  rú  rû  r'   r'   r(   Útest_logging_magic_not_quietñ  rÿ  r   c                   C   s8   dt jd< g t jd< t  dd¡ t jd dgksJ ‚d S )Né   r6   r7   Útimezb.append("{a}")z{a}rò   r'   r'   r'   r(   Útest_time_no_var_expandü  s   

r  c                   C   rY   )zDTest valid timeit arguments, should not cause SyntaxError (GH #1269)rñ   z-n1 -r1 a=('#')Nr[   r'   r'   r'   r(   Útest_timeit_arguments  s   r  av  
from IPython.core.magic import (
    Magics,
    magics_class,
    line_magic,
    cell_magic,
)


@magics_class
class LazyMagics(Magics):
    @line_magic
    def lazy_line(self, line):
        print("Lazy Line")

    @cell_magic
    def lazy_cell(self, line, cell):
        print("Lazy Cell")


def load_ipython_extension(ipython):
    ipython.register_magics(LazyMagics)
c               
   C   s  t  t¡� t dd¡ W d   ƒ n1 sw   Y  t ¡ } tƒ �\}t|ƒ�? t	|ƒ}|d }| 
t¡ tj dt	|jƒjd d… ¡ t d¡� t dd¡ W d   ƒ n1 sZw   Y  W d   ƒ n1 siw   Y  W d   ƒ d S W d   ƒ d S 1 s�w   Y  d S )NZ	lazy_linerF   zlazy_magic_module.pyéýÿÿÿz	Lazy Line)rA   rB   r   rv   rH   ru   rõ   r   r   r   Ú
write_textÚMINIMAL_LAZY_MAGICr²  Zregister_lazyro   rš   r›   )rù   rÎ  Zptempdirrˆ   r'   r'   r(   Útest_lazy_magics"  s$   ÿ

ÿ€ûÿ"ÿr  zT
print('Loaded my_tmp')
if __name__ == "__main__":
    print('I just ran a script')
c               	      sæ   t ƒ �f} tj | d¡‰ tˆ ƒjtdd� ddl‰ddl‰G ‡ ‡fdd„dˆj	j
ˆj	jƒ}tj d|ƒ ¡ tƒ �}t dd	¡ t d
¡ W d  ƒ n1 sMw   Y  d}||jks[J ‚tj d¡ W d  ƒ dS 1 slw   Y  dS )z3Test that a module can be loaded via an import hookz	my_tmp.pyrÜ   rÝ   r   Nc                       s2   e Zd Zd‡fdd„	Z‡ fdd„Z‡ fdd„ZdS )	z8test_run_module_from_import_hook.<locals>.MyTempImporterNc                    s   |dkrˆ j  || ¡S d S ©NZmy_tmp)ÚutilÚspec_from_loader)r¸   Úfullnamerw   r‘  )Ú	importlibr'   r(   Ú	find_specB  s   ÿzBtest_run_module_from_import_hook.<locals>.MyTempImporter.find_specc                    s   |dksJ ‚ˆ S r	  r'   )r¸   r  ©Úfullpathr'   r(   Úget_filenameF  s   zEtest_run_module_from_import_hook.<locals>.MyTempImporter.get_filenamec                    s"   t |ƒ ˆ ¡s	J ‚t ˆ ƒjdd�S )NrÜ   rÝ   )r   Úsamefilerw  )r¸   rw   r  r'   r(   Úget_dataJ  s   zAtest_run_module_from_import_hook.<locals>.MyTempImporter.get_datar·   )r$   r%   r&   r  r  r  r'   ©r  r  r'   r(   ÚMyTempImporterA  s    r  rÖ   z	-m my_tmpzimport my_tmpz0Loaded my_tmp
I just ran a script
Loaded my_tmp
)r   ru   rw   r…   r   r  ÚTEST_MODULEÚimportlib.abcÚimportlib.utilrF  ÚMetaPathFinderÚSourceLoaderrÆ   Ú	meta_pathr9  r   rG   rH   rI   r^   rØ   )rÎ  r  rc   r¿   r'   r  r(   Ú test_run_module_from_import_hook8  s    þ"ãr  )NrÅ   NN)­r¿  r  rá   ru   rf   rÇ  r‹  rÆ   rë  r  r   r   Úpathlibr   r  r   Ú	threadingr   Ú
subprocessr   Útextwrapr   Zunittestr	   r
   rA   r�   r   ZIPython.corer   ZIPython.core.errorr   ZIPython.core.magicr   r   r   r   r   r   ZIPython.core.magicsr   r   r   r   r   ZIPython.testingr   Údecr   rš   ZIPython.utils.ior   ZIPython.utils.processr   ZIPython.utils.tempdirr   r   ZIPython.utils.syspathcontextr   Ztest_debuggerr!   Útempfiler"   r#   r5   r?   rD   rN   rR   rX   r\   rd   ri   rq   rz   r~   r€   r‚   r‰   r˜   rœ   rž   Zskipif_not_numpyr    rª   r¬   r±   r³   rµ   rÊ   rÑ   rÓ   rÔ   Z
skip_win32rÕ   rÙ   rÚ   rÛ   rã   rç   rè   rê   rï   ró   rû   rü   r   r
  ZTempFileMixinr  r  r  r  r  r  r  r  r'  r*  r,  r-  r/  ZskipifZprofiler1  r3  r<  r?  r@  r]  rz  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Ý  rá  râ  rã  rå  rï  rò  rü  rþ  r   r  r  r  r  r  r  r'   r'   r'   r(   Ú<module>   s,   	




B
	
8



		
	

15



ý		