
    }eK                        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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
 Zd Zd Zej:                  d        Zej                  dk(  e_        ej@                  d        Z!ej                  dk7  e!_        d Z" G d dejF                        Z$ G d dejF                        Z% G d dejL                        Z'd Z(d Z)d Z*d Z+y)a+  Tests for code execution (%run and related), which is particularly tricky.

Because of how %run manages namespaces, and the fact that we are trying here to
verify subtle object deletion and reference counting issues, the %run tests
will be kept in this separate file.  This makes it easier to aggregate in one
place the tricks needed to handle it; most other magics are much easier to test
and we do so in a common test_magic file.

Note that any test using `run -i` should make sure to do a `reset` afterwards,
as otherwise it may influence later tests.
    N)join)patch)TemporaryDirectory)debugger)
decorators)tools)capture_outputc                       y)aV  Very nasty problem with references held by multiple runs of a script.
    See: https://github.com/ipython/ipython/issues/141

    In [1]: _ip.clear_main_mod_cache()
    # random

    In [2]: %run refbug

    In [3]: call_f()
    lowercased: hello

    In [4]: %run refbug

    In [5]: call_f()
    lowercased: hello
    lowercased: hello
    N r       =/usr/lib/python3/dist-packages/IPython/core/tests/test_run.pydoctest_refbugr   '       r   c                       y)av  Check that %run doesn't damage __builtins__.

    In [1]: import tempfile

    In [2]: bid1 = id(__builtins__)

    In [3]: fname = tempfile.mkstemp('.py')[1]

    In [3]: f = open(fname, 'w', encoding='utf-8')

    In [4]: dummy= f.write('pass\n')

    In [5]: f.flush()

    In [6]: t1 = type(__builtins__)

    In [7]: %run $fname

    In [7]: f.close()

    In [8]: bid2 = id(__builtins__)

    In [9]: t2 = type(__builtins__)

    In [10]: t1 == t2
    Out[10]: True

    In [10]: bid1 == bid2
    Out[10]: True

    In [12]: try:
       ....:     os.unlink(fname)
       ....: except:
       ....:     pass
       ....:
    Nr   r   r   r   doctest_run_builtinsr   ;   r   r   c                       y)zTest option parser in %run.

    In [1]: %run print_argv.py
    []

    In [2]: %run print_argv.py print*.py
    ['print_argv.py']

    In [3]: %run -G print_argv.py print*.py
    ['print*.py']

    Nr   r   r   r   doctest_run_option_parserr   b   r   r   c                       y)a,  Test option parser in %run (Linux/OSX specific).

    You need double quote to escape glob in POSIX systems:

    In [1]: %run print_argv.py print\\*.py
    ['print*.py']

    You can't use quote to escape glob in POSIX systems:

    In [2]: %run print_argv.py 'print*.py'
    ['print_argv.py']

    Nr   r   r   r   #doctest_run_option_parser_for_posixr   q   r   r   win32c                       y)a  Test option parser in %run (Windows specific).

    In Windows, you can't escape ``*` `by backslash:

    In [1]: %run print_argv.py print\\*.py
    ['print\\\\*.py']

    You can use quote to escape glob:

    In [2]: %run print_argv.py 'print*.py'
    ["'print*.py'"]

    Nr   r   r   r   %doctest_run_option_parser_for_windowsr      r   r   c                       y)a/  Test that resetting doesn't cause errors in __del__ methods.

    In [2]: class A(object):
       ...:     def __del__(self):
       ...:         print(str("Hi"))
       ...:

    In [3]: a = A()

    In [4]: get_ipython().reset(); import gc; x = gc.collect(0)
    Hi

    In [5]: 1+1
    Out[5]: 2
    Nr   r   r   r   doctest_reset_delr      r   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestMagicRunPassc                 *    d}| j                  |       y )Nza = [1,2,3]
b = 1)mktmp)selfcontents     r   setUpzTestMagicRunPass.setUp   s    &

7r   c                 P    t               }|j                  d| j                         y Nrunget_ipythonrun_line_magicfnamer   _ips     r   run_tmpfilezTestMagicRunPass.run_tmpfile   s    m 	5$**-r   c                 V    t               }|j                  dd| j                  z         y )Nr$   z-p %sr%   r)   s     r   run_tmpfile_pzTestMagicRunPass.run_tmpfile_p   s$    m 	5'DJJ"67r   c                     t               }t        |j                  d         }| j                          t        |j                  d         }||k(  sJ y)z,Check that %run doesn't damage __builtins__ __builtins__N)r&   iduser_nsr+   )r   r*   bid1bid2s       r   test_builtins_idz!TestMagicRunPass.test_builtins_id   sG    m#++n-.#++n-.t||r   c                     t               }| j                          t        |j                  d         t        t              k(  sJ y)a  Check that the type of __builtins__ doesn't change with %run.

        However, the above could pass if __builtins__ was already modified to
        be a dict (it should be a module) by a previous use of %run.  So we
        also check explicitly that it really is a module:
        r/   N)r&   r+   typer1   sysr)   s     r   test_builtins_typez#TestMagicRunPass.test_builtins_type   s7     mCKK/0DI===r   c                 $    | j                          y)z^Test that the option -p, which invokes the profiler, do not
        crash by invoking execfileN)r-   r   s    r   test_run_profilez!TestMagicRunPass.test_run_profile   s     	r   c                 @   t               }t        j                  dg      5  |j                  dd| j                  z         d d d        t        j                  dg      5  |j                  dd| j                  z         d d d        y # 1 sw Y   HxY w# 1 sw Y   y xY w)Ncr$   -d %s)r&   tt
fake_inputr'   r(   r)   s     r   test_run_debug_twicez%TestMagicRunPass.test_run_debug_twice   s    m]]C5! 	<ug

&:;	<]]C5! 	<ug

&:;	< 	<	< 	<	< 	<s    B BBBc                    t               }t        j                  g d      5  |j                  dd| j                  z         ddd       t        j                  dg      5  t        j
                  d      5  |j                  dd| j                  z         ddd       ddd       y# 1 sw Y   fxY w# 1 sw Y   xY w# 1 sw Y   yxY w)zMake a valid python temp file.)zb 2r=   r=   r$   r>   Nr=   KeyError)r&   r?   r@   r'   r(   AssertNotPrintsr)   s     r   $test_run_debug_twice_with_breakpointz5TestMagicRunPass.test_run_debug_twice_with_breakpoint   s    m]],- 	<ug

&:;	< ]]C5! 	@##J/ @""5'DJJ*>?@	@ 	@	< 	<@ @	@ 	@s/    B' B?6 B3B?'B03B<	8B??CN)__name__
__module____qualname__r!   r+   r-   r4   r8   r;   rA   rE   r   r   r   r   r      s+    .8	>
<@r   r   c                       e Zd Zd Zej
                  j                   ej                         dk(  d      d        Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestMagicRunSimplec                     d}| j                  |       t        j                  dt        | j                               t        j                  d       t        j                  d   du sJ y)z(Test that simple class definitions work.z%class foo: pass
def f(): return foo()r$   zt = isinstance(f(), foo)tTN)r   r*   r'   strr(   run_cellr1   r   srcs     r   test_simpledefz!TestMagicRunSimple.test_simpledef   sP    '

35#djj/2/0{{34'''r   PyPyzGexpecting __del__ call on exit is unreliable and doesn't happen on PyPy)reasonc                 p    d}| j                  |       d}t        j                  | j                  d|       y)z6Test that object's __del__ methods are called on exit.zRclass A(object):
    def __del__(self):
        print('object A deleted')
a = A()
Nzobject A deleted)r   r?   ipexec_validater(   )r   rP   errs      r   test_obj_delzTestMagicRunSimple.test_obj_del   s2     	

3
4::'93?r   c                 l   t        j                         5 }|j                  d       dd|j                  z   z  }| j                  |       t        j                  dt        | j                               t        j                  d       t        j                  d   dk(  sJ 	 ddd       y# 1 sw Y   yxY w)	zxTest that namespace cleanup is not too aggressive GH-238

        Returning from another run magic deletes the namespace zyip = get_ipython()
for i in range(5):
   try:
       ip.magic(%r)
   except NameError as e:
       print(i)
       break
zrun r$   zip == get_ipython()i   N)	r?   TempFileMixinr   r(   r*   r'   rM   rN   r1   )r   emptyrP   s      r   !test_aggressive_namespace_cleanupz4TestMagicRunSimple.test_aggressive_namespace_cleanup  s      	)5KKO! %+U[[$8:  JJsOuc$**o6LL./;;s#q(((!	) 	) 	)s   BB**B3c                 T   | j                  d       t        j                         5 }|j                  d       t        j	                  d| j
                         t        j	                  d|j
                         t        j                  d          dk(  sJ 	 ddd       y# 1 sw Y   yxY w)zBTest that running a second file doesn't clobber the first, gh-3547z$avar = 1
def afunc():
  return avar
rY   r$   afunc   N)r   r?   r\   r*   r'   r(   r1   )r   r]   s     r   test_run_secondz"TestMagicRunSimple.test_run_second  s    

BC 	/5KKOudjj1uekk2;;w')Q...	/ 	/ 	/s   A.BB'c                    t         j                  j                  t              }t         j                  j	                  |d      }d| d| d| d}| j                  |d       d}d }t        j                  | j                  ||       y )Ntclasszimport gc
%run "z" C-first
gc.collect(0)
%run "z" C-second
gc.collect(0)
%run "z"" C-third
gc.collect(0)
%reset -f
.ipyzARGV 1-: ['C-first']
ARGV 1-: ['C-second']
tclass.py: deleting object: C-first
ARGV 1-: ['C-third']
tclass.py: deleting object: C-second
tclass.py: deleting object: C-third
)	ospathdirname__file__r   r   r?   rU   r(   )r   mydirtcrP   outrV   s         r   test_tclasszTestMagicRunSimple.test_tclass'  s    )WW\\%*	d 	d 	d 	 	

3 
4::sC0r   c                 6   d}| j                  |       t        j                  d       	 t        j                  dd| j                  z         t        j
                  d   dk(  sJ 	 t        j                  dd       t        j                  d       	 t        j                  dd| j                  z         t        j
                  d   dk(  sJ 	 t        j                  dd       y	# t        j                  dd       w xY w# t        j                  dd       w xY w)
z4Check that %run -i still works after %reset (gh-693)zyy = zz
zzz = 23r$   z-i %syy   reset-fN)r   r*   rN   r'   r(   r1   rO   s     r   test_run_i_after_resetz)TestMagicRunSimple.test_run_i_after_reset@  s    

3Y	.ug

&:;;;t$***w-Y	.ug

&:;;;t$***w- w- w-s   ;C% ;D  %C= Dc                     t         j                  j                  t              }t         j                  j	                  |d      }t
        j                  d|z         t
        j                  d   dk(  sJ y)z/Check that files in odd encodings are accepted.znonascii.pyzrun "%s"uu	   Ўт№ФN)rf   rg   rh   ri   r   r*   magicr1   )r   rj   nas      r   test_unicodezTestMagicRunSimple.test_unicodeR  sO    )WW\\%/		*r/"{{3;...r   c                 P   d}| j                  |       t               }t        j                  j	                  d|      }t        j                  d| j                         t        j                  j	                  d|      }t        j                  d   | j                  k(  sJ ||k(  sJ y)z:Test handling of `__file__` attribute in `%run <file>.py`.t = __file__
ri   r$   rL   Nr   objectr*   r1   getr'   r(   r   rP   _missingfile1file2s        r   test_run_py_file_attributez-TestMagicRunSimple.test_run_py_file_attributeY  s    

38
H55$**-
H5 {{34::--- ~~r   c                 T   d}| j                  |d       t               }t        j                  j	                  d|      }t        j                  d| j                         t        j                  j	                  d|      }t        j                  d   | j                  k(  sJ ||k(  sJ y)z;Test handling of `__file__` attribute in `%run <file.ipy>`.rz   re   extri   r$   rL   Nr{   r~   s        r   test_run_ipy_file_attributez.TestMagicRunSimple.test_run_ipy_file_attributei  s    

3F
#8
H55$**-
H5 {{34::--- ~~r   c                     d}| j                  |       t        j                  dd| j                  z         t        j                  dd| j                  z         y)z> Test that %run -t -N<N> does not raise a TypeError for N > 1.passr$   z
-t -N 1 %sz-t -N 10 %sN)r   r*   r'   r(   rO   s     r   test_run_formattingz&TestMagicRunSimple.test_run_formattingy  sD    

35,";<5-$**"<=r   c                 X   d}| j                  |       t        j                  d      5  t        j	                  d| j
                         ddd       t        j                  d      5  t        j	                  dd| j
                  z         ddd       y# 1 sw Y   KxY w# 1 sw Y   yxY w)z'Test the -e option to ignore sys.exit()zimport sys; sys.exit(1)
SystemExitr$   Nz-e %s)r   r?   AssertPrintsr*   r'   r(   rD   rO   s     r   test_ignore_sys_exitz'TestMagicRunSimple.test_ignore_sys_exit  s    '

3__\* 	2udjj1	2 - 	<ug

&:;	< 	<	2 	2	< 	<s   !B'$B B B)c                 L   t        j                  d       ddlm}m} |j                  |j                  d      |j                  d      g      } ||d      }| j                  |d	
       t        j                  d| j                         t        j                  d   dk(  sJ y)zTest %run notebook.ipynbnbformatr   v4writesz#The Ultimate Question of Everythingz	answer=42cellsr[   version.ipynbr   r$   answer*   N)pytestimportorskipr   r   r   new_notebooknew_markdown_cellnew_code_cellr   r*   r'   r(   r1   r   r   r   nbrP   s        r   test_run_nbzTestMagicRunSimple.test_run_nb  s    J''__$$%JK  -  
 R#

3H
%5$**-{{8$***r   c                    t        j                  d       ddlm}m} t        j
                  t        t        j                  d       t        j
                  t        t        j                  d       |j                  |j                  d      g      } ||d	      }| j                  |d
       t        j
                  t        t        j                  d| j                  z         y)zTest %run notebook.ipynb errorr   r   r   r$   zrun foobar.ipynbz0/0r   r[   r   r   r   zrun %sN)r   r   r   r   r   raises	Exceptionr*   rv   r   r   r   r(   r   s        r   test_run_nb_errorz$TestMagicRunSimple.test_run_nb_error  s    J'' 	iE2 	i,>? __  '  

 R#

3H
%iHtzz,ABr   c                     d}| j                  |       d}t        j                  ddj                  | j                  |             t        j
                  d   |k(  sJ y )Nz&import sys
a = " ".join(sys.argv[1:])
z-x 3 --verboser$   z{0} {1}a)r   r*   r'   formatr(   r1   )r   rP   	test_optss      r   test_file_optionsz$TestMagicRunSimple.test_file_options  sQ    .

3$	5)"2"24::y"IJ{{39,,,r   N)rF   rG   rH   rQ   r   markxfailplatformpython_implementationrW   r^   rb   rm   rs   rx   r   r   r   r   r   r   r   r   r   r   rJ   rJ      s    ( [[&&&(F2X  @	@)0	/12.$/  ><+"C*-r   rJ   c                   p    e Zd Zd Zd Zd ZddZd Zd Zd Z	d Z
d	 Zed
        Zed        Zd Zd Zy)TestMagicRunWithPackagec                    t         j                  j                  | j                  j                  |      }t         j                  j                  |      }t         j                  j                  |      st        j                  |       t        |dd      5 }|j                  t        j                  |             d d d        y # 1 sw Y   y xY w)Nwutf-8encoding)rf   rg   r   tempdirnamerh   isdirmakedirsopenwritetextwrapdedent)r   r   r    rg   dfs         r   	writefilez!TestMagicRunWithPackage.writefile  s    ww||DLL--t4GGOOD!ww}}QKKN$g. 	.!GGHOOG,-	. 	. 	.s   %CCc           
         dj                  dj                  t        d      D cg c]%  }t        j                  t
        j                        ' c}            x| _        }	 t        t        j                         dz        | _	        t               | _        t        j                         | _        t        j                   j#                  d| j                  j$                         | j'                  t        j                   j                  |d      d       | j'                  t        j                   j                  |d      dj                  | j                               | j'                  t        j                   j                  |d	      d
       | j'                  t        j                   j                  |d      dj                  |             | j'                  t        j                   j                  |d      dj                  |             y c c}w )Nztmp{0}rY   
   i'  r   z__init__.pyzsub.pyz
        x = {0!r}
        zrelative.pyz$
        from .sub import x
        zabsolute.pyz'
        from {0}.sub import x
        zargs.pyz?
        import sys
        a = " ".join(sys.argv[1:])
        )r   r   rangerandomchoicestringascii_letterspackageintvaluer   r   rf   getcwd"_TestMagicRunWithPackage__orig_cwdr7   rg   insertr   r   )r   rZ   r   s      r   r!   zTestMagicRunWithPackage.setUp  sb   !)glmogp9qbc&--H\H\:]9q1r!ssw>501
)+))+4<<,,-rww||G];R@rww||GX6 9F4::	  	rww||G]; > 	 	rww||G]; >F7O	 	rww||GY7 : F7O	' :rs   *H
c                    t        j                  | j                         t        j                  D cg c]  }|| j
                  j                  k7  s|  c}t        j                  d d  | j
                  j                          y c c}w )N)rf   chdirr   r7   rg   r   r   cleanup)r   ps     r   tearDownz TestMagicRunWithPackage.tearDown  sU    
!"%((EQa4<<3D3D.DqE Fs   BBc                     t         j                  j                  dd        t         j                  ddj	                  | j
                  ||             | j                  t         j                  d   | j                  dj	                  |             y )Nxr$   z{2} -m {0}.{1}z-Variable `x` is not loaded from module `{0}`.)r*   r1   popr'   r   r   assertEqualr   )r   	submoduleoptss      r   check_run_submodulez+TestMagicRunWithPackage.check_run_submodule  sl    T"#**4<<DI	
 	KKJJ;BB9M	
r   c                 &    | j                  d       y )Nabsoluter   r:   s    r   'test_run_submodule_with_absolute_importz?TestMagicRunWithPackage.test_run_submodule_with_absolute_import  s      ,r   c                 &    | j                  d       y)z;Run submodule that has a relative import statement (#2727).relativeNr   r:   s    r   'test_run_submodule_with_relative_importz?TestMagicRunWithPackage.test_run_submodule_with_relative_import  s      ,r   c                 (    | j                  dd       y )Nr   -pr   r:   s    r   (test_prun_submodule_with_absolute_importz@TestMagicRunWithPackage.test_prun_submodule_with_absolute_import        T2r   c                 (    | j                  dd       y )Nr   r   r   r:   s    r   (test_prun_submodule_with_relative_importz@TestMagicRunWithPackage.test_prun_submodule_with_relative_import  r   r   c                 B     t        j                          fd       }|S )Nc                      t        j                  t        j                  dt	        t
                    5   | i |cd d d        S # 1 sw Y   y xY wr#   )r   r|   r   Pdbstaticmethodeval)argskwdsfuncs     r   wrapperz;TestMagicRunWithPackage.with_fake_debugger.<locals>.wrapper  s>    hllE<3EF +T*T*+ + +s   AA)	functoolswraps)r   r   s   ` r   with_fake_debuggerz*TestMagicRunWithPackage.with_fake_debugger  s%    			+ 
	+ r   c                 (    | j                  dd       y )Nr   -dr   r:   s    r   -test_debug_run_submodule_with_absolute_importzETestMagicRunWithPackage.test_debug_run_submodule_with_absolute_import         T2r   c                 (    | j                  dd       y )Nr   r   r   r:   s    r   -test_debug_run_submodule_with_relative_importzETestMagicRunWithPackage.test_debug_run_submodule_with_relative_import  r   r   c                     t         j                  j                  dd        d}t         j                  ddj	                  | j
                  |             t         j                  d   |k(  sJ y )Nr   -x abc -m testr$   z-m {0}.args {1}r*   r1   r   r'   r   r   r   r   s     r   test_module_optionsz+TestMagicRunWithPackage.test_module_options  sR    T"$	5"3":":4<<"ST{{39,,,r   c                     t         j                  j                  dd        d}t         j                  ddj	                  | j
                  |             t         j                  d   |k(  sJ y )Nr   r   r$   z-m {0}.args -- {1}r   r   s     r   "test_module_options_with_separatorz:TestMagicRunWithPackage.test_module_options_with_separator  sR    T"$	5"6"="=dllI"VW{{39,,,r   N)rY   )rF   rG   rH   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     sa    .2
	
--33 3 3 3 3--r   r   c                  "   t               5 } t        | d      }t        |dd      5 }|j                  d       d d d        t        j
                  j                  dd        t        j                  ddj                  |             t        j
                  j                  d      d	k(  sJ t        j                  dd
j                  |             t        j
                  j                  d      dk(  sJ 	 t        j                  ddj                  |             t        j
                  j                  d      dk(  sJ 	 t        j                  dd       	 d d d        y # 1 sw Y   'xY w# t        j                  dd       w xY w# 1 sw Y   y xY w)Nfoo.pyr   r   r   zq = __name__qr$   {}__main__z-n {}fooz-i -n {}rq   rr   )	r   pjoinr   r   r*   r1   r   r'   r   )tdrg   r   s      r   test_run__name__r    s9   		 .R"$g. 	$!GGN#	$ 	T"5$++d"34{{s#z1115'.."67{{s#u,,,	.uj&7&7&=>;;??3'5000w-!. .	$ 	$ w-!. .s;   FEB:F3A	E*=FE'	"F*FFFc                     t               5 } t        | d      }t        |dd      5 }|j                  dj	                  g d             ddd       t               5 }t        j                  dd	j                  |             ddd       j                  }d
|vsJ d|v sJ |j                  d      dk(  sJ t        j                  d= t        j                  d= ddd       y# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   yxY w)zTest traceback offset in %runr  r   r   r   
z
def foo():z    return bar()z
def bar():z     raise RuntimeError('hello!')zfoo()Nr$   r  execfileRuntimeError---->   barr  )r   r  r   r   r   r	   r*   r'   r   stdoutcountipr1   )r  rg   r   iorl   s        r   test_run_tbr  )  s    		 R"$g. 	!GG		
	  	9udkk$&78	9ii$$$$$$yy!Q&&&JJuJJu+ 	 		9 	9 s;   C:#C"	C:&C.AC:"C+	'C:.C7	3C::Dc                     t               5 } t        j                  j                  d      }dt        j                  d<   	 t	        | d      }t        |dd      5 }|j                  d       ddd       t               5 }t        j                  d|       t        j                  d	       ddd       j                  }d
|v sJ d|vsJ d|v sJ |j                  d      dk(  sJ 	 |t        j                  d<   	 ddd       y# 1 sw Y   xY w# 1 sw Y   gxY w#   xY w# |t        j                  d<   w xY w# 1 sw Y   yxY w)zSet we can run mutiprocesgin without messing up up main namespace

    Note that import `nose.tools as nt` mdify the value s
    sys.module['__mp_main__'] so we need to temporarily set it to None to test
    the issue.
    __mp_main__Nztest.pyr   r   r   z#import multiprocessing
print('hoy')r$   i_m_undefinedhoyAttributeError	NameErrorr  ra   )r   r7   modulesr}   r  r   r   r	   r*   r'   rN   r  r  )r  mpmrg   r   r  rl   s         r   test_multiprocessing_runr  C  s6    
	 -kkoom,%)M"	-Y'DdC'2 @a>?@! .R""5$/_-. ))CC<<#3...#%%%99W%*** *-CKK&%- -
@ @. .	),CKK&%- -s^   3D9DD+D=,D)<D&D9D	DD	DDD!!D66D99Ec                  Z   t               5 } t        | d      }t        |dd      5 }|j                  dj	                  g d             ddd       t        j                  |      \  }}d|vsJ d	|v sJ |j                  d
      dk(  sJ 	 ddd       y# 1 sw Y   MxY w# 1 sw Y   yxY w)z,Test traceback offset in `ipython script.py`r  r   r   r   r
  r  Nr  r  r  r  )r   r  r   r   r   r?   ipexecr  )r  rg   r   rl   rV   s        r   test_script_tbr!  _  s    		 'R"$g. 	!GG		
	 99T?S$$$$$$yy!Q&&&#' '	 	' 's#   B!#B	AB!B	B!!B*),__doc__r   rf   r   r   r   r7   r   unittestos.pathr   r  unittest.mockr   r   tempfiler   IPython.corer   IPython.testingr   decr   r?   IPython.utils.ior	   r   r   r   
skip_win32r   __skip_doctest__skip_if_not_win32r   r   r\   r   rJ   TestCaser   r  r  r  r!  r   r   r   <module>r/     s   
"  	    
   !   ' ! - ' +($N    8;||w7N # 4    :=9P % 6(;@r'' ;@|K-)) K-\Y-h// Y-x.(4-8'r   