
    }eG                     V   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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&m)Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ej:                   G d dej4                               Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d  ZAd! ZBd" ZCd# ZDd$ ZEd% ZFd& ZGd' ZHd( ZId) ZJe(j                  d*        ZLd+ ZMd, ZNd- ZOd. ZP G d/ d0e      ZQd1 ZRd2 ZSd3 ZTd4 ZUe(j                  d5        ZWd6 ZXd7 ZYd8 ZZd9 Z[d: Z\d; Z]d< Z^d= Z_d> Z`d? Zad@ ZbdA Zc G dB dCe*j                        ZedD ZfdE ZgdF ZhdG ZidH ZjdI ZkdJ ZldK ZmdL ZndM ZodN ZpdO Zq e(j                  e"j                  du       dP        Zt e(j                  e"j                  du       dQ        ZudR ZvdS Zw G dT dUe      Zx G dV dWe      ZydX Zze(j                  dY        Z{e(j                  dZ        Z|d[ Z}d\ Z~d] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Ze G dh die             Zdj Zdk Zdl Zdm Zdn Zdo Z	 	 	 	 ddpZdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Zd|Zd} Zd~Zd Zy)z"Tests for various magic functions.    N)invalidate_caches)StringIO)Path)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                       e Zd Zy)DummyMagicsN)__name__
__module____qualname__     ?/usr/lib/python3/dist-packages/IPython/core/tests/test_magic.pyr"   r"   *   s    !%r'   r"   c                  Z    d} g d}t        t        j                  |             }||k(  sJ y )Nz#1 3 5-6 7-9 10:15 17: :10 10- -13 :)
)r   r   )      )      )r-   	   )r.      )   N)Nr.   )r.   N)N   )NN)listr   extract_code_ranges)instrexpectedactuals      r(   test_extract_code_rangesr7   -   s3    1EH $**512FXr'   c                      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        j                  | |      |k(  r J  y )Nz;import foo
a = 10
def b():
    return 42


class A: pass


)abAzA,bzA,azr9   zdef b():
    return 42
zclass A: pass
r<   )zipr   extract_symbols)sourcesymbols_argsr5   symbolsexps        r(   test_extract_symbolsrC   >   s    WF5LcU-.3#$b)#%@A2F#$se,cUH L(3 <##FG4;;;<r'   c                      d} t        j                  t              5  t        j                  | d       d d d        y # 1 sw Y   y xY w)Nz==begin A Ruby program :)=end
def hello
puts 'Hello world'
endhello)pytestraisesSyntaxErrorr   r>   )r?   s    r(   :test_extract_symbols_raises_exception_with_non_python_coderI   K   s<    F 
{	# .VW-. . .s	   <Ac                      t        j                  t              5  t        j	                  dd       d d d        t        j                  d      } t        | j                  t              sJ y # 1 sw Y   ;xY w)Ndoesntexist z%doesntexist)rF   rG   r   _iprun_line_magicrun_cell
isinstanceerror_in_execresults    r(   test_magic_not_foundrT   T   sY    	z	" .="-. \\.)Ff**J777. .s   A++A4c                      t        j                  t              5  t        j	                  ddd       d d d        t        j                  d      } t        | j                  t              sJ y # 1 sw Y   ;xY w)NrK   linecellz%%doesntexist)rF   rG   r   rM   run_cell_magicrO   rP   rQ   rR   s    r(   test_cell_magic_not_foundrY   ^   s[    	z	" :=&&9: \\/*Ff**J777: :s   A,,A5c                      d } t         j                  |        t         j                  d      }t        |j                  t
              sJ y )Nc                     ddz   y )Nr   r   r&   shells    r(   failz%test_magic_error_status.<locals>.faili   s	    	!r'   z%fail)rM   register_magic_functionrO   rP   rQ   ZeroDivisionError)r^   rS   s     r(   test_magic_error_statusra   h   s:    %\\'"Ff**,=>>>r'   c                  0    t         j                  dd       y)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.
    configrL   NrM   rN   r&   r'   r(   test_configre   p   s     x$r'   c                      t               5 } t        j                  dd       ddd        j                  }|j	                         j                  d      dd }|t        t        |            k(  sJ y# 1 sw Y   QxY w)zQ test that config magic prints available configs in unique and
    sorted order. rc   rL   N
r   )r   rM   rN   stdoutstripsplitsortedset)capturedrh   config_classess      r(   test_config_available_configsro   z   sq     
	 )X8R() __F\\^))$/3NVC$78888) )s   A22A;c                      t               5 } t        j                  dd       ddd        j                  }t	        j
                  d|j                         d         s
J | d       y# 1 sw Y   GxY w)z? test that config with a classname prints the class's options. rc   TerminalInteractiveShellNz"TerminalInteractiveShell.* optionsr   zB

1st line of stdout not like 'TerminalInteractiveShell.* options')r   rM   rN   rh   rematch
splitlines)rm   rh   s     r(   test_config_print_classru      sz    		 AX8%?@A __F88,f.?.?.A!.D W
UVW 	A As   A((A1c                  t   t         j                  j                          t         j                  d= t         j	                  dd       t        t         j                  j                        dkD  sJ t         j                  j                  D ]  \  } }d| vrJ  t         j                  d   }t        |      dkD  sJ y )N
syscmdlistrehashxrL   
   .)rM   alias_managerclear_aliasesdbrN   lenaliases)namecmdscomss      r(   test_rehashxr      s    ##%|y"% s  (()B...&&.. 	c$
 FF< Eu:??r'   c                      t               } d}t        |       }|j                  d|z  d      d   }t        j                  dk(  rd}n|}|d   |k(  sJ y)	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osr   )ippathmoptsr5   s        r(   test_magic_parse_optionsr      sX    	BDBA??7T>$/2D	ww'9   r'   c                      t               } t        |       }|j                  dddd      \  }}d|v sJ d|v sJ |d   dk(  sJ y)z5Magic.parse_options can handle --foo=bar long optionsz--foo --bar=bubbler9   foozbar=barbubbleN)r	   r"   r   )r   r   r   _s       r(   test_magic_parse_long_optionsr      sU    	BBAoo2CGGD!D==D==;("""r'   c                       y)zTest %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(   doctest_hist_fr          r'   c                       y)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(   doctest_hist_opr      r   r'   c                  *   t               } | j                  dd       t               5 }t        j                  j                  |d      }| j                  dd|z         t        j                  j                  |      sJ 	 d d d        y # 1 sw Y   y xY w)Nz1+2Tstore_historyzhist.pyhistoryz-pof %s)r	   rO   r   r   r   joinrN   isfile)r   tdtfs      r(   test_hist_pofr     sv    	BKKTK* 
	 "WW\\"i(
)Y^4ww~~b!!!" " "s   AB		Bc                  f   t               } | j                  j                          g d}t        |d      D ]!  \  }}| j                  j	                  ||       # | j                  dd       | j                  d   j                  dj                  |      dz   k(  sJ d| j                  dd      v sJ y )	N)a=1def b():
  return a**2zprint(a,b())r   startmacroztest 1-3testrg   rL   )	r	   history_managerreset	enumeratestore_inputsrN   user_nsvaluer   )r   cmdsir   s       r(   
test_macror     s    	B=DD* 03
''3/0gz*::f##tyy'==== R&&w3333r'   c                     t               } | j                  j                          g d}|D ]  }| j                  |d        | j                  d   j
                  dk(  sJ t        j                  d      5  | j                  d       ddd       t        j                  d      5  | j                  d       ddd       y# 1 sw Y   9xY w# 1 sw Y   yxY w)	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)
12N13)r	   r   r   rO   r   r   ttAssertPrints)r   r   r   s      r(   test_macro_runr      s    	B:D -
Ct,-::f##'9999		 
F		 
F   s   6C %C C	Cc                      t               } t               5 }| j                  dd       ddd       j                  }d|v sJ d|v sJ d|v sJ y# 1 sw Y   (xY w)zTest %magicr
   rL   Nz%magicIPython	Available)r	   r   rN   rh   )r   rm   rh   s      r(   test_magic_magicr   .  sk    	B		 'X
'2&' __Fv&   ' 's   AAc                      t         j                  d       t         j                  d       dt         j                  v sJ t         j                  dd       dt         j                  vsJ y)z!Test '%reset array' functionalityzimport numpy as npza = np.empty(2)r9   r   z-f arrayN)rM   exr   rN   r&   r'   r(   test_numpy_reset_array_undecr   :  sR     FF FF#++w
+ckk!!!r'   c                  v   t         j                  dd       t         j                  dd       ddD  cg c]  } t         j                  |     c} v sJ t         j                  dd       ddD  cg c]  } t         j                  |     c} vsJ t	        t         j                  d	         d
k(  sJ yc c} w c c} w )zTest '%reset out' magiczparrot = 'dead'Tr   parrotdead)r   _____r   z-f outOutr   N)rM   rO   r   rN   r~   xs    r(   test_reset_outr   D  s    LL"$L7LLL..@Ackk!nAAAAw)2DEQ#++a.EEEEs{{5!"a''' BEs   B1/B6c                  Z   t         j                  dd       ddD  cg c]  } t         j                  |     c} v sJ t         j                  dd       ddD  cg c]  } t         j                  |     c} vsJ t	        t        t         j                  d               dk(  sJ y	c c} w c c} w )
zTest '%reset in' magicr   Tr   )_i_ii_iiir   z-f inInr   N)rM   rO   r   rN   r~   rl   r   s    r(   test_reset_inr   O  s     LLL.0EF1AFFFFw(4IJqCKKNJJJJs3;;t$%&!+++ GJs   B#B(c                     t         j                  d       t         j                  dt        j                  j                  t        j                               t         j                  dd       t        t         j                  d         dkD  sJ t         j                  dd       t        t         j                  d         dk(  sJ t         j                  d       y	)
zTest '%reset dhist' magicztmp = [d for d in _dh]cd-_dhr   r   z-f dhistz_dh = [d for d in tmp]N)
rM   rO   rN   r   r   dirnamerF   __file__r~   r   r&   r'   r(   test_reset_dhistr   Y  s    LL)*tRWW__V__=>tS!s{{5!"Q&&&w
+s{{5!"a'''LL)*r'   c                      t         j                  d       t         j                  d       t        t         j                  d         t         j                  j
                  dz   k(  sJ y)z+Test that '%reset in' preserves In[] lengthzprint 'foo'zreset -f inr   r   N)rM   rO   r~   r   displayhookprompt_countr&   r'   r(   test_reset_in_lengthr   d  sE    LLLLs{{4 !S__%A%AA%EEEEr'   c                       e Zd Zd Zy)TestResetErrorsc                 ~   t          G d dt                     }t        j                  |       | j	                         5 }dd l}|j                         }|j                  d       t        j                  d       d d d        t        j                        dk(  sJ |j                  D ]  }d|vrJ  y # 1 sw Y   ;xY w)Nc                       e Zd Zed        Zy)9TestResetErrors.test_reset_redefine.<locals>.KernelMagicsc                      y Nr&   )selfr]   s     r(   lessz>TestResetErrors.test_reset_redefine.<locals>.KernelMagics.lessq  s    %)r'   N)r#   r$   r%   r   r   r&   r'   r(   KernelMagicsr   o  s    ) )r'   r   r   Nothingzreset -fr   zInvalid alias)r   r   rM   register_magics
assertLogsr   	getLoggerinforO   r~   output)r   r   cmlog_modlogouts         r(   test_reset_redefinez#TestResetErrors.test_reset_redefinem  s    		*6 	* 
	* 	L)__ 	%" &##%CHHYLL$	% 299~"""99 	.C"#---	.	% 	%s   ;B33B<N)r#   r$   r%   r   r&   r'   r(   r   r   k  s    .r'   r   c                     t               } | j                  d       t        j                  }	 t	               t        _        | j                  d       t        j                  j                         }|t        _        |j                         j                         d   j                         }|dk(  sJ y# |t        _        w xY w)ztest %tb after a SyntaxErrorforz%tbzSyntaxError: invalid syntaxN)	r	   rO   sysrh   r   getvaluerstriprt   ri   )r   save_stdoutr   	last_lines       r(   test_tb_syntaxerrorr     s    	BKK **K!Z

Ejj!!# 


'')"-335I5555 !
s   AB1 1B>c                  ~   t               } t        j                  d      5  | j                  d       d d d        | j                  d       t        j                  d      5  t        j                  dd      5  | j                  d       d d d        d d d        y # 1 sw Y   jxY w# 1 sw Y   xY w# 1 sw Y   y xY w)NWall time: 
%time Nonez%def f(kmjy):
    %time print (2*kmjy)hihiFsuppresszf('hi')r	   r   r   rO   r   s    r(   	test_timer     s    	B		' "
L!" KK + , 
	' #__Ve4 	#KK	"	## #" "	# 	## #s/   B B38B'
B3B$'B0	,B33B<c                     t               } t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d	       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d
       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        t        j                  d      5  t        j                  dd      5  t        j                  dd      5  | j                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   wxY w# 1 sw Y   |xY w# 1 sw Y   *xY w# 1 sw Y   /xY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   WxY w# 1 sw Y   \xY w# 1 sw Y   
xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   xY w# 1 sw Y   y xY w)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 # ;Comment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   rO   AssertNotPrintsr   s    r(   "test_time_no_output_with_semicolonr    s   	B 
	# 0__]U; 	0? 0./0	00
 
		I	& 1__]U; 	1? 1/01	11
 
	# :__]U; 	:? :89:	::
 
		I	& ;__]U; 	;? ;9:;	;;
 
	# ;__]U; 	;? ;9:;	;; 
	" 8__]U; 	8? 8678	88
 
		H	% 9__]U; 	9? 9789	99
 
	" C__]U; 	C? CABC	CC
 
		H	% D__]U; 	D? DBCD	DD
 
	" D__]U; 	D? DBCD	DD DY0 0	0 	00 01 1	1 	11 1: :	: 	:: :; ;	; 	;; ;; ;	; 	;; ;8 8	8 	88 89 9	9 	99 9C C	C 	CC CD D	D 	DD DD D	D 	DD DsV  Q<Q/Q""Q/*Q<R#'R?R	RR#>S
R=.R0 R=S
-S1S$S/S$7S1T4TS>T&TT?#T2;T%T2T?:U&U*U<UU&)VV U3+V 3VV40V'VV'"V4WW7W	WW"Q,'Q//Q9	4Q<<R	RRR 	R##R-0R:5R==S	S

SS!S$$S.	)S11S;>TTT	TT"%T/*T22T<	7T??U	UUU#	U&&U03U=8V  V
	VVV$V''V1	,V44V>WWW	WW$c                      t         j                  d       t         j                  d   dk(  sJ t         j                  d= t         j                  d   dk(  sJ t         j                  d= y )Nz%%time
var_1 = 1
var_2 = 2
var_1r   var_2r*   )r   rO   r   r&   r'   r(   test_time_last_not_expressionr    s[    KK   ::g!###


7::g!###


7r'   c                      t               } t        j                  d      5  | j                  d       d d d        y # 1 sw Y   y xY w)NzCPU times: user r   r   r   s    r(   
test_time2r	    s7    	B	+	, "
L!" " "s	   ;Ac                      t               } | j                  j                  dd       t        j                  dd      5  | j                  d       ddd       y# 1 sw Y   yxY w)z-Erroneous magic function calls, issue gh-3334runNz	not foundstderr)channelz%%time
run = 0
run += 1)r	   r   popr   r  rO   r   s    r(   
test_time3r    sQ    	BJJNN5$			K	:  
  	      s   AA"c                      t               } | j                  j                  dd       | j                  t	        d             | j
                  d   dk(  sJ y)z2Make sure last statement from time return a value.r  NzF        %%time
        a = "ho"
        b = "hey"
        a+b
        r   hohey)r	   r   r  rO   r   user_ns_hiddenr   s    r(   test_multiline_timer    sO    	BJJNN5$KK	
	 S!W,,,r'   c                  |    t               } | j                  d       | j                  d   dk(  sJ | j                  d= y)zL
    Test that local_ns is actually global_ns when running a cell magic
    z%%time
myvar = 1myvarr   N)r	   rO   r   r   s    r(   test_time_local_nsr    s;     
BKK&'::g!###


7r'   c                  D   t               } | j                  d       t        j                  dd      5  | j                  d       d d d        t        j                  dd      5  | j                  d       d d d        t        j                  dd      5  | j                  d       d d d        | j                  d	       t        j                  d
d      5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   y xY w)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	   rO   r   r   r   s    r(   test_capturer    s    	B KK$%	%	0 )
'()	%	0 -
+,-	u	- &
$%& KK%&	5	1 )
'() )) )- -& &
) )s/   C2$C>D
D2C;>D
DDc                  \    t         j                  dd       t         j                  dd       y)zEToggle doctest_mode twice, it should be a no-op and run without errordoctest_moderL   Nrd   r&   r'   r(   test_doctest_moder  (  s"    ~r*~r*r'   c                      t        t              } | j                  dd      d   dk(  sJ | j                  dd      d   dk(  sJ y)z*Tests for basic options parsing in magics.r   rL   r   Nr"   rM   r   )r   s    r(   test_parse_optionsr!  .  sJ     	CA??5"%a(E111??5"%a(E111r'   c                  r    t        t              } | j                  ddd      \  }}|dddk(  sJ |dk(  sJ y	)
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)preserve_non_opts1r   )nrz_ = 314 + fooNr   )r   r   stmts      r(   -test_parse_options_preserve_non_option_stringr(  7  sM    CA#Vt ! JD$ 4((((?"""r'   c                      g t         j                  d<   t         j                  dd       t         j                  d   dggk(  sJ y)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rM   r   rN   r&   r'   r(   "test_run_magic_preserve_code_blockr-  A  sA    CKKO ;;x aSE)))r'   c                  $   t         j                  } t        j                         }t         j                  j                  t        j
                        }	 t        j                  dd|z          |        |k(  sJ t        j                  dd        |        |k(  sJ t        j                  dd|z          |        |k(  sJ t        j                  dd        |        |k(  sJ 	 t        j                  |       y# t        j                  |       w xY w)z+Test various directory handling operations.r   "%s"r   pushdpopdrL   N)r   getcwdr   realpathrM   ipython_dirrN   chdir)curpathstartdiripdirs      r(   test_diropsr9  J  s     iiGyy{HGGS__-E
4%0yE!!!4%yH$$$7FUN3yE!!!62&yH$$$
s   BC8 8Dc                  J   dt         j                  j                  _        t	        j                  t               } t        j                         }t
        j                  j                  t         j                        }	 t        j                  |      5  | j                  d|z         ddd       t        j                  |      5  | j                  d       ddd       t        j                  |       y# 1 sw Y   NxY w# 1 sw Y   +xY w# t        j                  |       w xY w)z#Test OSMagics.cd_force_quiet optionTr\   r/  Nr   )rM   rc   OSMagicscd_force_quietr   r   r2  r   r3  r4  r   r  r   r5  )osmagicsr7  r8  s      r(   test_cd_force_quietr>  ]  s    )-CJJ&||#&Hyy{HGGS__-E& 	(KK'	() 	KK	 		( 	(	 	 	s<   <D C3&D C?D 3C<8D ?DD D"c                      t         j                  j                  } t        d      D ]  }t         j	                  dd        t         j                  j                  | k(  sJ y )Nr,   xmoderL   )rM   InteractiveTBmoderangerN   )r@  r   s     r(   
test_xmoderD  n  sP    ""E1X (7B'(!!U***r'   c                      g  G fddt               }  |        t        j                  d<   t        j                  d       g k(  sJ t        j	                  dd       dgk(  sJ y )Nc                       e Zd Z fdZd Zy)test_reset_hard.<locals>.Ac                 (    j                  d       y )Nr   )append)r   monitors    r(   __del__z"test_reset_hard.<locals>.A.__del__x  s    NN1r'   c                      y)Nz<A instance>r&   r   s    r(   __repr__z#test_reset_hard.<locals>.A.__repr__z  s    !r'   N)r#   r$   r%   rK  rN  )rJ  s   r(   r;   rG  w  s    		"r'   r;   r9   r   z-fr   )objectrM   r   rO   rN   )r;   rJ  s    @r(   test_reset_hardrP  u  s\    G"F " sCKKLLb==w%qc>>r'   c                       e Zd Zd Zy)TestXdelc                 H   d}| j                  |       t        j                  dd| j                  z         t        j	                  d       t        j
                  d   j                  }|g k(  sJ t        j                  dd       t        j                  d       |dgk(  sJ y	)
z3Test that references from %run are cleared by xdel.z`class A(object):
    monitor = []
    def __del__(self):
        self.monitor.append(1)
a = A()
r  %sr9   r;   xdelr   r   N)	mktmprM   rN   fnamerO   r   rJ  gccollect)r   srcrJ  s      r(   	test_xdelzTestXdel.test_xdel  s    
 	

35$"34S++c"**"}}63' 	

11#~~r'   N)r#   r$   r%   r[  r&   r'   r(   rR  rR    s    r'   rR  c                       y)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(   doctest_whor]    r   r'   c                  ~     G d dt               }  |        t        j                  d<   t        j                  dd       y)z@Check that whos is protected against objects where repr() fails.c                       e Zd Zd Zy)test_whos.<locals>.Ac                     t               r   )	ExceptionrM  s    r(   rN  ztest_whos.<locals>.A.__repr__  s
    +r'   N)r#   r$   r%   rN  r&   r'   r(   r;   r`    s    	r'   r;   r9   whosrL   N)rO  rM   r   rN   )r;   s    r(   	test_whosrd    s0    F  sCKKvr"r'   c                       y)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(   doctest_precisionrf    r   r'   c                       y)zTest 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(   test_debug_magicrh    r   r'   c                       y)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(   test_debug_magic_localsrj    r   r'   c                      t        j                  d      5  t        j                  d       d d d        t        j                  d      5  t        j                  d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nzdict.fromkeysz	dict.fr*?u   π.is_integeru   π = 3.14;
π.is_integ*?)r   r   rM   rO   r&   r'   r(   test_psearchrl    sb    		) "[!"		) 2012 2" "2 2s   A(	A4(A14A=c                  6   t         j                  d       t         j                  dd       t         j                  dd       t         j                  dd       t         j                  dd       t         j                  dd       t         j                  dd       y	)
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)rM   r   rN   r&   r'   r(   test_timeit_shlexrn    su    FF!"x!ABx!45x!ABx!78x!89x!9:r'   c                      t         d        } t        j                  dd       t        j                  d   dk(  sJ t        j	                  ddd       t        j                  d   dk(  sJ y	)
z)Test %%timeit with IPython special syntaxc                 6    t               }| |j                  d<   y N
lmagic_outr	   r   rV   r   s     r(   lmagicz*test_timeit_special_syntax.<locals>.lmagic      ]#'

< r'   r+  z-n1 -r1 %lmagic my linerr  my linez-n1 -r1%lmagic my line2my line2Nr   rM   rN   r   rX   ru  s    r(   test_timeit_special_syntaxr|    sh    ( (
 x!:;;;|$	111x,>?;;|$
222r'   c                  8    t         j                  dd      } | J y)z.
    test whether timeit -o return object
    r+  z-n10 -r10 -o 1Nrd   ress    r(   test_timeit_returnr    s!    
 

X&6
7C??r'   c                      t        j                  d      5  t        j                  d       ddd       y# 1 sw Y   yxY w)z+
    test quiet option of timeit magic
    loopsz%timeit -n1 -r1 -q 1N)r   r  rM   rO   r&   r'   r(   test_timeit_quietr    s4     
		G	$ -+,- - -s   5>c                      t        j                  d      5  t        j                  dd      } d d d         J y # 1 sw Y   xY w)Nr  r+  z-n1 -r1 -q -o 1)r   r  rM   rN   r~  s    r(   test_timeit_return_quietr    sB    			G	$ >  +<=>OO> >s	   :Ac                      t        j                  t              5  t        j	                  dd       d d d        y # 1 sw Y   y xY w)Nr+  return)rF   rG   rH   rM   rN   r&   r'   r(   test_timeit_invalid_returnr    s3    	{	# /8X./ / /s	   :Ac                      t         d        } t        j                  dd       t        j                  d   dk(  sJ t        j	                  ddd       t        j                  d   dk(  sJ y	)
z'Test %%prun with IPython special syntaxc                 6    t               }| |j                  d<   y rq  rs  rt  s     r(   ru  z(test_prun_special_syntax.<locals>.lmagic&  rv  r'   prunz-q %lmagic my linerr  rw  z-qrx  ry  Nrz  r{  s    r(   test_prun_special_syntaxr  #  sj     ( (
 v34;;|$	111vt%78;;|$
222r'   c                  ^    t         j                  d       t         j                  d   dk(  sJ y)z9Test that prun does not clobber string escapes (GH #1302)zprun -q x = '\t'r   	N)rM   r
   r   r&   r'   r(   test_prun_quotesr  3  s(     II!";;st###r'   c                  :   t        d       t        j                  D ]  } t        d|         t        dt        j                                t        j                  t        t        j                  d       t        j                  j                  t        j                  j                  t              d      }t        j                  j                  d|       	 t        j                  j                  dd        t!                t        j#                  dd       t        j                  d   d	k(  sJ t        j#                  d
d       dt        j                  vsJ 	 t        j                  j%                  |       y # t        j                  j%                  |       w xY w)Nz	sys.path: CWDzload_ext daft_extensiondaft_extensionr   arqload_ext   
unload_ext)printr   r   r   r2  rF   rG   ImportErrorrM   r
   r   r   r   insertr   r  r   rN   remove)p	daft_paths     r(   test_extensionr  :  s   	+XX c1	%
MM+syy*CDRWW__X68HIIHHOOAy!#t$:'78{{5!S(((<)9:CKK'''	"	"s   BE9 9!Fc                     t        j                  d       t               } | j                  j	                          g d}t        |d      D ]!  \  }}| j                  j                  ||       # t               5 }t        j                  j                  |d      }| j                  dd|z         d d d        y # 1 sw Y   y xY w)Nnbformat)r   r   u   print('noël, été', b())r   r   znb.ipynbnotebookrT  )rF   importorskipr	   r   r   r   r   r   r   r   r   rN   )rM   r   r   r   r   outfiles         r(   test_notebook_export_jsonr  O  s    

#
-CKDD* 13((C01		 7'',,r:.:tg~67 7 7s   96B88Cc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestEnvc                 n    t         j                  dd      }| j                  t        |t                     y )NenvrL   )rM   rN   
assertTruerP   dictr   r  s     r(   test_envzTestEnv.test_env]  s'      +
3-.r'   c                 @   t         j                  dd      }d}t        j                  j	                  t
        j                  ddddd      5  t         j                  dd      }d d d        |d   |k(  sJ |d	   |k(  sJ |d
   |k(  sJ |d   dk(  sJ y # 1 sw Y   2xY w)Nr  rL   z<hidden>abc123ssshhhabc)API_KEYSECRET_THINGJUPYTER_TOKENVARr  r  r  r  )rM   rN   r   patchr  r   environ)r   r  hiddens      r(   test_env_secretzTestEnv.test_env_secreta  s      +ZZ__JJ# (!#	
 		0 $$UB/C		0 9~'''>"f,,,?#v---5zU"""		0 		0s   BBc                 |   t         j                  dd      }| j                  |d        | j                  t        j                  d   d       | j                  t         j                  dd      d       t         j                  dd      }| j                  |d        | j                  t        j                  d   d       y )Nr  zvar val1varval1zvar=val2val2rM   rN   assertEqualr   r  r  s     r(   test_env_get_set_simplezTestEnv.test_env_get_set_simples  s      
3d#E*F3++E596B  
3d#E*F3r'   c                 |   t         j                  dd      }| j                  |d        | j                  t        j                  d   d       | j                  t         j                  dd      d       t         j                  dd      }| j                  |d        | j                  t        j                  d   d       y )Nr  zvar 'val1 '' 'val2r  z'val1 '' 'val2zvar=val2 val3="val4zval2 val3="val4r  r  s     r(   test_env_get_set_complexz TestEnv.test_env_get_set_complex|  s      (<=d#E*,<=++E59;KL  (=>d#E*,=>r'   c                 2    | j                  t        d        y )Nc                  .    t         j                  dd      S )Nset_envr  rd   r&   r'   r(   <lambda>z0TestEnv.test_env_set_bad_input.<locals>.<lambda>  s    c.@.@E.R r'   assertRaisesr   rM  s    r(   test_env_set_bad_inputzTestEnv.test_env_set_bad_input      *&RSr'   c                 2    | j                  t        d        y )Nc                  .    t         j                  dd      S )Nr  zvar A=Brd   r&   r'   r(   r  z1TestEnv.test_env_set_whitespace.<locals>.<lambda>  s    c.@.@	.R r'   r  rM  s    r(   test_env_set_whitespacezTestEnv.test_env_set_whitespace  r  r'   N)	r#   r$   r%   r  r  r  r  r  r  r&   r'   r(   r  r  [  s"    /#$4?TTr'   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)CellMagicTestCasec                     t         j                  |dd      }|dk(  sJ t         j                  d|z   dz          t         j                  d   dk(  sJ y )Nr9   r:   )r9   r:   z%%z c
d
r   )czd
)rM   rX   rO   r   )r   r
   r   s      r(   check_identzCellMagicTestCase.check_ident  sP      S1j   TE\I-.{{3<///r'   c                 >    t         d        }| j                  d       y)z!Cell magic using simple decoratorc                 
    | |fS r   r&   rV   rW   s     r(   cellmz:CellMagicTestCase.test_cell_magic_func_deco.<locals>.cellm  s    :r'   r  N)r   r  r   r  s     r(   test_cell_magic_func_decoz+CellMagicTestCase.test_cell_magic_func_deco  s$    		 
	 	!r'   c                 Z    d }t         j                  |dd       | j                  d       y)zCell magic manually registeredc                 
    | |fS r   r&   r  s     r(   r  z4CellMagicTestCase.test_cell_magic_reg.<locals>.cellm  s    :r'   rW   cellm2N)rM   r_   r  r  s     r(   test_cell_magic_regz%CellMagicTestCase.test_cell_magic_reg  s)    	 	##E68<"r'   c                     t          G d dt                     }t        j                  |       | j	                  d       y)z Cell magics declared via a classc                       e Zd Zed        Zy)9CellMagicTestCase.test_cell_magic_class.<locals>.MyMagicsc                 
    ||fS r   r&   r   rV   rW   s      r(   cellm3z@CellMagicTestCase.test_cell_magic_class.<locals>.MyMagics.cellm3      Tz!r'   N)r#   r$   r%   r   r  r&   r'   r(   MyMagicsr    s     " "r'   r  r  N)r   r   rM   r   r  )r   r  s     r(   test_cell_magic_classz'CellMagicTestCase.test_cell_magic_class  s9    		"v 	" 
	" 	H%"r'   c                     t          G d dt                     }t        j                  |       | j	                  d       t        j                  d      }|dk(  sJ y)z$Cell magics declared via a class, #2c                   (    e Zd Z ed      d        Zy);CellMagicTestCase.test_cell_magic_class2.<locals>.MyMagics2cellm4c                 
    ||fS r   r&   r  s      r(   cellm33zCCellMagicTestCase.test_cell_magic_class2.<locals>.MyMagics2.cellm33  r  r'   N)r#   r$   r%   r   r  r&   r'   r(   	MyMagics2r    s     !" ""r'   r  r  r  N)r   r   rM   r   r  find_cell_magic)r   r  c33s      r(   test_cell_magic_class2z(CellMagicTestCase.test_cell_magic_class2  sU    		" 	" 
	" 	I&"!!),d{{r'   N)r#   r$   r%   r  r  r  r  r  r&   r'   r(   r  r    s    0"#
#r'   r  c            	      .   t               } t               5 }t        j                  j	                  |d      }| j                  d|dj	                  ddg             t        |      j                  d      }d|v sJ d|v sJ 	 d	d	d	       y	# 1 sw Y   y	xY w)
zBasic %%writefilefile1	writefilerg   line1line2utf-8encodingline1
Nr	   r   r   r   r   rX   r   	read_textr   r   rW  ss       r(   	test_filer    s    	B		 R)
II		
 K!!7!3A~~!||     A,BBc            	      .   t               } t               5 }t        j                  j	                  |d      }| j                  d|dj	                  ddg             t        |      j                  d      }d|v sJ d|v sJ 	 d	d	d	       y	# 1 sw Y   y	xY w)
z-Basic %%writefile with embedded single quotesz'file1'r  rg   r  r  r  r  r  Nr  r  s       r(   test_file_single_quoter         
B		 R+
II		
 K!!7!3A~~!||  r  c            	      .   t               } t               5 }t        j                  j	                  |d      }| j                  d|dj	                  ddg             t        |      j                  d      }d|v sJ d|v sJ 	 d	d	d	       y	# 1 sw Y   y	xY w)
z-Basic %%writefile with embedded double quotesz"file1"r  rg   r  r  r  r  r  Nr  r  s       r(   test_file_double_quoter    r   r  c            	      L   t               } t               5 }t        j                  j	                  |d      }|| j
                  d<   | j                  dddj	                  ddg             t        |      j                  d	      }d
|v sJ d|v sJ 	 ddd       y# 1 sw Y   yxY w)z%%writefile $filenamer  filenamer  z	$filenamerg   r  r  r  r  r  N)	r	   r   r   r   r   r   rX   r   r  r  s       r(   test_file_var_expandr    s    	B		 R)!&

:
II		
 K!!7!3A~~!||  s   A;BB#c            	      p   t               } t               5 }t        j                  j	                  |d      }| j                  d|dj	                  ddg             t        j                  |d      5 }|j                         }ddd       d	v sJ d|v sJ 	 ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)
z%%writefile with unicode cellr  r  rg   u   liné1u   liné2r  r  Nu   liné1
)	r	   r   r   r   r   rX   ioopenread)r   r   rW  r   r  s        r(   test_file_unicoder
    s    	B		 	R)
+uejj:
 / 	 WWUW- 	A	Q1}}	 		 		 	s$   AB,1B B, B)	%B,,B5c            	      |   t               } t               5 }t        j                  j	                  |d      }| j                  d|dj	                  ddg             | j                  dd|z  dj	                  ddg             t        |      j                  d	
      }d|v sJ d|v sJ 	 ddd       y# 1 sw Y   yxY w)z%%writefile -a amends filesfile2r  rg   r  r  z-a %sline3line4r  r  r  zline3
Nr  r  s       r(   test_file_amendr  #  s    	B		 R)
II		
 	eOII		
 K!!7!3A~~A~~1  s   BB22B;c            	          t               } t               5 }d}| j                  dd|z  dj                  ddg             t	        |      j                  d      }d	|v sJ d|v sJ 	 d
d
d
       y
# 1 sw Y   y
xY w)z%%file with spaces in filenamez	file namefiler/  rg   r  r  r  r  r  N)r	   r   rX   r   r   r  r  s       r(   test_file_spacesr  A  s    	B	"	$ 
UNII		
 K!!7!3A~~!||  s   AA00A9c                      t               } dg| j                  j                  _        t	        j                  |       }d|j
                  d   v sJ y )Nwhodar\   rW   )r	   rc   ScriptMagicsscript_magicsr   magics)r   sms     r(   test_script_configr  U  sD    	B,39BII(			2	&Bbii''''r'   c                      t               } | j                  ddt        j                   d       | j                  d   j                         dk(  sJ y )Nr   z--out output print('hi')r   hir	   rX   r   
executabler   ri   r   s    r(   test_script_outr  \  sG    	Bh-/? @-P::h%%'4///r'   c                      t               } | j                  ddt        j                   d       | j                  d   j                         dk(  sJ y )Nr   z--err error +import sys; print('hello', file=sys.stderr)errorrE   r  r   s    r(   test_script_errr#  b  sN    	B
s~~&'5
 ::g$$&'111r'   c                  
   t               } | j                  ddt        j                   dj	                  g d             | j
                  d   j                         dk(  sJ | j
                  d   j                         dk(  sJ y )	Nr   z--out output --err error rg   z
import sysr  zprint('hello', file=sys.stderr)r   r  r"  rE   )r	   rX   r   r  r   r   ri   r   s    r(   test_script_out_errr&  l  s|    	B
#CNN#34			

 ::h%%'4///::g$$&'111r'   c                    K   t               } | j                  ddt        j                   d       | j                  d   j                          d {   j                         dk(  sJ | j                  d   j                         sJ y 7 7w)Nr   z--bg --out output r  r      hir	   rX   r   r  r   r	  ri   at_eofr   s    r(   test_script_bg_outr+  }  sx     	Bh"4S^^4D E}U**X&++--446%???::h&&((( .   ABB	8Bc                    K   t               } | j                  ddt        j                   d       | j                  d   j                          d {   j                         dk(  sJ | j                  d   j                         sJ y 7 7w)Nr   z--bg --err error r!  r"     hellor)  r   s    r(   test_script_bg_errr/    s~     	B
CNN+,5
 **W%**,,335AAA::g%%''' -r,  c                    K   t               } | j                  ddt        j                   dj	                  g d             | j
                  d   j                          d {   j                         dk(  sJ | j
                  d   j                          d {   j                         dk(  sJ | j
                  d   j                         sJ | j
                  d   j                         sJ y 7 7 Xw)	Nr   z--bg --out output --err error rg   r%  r   r(  r"  r.  )	r	   rX   r   r  r   r   r	  ri   r*  r   s    r(   test_script_bg_out_errr1    s     	B
((89			

 **X&++--446%???**W%**,,335AAA::h&&(((::g%%''' .,s%   A C5"C1#7C5C3AC53C5c                  .  K   t               } | j                  ddt        j                   dj	                  g d             | j
                  d   }|j                          d {    |j                  dk(  sJ |j                  j                          d {   j                         dk(  sJ |j                  j                          d {   dk(  sJ |j                  j                         sJ |j                  j                         sJ y 7 7 y7 Fw)	Nr   z--bg --out output --proc p rg   r%  r  r   r(  r'   )r	   rX   r   r  r   r   wait
returncoderh   r	  ri   r  r*  )r   r  s     r(   test_script_bg_procr5    s     	B
%cnn%56			

 	

3A
&&(NN<<1((--/!((*e333((--/!c)))88??88?? !!s7   A"D$D%2DD4DDADDDc                      t               } dD ]+  }	 t        |       || j                  j                  d   v r+J  y # t        $ r Y :w xY w)N)shbashperlrubyrW   )r	   r   magics_managerr  rb  )r   r   s     r(   test_script_defaultsr<    sY    	B- ;	;SM "++226::::;  		s   <	AAc                   H    e Zd ZdZ ed      d        Z ed      d        Zy)FooFooz%class with both %foo and %%foo magicsr   c                      y)zI am line fooNr&   )r   rV   s     r(   line_foozFooFoo.line_foo       	r'   c                      y)zI am cell foo, not line fooNr&   r  s      r(   cell_foozFooFoo.cell_foo  rA  r'   N)r#   r$   r%   __doc__r   r@  r   rC  r&   r'   r(   r>  r>    s5    /   r'   r>  c                     t               } | j                  j                  t               | j	                  d      }|d   du sJ |d   du sJ | j	                  d      }|d   du sJ |d   du sJ |d   t        j
                  j                  k(  sJ | j	                  d      }|d   du sJ |d   du sJ |d   t        j                  j                  k(  sJ y)	z4%%foo and %foo magics are distinguishable to inspectr   foundTismagicz%%foo	docstringz%fooN)r	   r;  registerr>  object_inspectrC  rD  r@  )r   oinfos     r(   test_line_cell_inforL    s    	Bv&e$E>T!!!t###g&E>T!!!t###!8!8888f%E>T!!!t###!8!8888r'   c                      t               } t        |       }t        |       }| j                  }|j                  |       |j                  d   d   j
                  |u sJ |j                  |       |j                  d   d   j
                  |u sJ y )NrV   r   )r	   r>  r;  rI  r  __self__)r   foo1foo2mms       r(   test_multiple_magicsrR    s    	B":D":D			BKK99VU#,,444KK99VU#,,444r'   c                     t               } | j                  }| j                  dd       d|j                  d   v sJ d|j                  d   v sJ | j                  dd       d|j                  d   vsJ d|j                  d   v sJ | j                  dd       | j                  d	d
      | j                  dd
      k(  sJ | j                  ddt	        j
                  d      z          d|j                  d   v sJ y)zTest %alias_magic.alias_magicztimeit_alias timeittimeit_aliasrV   rW   z--cell timeit_cell_alias timeittimeit_cell_aliasz--line env_alias envr  rL   	env_aliasz&--line history_alias history --params r  history_aliasN)r	   r;  rN   r  shlexquote)r   rQ  s     r(   test_alias_magicr[    s   	B			B m%:;RYYv....RYYv.... m%FGbii&7777"))F"3333 m%;<UB'2+<+<["+MMMM ?%++cBRR bii////r'   c                  r   t               } | j                  j                          g d}t        |d      D ]!  \  }}| j                  j	                  ||       # t               5 }t        j                  j                  |d      }| j                  dd|z         t        |      j                  d      }|j                  |d	         dk(  sJ d
|v sJ | j                  dd|z         t        |      j                  d      }|j                  |d	         dk(  sJ d
|v sJ 	 ddd       y# 1 sw Y   yxY w)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   r   r   r   rN   r   r  count)r   r   r   r   tmpdirr  contents          r(   	test_saverc  	  s+   	B>DD* 03
''3/0		 	*ww||FM2
&)d"23t*&&&8}}T!W%***')))
&,"56t*&&&8}}T!W%***')))	* 	* 	*s   $B?D--D6c                     t               } | j                  j                          g d}t        |d      D ]!  \  }}| j                  j	                  ||       # t               5 }t        j                  j                  |d      }| j                  d|       t        |      j                  d      }t        d      }||k(  sJ 	 d d d        y # 1 sw Y   y xY w)	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   r   r   r   rN   r   r  r   )r   r   r   r   ra  r   rb  expected_contents           r(   test_save_with_no_argsrf    s    	BIDD* 03
''3/0 
	 +ww||FM2
&$'t*&&&8!
 ****+ + +s   $A CCc                     t               } | j                  dd       | j                  dd       d| j                  d<   | j                  dd       d| j                  d<   | j                  dd       | j                  d   dk(  sJ | j                  dd	       d| j                  d<   | j                  dd       | j                  d   dk(  sJ y
)zTest %store.r  
storemagicstorez-z*   r  '   z-rz-d varN)r	   rN   r   r   s    r(   
test_storerl  3  s    	Bj,/ gt$BJJugu%BJJugt$::e"""gx(BJJugt$::e"""r'   c                 n   t               }t        j                  |      }ddg}|j                  | d      \  }}	|j	                  ||	||      \  }
}}|||
k(  sJ |8t        j                  |
dd      5 }|j                         }d d d        |k(  sJ |dk7  r||k(  sJ |||k(  sJ y y # 1 sw Y   'xY w)NrL   zprxn:r&  r  r  r   )r	   r   
CodeMagicsr   _find_edit_targetr  r  r	  )arg_sexp_filename
exp_linenoexp_contentsexp_is_tempr   M	last_callr   argsr  linenois_tempr   contentss                  r(   _run_edit_testr{  F  s     
BABIg.ID ! 3 3BdI NHfgx'''WWXsW5 	 vvxH	 x'''RV###g%%% 	  	 s   4B++B4c                     t               } | j                  }| j                  dd       t        j                  t
        j                        5 }t        d       ddd       j                  j                  |k(  sJ y# 1 sw Y   %xY w)z&%edit on interactively defined objectsdef foo(): return 1Tr   r   N)
r	   execution_countrO   rF   rG   r   InteractivelyDefinedr{  r   index)r   r%  es      r(   test_edit_interactiver  \  sl    	B
AKK%TK:	t00	1 Qu77==A s   A==Bc                  z    t               } | j                  dd       t        d| j                  d   d   d       y)	z%edit [cell id]r}  Tr   r$  r   r   )rs  rt  N)r	   rO   r{  r   r   s    r(   test_edit_cellr  g  s6    	BKK%TK: 3RZZ%5a%8dKr'   c                      t        dd       y)z
%edit fileztest file.py)rq  N)r{  r&   r'   r(   test_edit_fnamer  p  s     >?r'   c                      t               } | j                  dd       t        j                  d      5  | j                  dd       d d d        | j                  dd       y # 1 sw Y   xY w)Nbookmarkbmnamez-lz	-d bmname)r	   rN   r   r   r   s    r(   test_bookmarkr  u  sZ    	Bj(+		" ,
*d+,j+., ,s   A  A)c                     t               } | j                  j                  d   }d|_        | j	                  dd      }t        j                  d      5 } ||      }d d d        t              ddgk(  sJ g k(  sJ y # 1 sw Y   #xY w)Nzapplication/jsonTlsmagicrL   )recordrW   rV   )r	   display_formatter
formattersenabledrN   warningscatch_warningsrk   )r   json_formatterr  wjs        r(   test_ls_magicr  |  s    	B))445GHN!N	2.G		 	 	- $7#$!9((((7N7$ $s   	A>>Bc                  X    d }  | d      dk(  sJ  | d      dk(  sJ  | d      dk(  sJ y )Nc                 j    | j                         }dj                  t        j                  |            S )Nrg   )rt   r   r   strip_initial_indent)r  liness     r(   siiz&test_strip_initial_indent.<locals>.sii  s'    yy2259::r'   z  a = 1
b = 2za = 1
b = 2z  a
    b
cza
  b
cza
  br&   )r  s    r(   test_strip_initial_indentr    sB    ;  N222;...x=H$$$r'   c            
      0   dt         j                  j                  _        t	        j                  t               } t               5 }	 t        j                  t        j                  d            5  | j                  dj                  t        j                  j                  |d                   d d d        t         j                  j!                          	 d d d        y # 1 sw Y   1xY w# t         j                  j!                          w xY w# 1 sw Y   y xY w)NFr\   Activating.*z-q {}zquiet_from_arg.log)rM   rc   LoggingMagicsquietr   r   r   r  rr   compilelogstartformatr   r   r   loggerlogstoplmr   s     r(   !test_logging_magic_quiet_from_argr    s    %*CJJ"			S	)B		 !	!##BJJ~$>? AGNNR)=>@ AA JJ ! !A A JJ ! !s<   D(C).?C-C)5DC&	"C)) D		DDc                     dt         j                  j                  _        t	        j                  t               } t               5 }	 t        j                  t        j                  d            5  | j                  t        j                  j                  |d             d d d        t         j                  j                          	 d d d        y # 1 sw Y   1xY w# t         j                  j                          w xY w# 1 sw Y   y xY w)NTr\   r  zquiet_from_config.log)rM   rc   r  r  r   r   r   r  rr   r  r  r   r   r   r  r  r  s     r(   $test_logging_magic_quiet_from_configr    s    %)CJJ"			S	)B		 !	!##BJJ~$>? GBGGLL-DEFG JJ ! !G G JJ ! !<   C=(C.0CC&C=C	C C::C==Dc                     dt         j                  j                  _        t	        j                  t               } t               5 }	 t        j                  t        j                  d            5  | j                  t        j                  j                  |d             d d d        t         j                  j                          	 d d d        y # 1 sw Y   1xY w# t         j                  j                          w xY w# 1 sw Y   y xY w)NFr\   r  znot_quiet.log)rM   rc   r  r  r   r   r   r   rr   r  r  r   r   r   r  r  r  s     r(   test_logging_magic_not_quietr    s    %*CJJ"			S	)B		 !	!N!;< ?BGGLL_=>? JJ ! !? ? JJ ! !r  c                      dt         j                  d<   g t         j                  d<   t         j                  dd       t         j                  d   dgk(  sJ y )N   r9   r:   timezb.append("{a}")z{a}r,  r&   r'   r(   test_time_no_var_expandr    sH    CKKCKKv01;;sw&&&r'   c                  0    t         j                  dd       y)zDTest valid timeit arguments, should not cause SyntaxError (GH #1269)r+  z-n1 -r1 a=('#')Nrd   r&   r'   r(   test_timeit_argumentsr    s    x!23r'   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                  |   t        j                  t              5  t        j	                  dd       d d d        t        j                         } t               5 }t        |      5  t        |      }|dz  }|j                  t               t        j                  j                  dt        |j                        j                  d d        t        j                   d      5  t        j	                  dd       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)N	lazy_linerL   zlazy_magic_module.pyz	Lazy Line)rF   rG   r   r   rN   r   r2  r   r   r   
write_textMINIMAL_LAZY_MAGICr;  register_lazyr   r   r   )r7  ra  ptempdirr   s       r(   test_lazy_magicsr    s    	z	" +
+r*+ yy{H		 3!&) 	3F|H22BMM,-++Kbgg9K9KCR9PQ- 3!!+r23	33 3+ +3 3	3 	33 3sH   DD2#A;D&D5D&=D2DD#D&&D/	+D22D;zT
print('Loaded my_tmp')
if __name__ == "__main__":
    print('I just ran a script')
c                     t               5 } t        j                  j                  | d      t	              j                  t        d       ddlddl G fddj                  j                  j                  j                        }t        j                  j                  d |              t               5 }t         j#                  dd	       t         j%                  d
       ddd       d}|j&                  k(  sJ t        j                  j)                  d       ddd       y# 1 sw Y   DxY w# 1 sw Y   yxY w)z3Test that a module can be loaded via an import hookz	my_tmp.pyr  r  r   Nc                   .    e Zd Zdfd	Z fdZ fdZy)8test_run_module_from_import_hook.<locals>.MyTempImporterNc                 H    |dk(  rj                   j                  ||       S y Nmy_tmp)utilspec_from_loader)r   fullnamer   target	importlibs       r(   	find_speczBtest_run_module_from_import_hook.<locals>.MyTempImporter.find_spec  s'    x'$>>::8TJJ (r'   c                     |dk(  sJ S r  r&   )r   r  fullpaths     r(   get_filenamezEtest_run_module_from_import_hook.<locals>.MyTempImporter.get_filename  s    8+++r'   c                 r    t        |      j                        sJ t              j                  d      S )Nr  r  )r   samefiler  )r   r   r  s     r(   get_datazAtest_run_module_from_import_hook.<locals>.MyTempImporter.get_data  s3    Dz**8444H~///AAr'   r   )r#   r$   r%   r  r  r  )r  r  s   r(   MyTempImporterr    s    K Br'   r  r  z	-m my_tmpzimport my_tmpz0Loaded my_tmp
I just ran a script
Loaded my_tmp
)r   r   r   r   r   r  TEST_MODULEimportlib.abcimportlib.utilr  MetaPathFinderSourceLoaderr   	meta_pathr  r   rM   rN   rO   rh   r  )ra  r  rm   r   r  r  s       @@r(    test_run_module_from_import_hookr    s    		 77<<4X!!+!@	BY]]999==;U;U 	B 	Q 01 	*uk2LL)	* G(((!; ,	* 	*- s$   B/D7<,D+(:D7+D4	0D77E )Nr   NN)rD  rX  r  r   rr   rY  r   r  r  r   r   pathlibr   textwrapr   unittestr   r   rF   r   r	   IPython.corer
   IPython.core.errorr   IPython.core.magicr   r   r   r   r   r   IPython.core.magicsr   r   r   r   r   IPython.testingr   decr   r   IPython.utils.ior   IPython.utils.processr   IPython.utils.tempdirr   r   IPython.utils.syspathcontextr   test_debuggerr   tempfiler    r"   r7   rC   rI   rT   rY   ra   re   ro   ru   r   r   r   r   r   r   r   r   r   skipif_not_numpyr   r   r   r   r   r   r   r   r  r  
skip_win32r	  r  r  r  r  r  r!  r(  r-  r9  r>  rD  rP  TempFileMixinrR  r]  rd  rf  rh  rj  rl  rn  r|  r  r  r  r  skipifprofiler  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r#  r&  r+  r/  r1  r5  r<  r>  rL  rR  r[  rc  rf  rl  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&   r'   r(   <module>r     s^   ( 	 	 	 	  
  '    #    )  F E - ' + * O = ' ' %%,, %  %"
<.88?%9W$!#
@D"
4	! " "(,+F.h .26$# 5Dp " " -$)$+2#*&"+r .2#&
2;3-
/ I%&3 '3 I%&$ '$#*	7.Th .Tb3 3j(  (  (*<((022")((&.; 
V 
 
9&504*&+.#& (,#%%)$(&,L@
/%	!!!'4
 23 r'   