##// END OF EJS Templates
Moving helper functions to utils.module_paths, adding tests.
Jörgen Stenarson -
Show More
@@ -0,0 +1,125 b''
1 """Utility functions for finding modules
2
3 Utility functions for finding modules on sys.path.
4
5 `find_mod` finds named module on sys.path.
6
7 `get_init` helper function that finds __init__ file in a directory.
8
9 `find_module` variant of imp.find_module in std_lib that only returns
10 path to module and not an open file object as well.
11
12
13
14 """
15 #-----------------------------------------------------------------------------
16 # Copyright (c) 2011, the IPython Development Team.
17 #
18 # Distributed under the terms of the Modified BSD License.
19 #
20 # The full license is in the file COPYING.txt, distributed with this software.
21 #-----------------------------------------------------------------------------
22
23 #-----------------------------------------------------------------------------
24 # Imports
25 #-----------------------------------------------------------------------------
26 from __future__ import print_function
27
28 # Stdlib imports
29 import imp
30 import os
31
32 # Third-party imports
33
34 # Our own imports
35
36
37 #-----------------------------------------------------------------------------
38 # Globals and constants
39 #-----------------------------------------------------------------------------
40
41 #-----------------------------------------------------------------------------
42 # Local utilities
43 #-----------------------------------------------------------------------------
44
45 #-----------------------------------------------------------------------------
46 # Classes and functions
47 #-----------------------------------------------------------------------------
48 def find_module(name, path=None):
49 """imp.find_module variant that only return path of module.
50
51 The `imp.find_module` returns a filehandle that we are not interested in.
52 Also we ignore any bytecode files that `imp.find_module` finds.
53
54 Parameters
55 ----------
56 name : str
57 name of module to locate
58 path : list of str
59 list of paths to search for `name`. If path=None then search sys.path
60
61 Returns
62 -------
63 filename : str
64 Return full path of module or None if module is missing or does not have
65 .py or .pyw extension
66 """
67 if name is None:
68 return None
69 try:
70 file, filename, _ = imp.find_module(name, path)
71 except ImportError:
72 return None
73 if file is None:
74 return filename
75 else:
76 file.close()
77 if os.path.splitext(filename)[1] in [".py", "pyc"]:
78 return filename
79 else:
80 return None
81
82 def get_init(dirname):
83 """Get __init__ file path for module directory
84
85 Parameters
86 ----------
87 dirname : str
88 Find the __init__ file in directory `dirname`
89
90 Returns
91 -------
92 init_path : str
93 Path to __init__ file
94 """
95 fbase = os.path.join(dirname, "__init__")
96 for ext in [".py", ".pyw"]:
97 fname = fbase + ext
98 if os.path.isfile(fname):
99 return fname
100
101
102 def find_mod(module_name):
103 """Find module `module_name` on sys.path
104
105 Return the path to module `module_name`. If `module_name` refers to
106 a module directory then return path to __init__ file. Return full
107 path of module or None if module is missing or does not have .py or .pyw
108 extension. We are not interested in running bytecode.
109
110 Parameters
111 ----------
112 module_name : str
113
114 Returns
115 -------
116 modulepath : str
117 Path to module `module_name`.
118 """
119 parts = module_name.split(".")
120 basepath = find_module(parts[0])
121 for submodname in parts[1:]:
122 basepath = find_module(submodname, [basepath])
123 if basepath and os.path.isdir(basepath):
124 basepath = get_init(basepath)
125 return basepath
@@ -0,0 +1,133 b''
1 # encoding: utf-8
2 """Tests for IPython.utils.path.py"""
3
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2008 The IPython Development Team
6 #
7 # Distributed under the terms of the BSD License. The full license is in
8 # the file COPYING, distributed as part of this software.
9 #-----------------------------------------------------------------------------
10
11 #-----------------------------------------------------------------------------
12 # Imports
13 #-----------------------------------------------------------------------------
14
15 from __future__ import with_statement
16
17 import os
18 import shutil
19 import sys
20 import tempfile
21 import StringIO
22
23 from os.path import join, abspath, split
24
25 import nose.tools as nt
26
27 from nose import with_setup
28
29 import IPython
30 from IPython.testing import decorators as dec
31 from IPython.testing.decorators import skip_if_not_win32, skip_win32
32 from IPython.testing.tools import make_tempfile
33 from IPython.utils import path, io
34 from IPython.utils import py3compat
35
36 import IPython.utils.module_paths as mp
37
38 env = os.environ
39 TEST_FILE_PATH = split(abspath(__file__))[0]
40 TMP_TEST_DIR = tempfile.mkdtemp()
41 #
42 # Setup/teardown functions/decorators
43 #
44
45 old_syspath = sys.path
46 sys.path = [TMP_TEST_DIR]
47
48 def make_empty_file(fname):
49 f = open(fname, 'w')
50 f.close()
51
52
53 def setup():
54 """Setup testenvironment for the module:
55
56 """
57 # Do not mask exceptions here. In particular, catching WindowsError is a
58 # problem because that exception is only defined on Windows...
59 os.makedirs(join(TMP_TEST_DIR, "xmod"))
60 os.makedirs(join(TMP_TEST_DIR, "nomod"))
61 make_empty_file(join(TMP_TEST_DIR, "xmod/__init__.py"))
62 make_empty_file(join(TMP_TEST_DIR, "xmod/sub.py"))
63 make_empty_file(join(TMP_TEST_DIR, "pack.py"))
64 make_empty_file(join(TMP_TEST_DIR, "packpyc.pyc"))
65
66 def teardown():
67 """Teardown testenvironment for the module:
68
69 - Remove tempdir
70 """
71 # Note: we remove the parent test dir, which is the root of all test
72 # subdirs we may have created. Use shutil instead of os.removedirs, so
73 # that non-empty directories are all recursively removed.
74 shutil.rmtree(TMP_TEST_DIR)
75
76
77 def test_get_init_1():
78 """See if get_init can find __init__.py in this testdir"""
79 with make_tempfile(join(TMP_TEST_DIR, "__init__.py")):
80 assert mp.get_init(TMP_TEST_DIR)
81
82 def test_get_init_2():
83 """See if get_init can find __init__.pyw in this testdir"""
84 with make_tempfile(join(TMP_TEST_DIR, "__init__.pyw")):
85 assert mp.get_init(TMP_TEST_DIR)
86
87 def test_get_init_3():
88 """get_init can't find __init__.pyc in this testdir"""
89 with make_tempfile(join(TMP_TEST_DIR, "__init__.pyc")):
90 assert mp.get_init(TMP_TEST_DIR) is None
91
92 def test_get_init_3():
93 """get_init can't find __init__ in empty testdir"""
94 assert mp.get_init(TMP_TEST_DIR) is None
95
96
97 def test_find_mod_1():
98 modpath = join(TMP_TEST_DIR, "xmod", "__init__.py")
99 assert mp.find_mod("xmod") == modpath
100
101 def test_find_mod_2():
102 modpath = join(TMP_TEST_DIR, "xmod", "__init__.py")
103 assert mp.find_mod("xmod") == modpath
104
105 def test_find_mod_3():
106 modpath = join(TMP_TEST_DIR, "xmod", "sub.py")
107 assert mp.find_mod("xmod.sub") == modpath
108
109 def test_find_mod_4():
110 modpath = join(TMP_TEST_DIR, "pack.py")
111 assert mp.find_mod("pack") == modpath
112
113 def test_find_mod_5():
114 assert mp.find_mod("packpyc") is None
115
116 def test_find_module_1():
117 modpath = join(TMP_TEST_DIR, "xmod")
118 assert mp.find_module("xmod") == modpath
119
120 def test_find_module_2():
121 """Testing sys.path that is empty"""
122 assert mp.find_module("xmod", []) is None
123
124 def test_find_module_3():
125 """Testing sys.path that is empty"""
126 assert mp.find_module(None, None) is None
127
128 def test_find_module_4():
129 """Testing sys.path that is empty"""
130 assert mp.find_module(None) is None
131
132 def test_find_module_5():
133 assert mp.find_module("xmod.nopack") is None
@@ -1,3686 +1,3608 b''
1 1 # encoding: utf-8
2 2 """Magic functions for InteractiveShell.
3 3 """
4 4
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
8 8 # Copyright (C) 2008-2009 The IPython Development Team
9 9
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #-----------------------------------------------------------------------------
13 13
14 14 #-----------------------------------------------------------------------------
15 15 # Imports
16 16 #-----------------------------------------------------------------------------
17 17
18 18 import __builtin__ as builtin_mod
19 19 import __future__
20 20 import bdb
21 21 import inspect
22 22 import imp
23 23 import os
24 24 import sys
25 25 import shutil
26 26 import re
27 27 import time
28 28 import textwrap
29 29 from StringIO import StringIO
30 30 from getopt import getopt,GetoptError
31 31 from pprint import pformat
32 32 from xmlrpclib import ServerProxy
33 33
34 34 # cProfile was added in Python2.5
35 35 try:
36 36 import cProfile as profile
37 37 import pstats
38 38 except ImportError:
39 39 # profile isn't bundled by default in Debian for license reasons
40 40 try:
41 41 import profile,pstats
42 42 except ImportError:
43 43 profile = pstats = None
44 44
45 45 import IPython
46 46 from IPython.core import debugger, oinspect
47 47 from IPython.core.error import TryNext
48 48 from IPython.core.error import UsageError
49 49 from IPython.core.fakemodule import FakeModule
50 50 from IPython.core.profiledir import ProfileDir
51 51 from IPython.core.macro import Macro
52 52 from IPython.core import magic_arguments, page
53 53 from IPython.core.prefilter import ESC_MAGIC
54 54 from IPython.lib.pylabtools import mpl_runner
55 55 from IPython.testing.skipdoctest import skip_doctest
56 56 from IPython.utils import py3compat
57 57 from IPython.utils.io import file_read, nlprint
58 from IPython.utils.module_paths import find_mod
58 59 from IPython.utils.path import get_py_filename, unquote_filename
59 60 from IPython.utils.process import arg_split, abbrev_cwd
60 61 from IPython.utils.terminal import set_term_title
61 62 from IPython.utils.text import LSString, SList, format_screen
62 63 from IPython.utils.timing import clock, clock2
63 64 from IPython.utils.warn import warn, error
64 65 from IPython.utils.ipstruct import Struct
65 66 from IPython.config.application import Application
66 67
67 68 #-----------------------------------------------------------------------------
68 69 # Utility functions
69 70 #-----------------------------------------------------------------------------
70 71
71 72 def on_off(tag):
72 73 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
73 74 return ['OFF','ON'][tag]
74 75
75 76 class Bunch: pass
76 77
77 78 def compress_dhist(dh):
78 79 head, tail = dh[:-10], dh[-10:]
79 80
80 81 newhead = []
81 82 done = set()
82 83 for h in head:
83 84 if h in done:
84 85 continue
85 86 newhead.append(h)
86 87 done.add(h)
87 88
88 89 return newhead + tail
89 90
90 91 def needs_local_scope(func):
91 92 """Decorator to mark magic functions which need to local scope to run."""
92 93 func.needs_local_scope = True
93 94 return func
94 95
95 def find_module(name, path=None):
96 """imp.find_module variant that only return path of module.
97
98 The `imp.find_module` returns a filehandle that we are not interested in.
99 Also we ignore any bytecode files that `imp.find_module` finds.
100
101 Parameters
102 ----------
103 name : str
104 name of module to locate
105 path : list of str
106 list of paths to search for `name`. If path=None then search sys.path
107
108 Returns
109 -------
110 filename : str
111 Return full path of module or None if module is missing or does not have
112 .py or .pyw extension
113 """
114 if name is None:
115 return None
116 try:
117 file, filename, _ = imp.find_module(name, path)
118 except ImportError:
119 return None
120 if file is None:
121 return filename
122 else:
123 file.close()
124 if os.path.splitext(filename)[1] in [".py", "pyc"]:
125 return filename
126 else:
127 return None
128
129 def get_init(dirname):
130 """Get __init__ file path for module directory
131
132 Parameters
133 ----------
134 dirname : str
135 Find the __init__ file in directory `dirname`
136
137 Returns
138 -------
139 init_path : str
140 Path to __init__ file
141 """
142 fbase = os.path.join(dirname, "__init__")
143 for ext in [".py", ".pyw"]:
144 fname = fbase + ext
145 if os.path.isfile(fname):
146 return fname
147
148
149 def find_mod(module_name):
150 """Find module `module_name` on sys.path
151
152 Return the path to module `module_name`. If `module_name` refers to
153 a module directory then return path to __init__ file. Return full
154 path of module or None if module is missing or does not have .py or .pyw
155 extension. We are not interested in running bytecode.
156
157 Parameters
158 ----------
159 module_name : str
160
161 Returns
162 -------
163 modulepath : str
164 Path to module `module_name`.
165 """
166 parts = module_name.split(".")
167 basepath = find_module(parts[0])
168 for submodname in parts[1:]:
169 basepath = find_module(submodname, [basepath])
170 if basepath and os.path.isdir(basepath):
171 basepath = get_init(basepath)
172 return basepath
173
174 96
175 97 # Used for exception handling in magic_edit
176 98 class MacroToEdit(ValueError): pass
177 99
178 100 #***************************************************************************
179 101 # Main class implementing Magic functionality
180 102
181 103 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
182 104 # on construction of the main InteractiveShell object. Something odd is going
183 105 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
184 106 # eventually this needs to be clarified.
185 107 # BG: This is because InteractiveShell inherits from this, but is itself a
186 108 # Configurable. This messes up the MRO in some way. The fix is that we need to
187 109 # make Magic a configurable that InteractiveShell does not subclass.
188 110
189 111 class Magic:
190 112 """Magic functions for InteractiveShell.
191 113
192 114 Shell functions which can be reached as %function_name. All magic
193 115 functions should accept a string, which they can parse for their own
194 116 needs. This can make some functions easier to type, eg `%cd ../`
195 117 vs. `%cd("../")`
196 118
197 119 ALL definitions MUST begin with the prefix magic_. The user won't need it
198 120 at the command line, but it is is needed in the definition. """
199 121
200 122 # class globals
201 123 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
202 124 'Automagic is ON, % prefix NOT needed for magic functions.']
203 125
204 126 #......................................................................
205 127 # some utility functions
206 128
207 129 def __init__(self,shell):
208 130
209 131 self.options_table = {}
210 132 if profile is None:
211 133 self.magic_prun = self.profile_missing_notice
212 134 self.shell = shell
213 135
214 136 # namespace for holding state we may need
215 137 self._magic_state = Bunch()
216 138
217 139 def profile_missing_notice(self, *args, **kwargs):
218 140 error("""\
219 141 The profile module could not be found. It has been removed from the standard
220 142 python packages because of its non-free license. To use profiling, install the
221 143 python-profiler package from non-free.""")
222 144
223 145 def default_option(self,fn,optstr):
224 146 """Make an entry in the options_table for fn, with value optstr"""
225 147
226 148 if fn not in self.lsmagic():
227 149 error("%s is not a magic function" % fn)
228 150 self.options_table[fn] = optstr
229 151
230 152 def lsmagic(self):
231 153 """Return a list of currently available magic functions.
232 154
233 155 Gives a list of the bare names after mangling (['ls','cd', ...], not
234 156 ['magic_ls','magic_cd',...]"""
235 157
236 158 # FIXME. This needs a cleanup, in the way the magics list is built.
237 159
238 160 # magics in class definition
239 161 class_magic = lambda fn: fn.startswith('magic_') and \
240 162 callable(Magic.__dict__[fn])
241 163 # in instance namespace (run-time user additions)
242 164 inst_magic = lambda fn: fn.startswith('magic_') and \
243 165 callable(self.__dict__[fn])
244 166 # and bound magics by user (so they can access self):
245 167 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
246 168 callable(self.__class__.__dict__[fn])
247 169 magics = filter(class_magic,Magic.__dict__.keys()) + \
248 170 filter(inst_magic,self.__dict__.keys()) + \
249 171 filter(inst_bound_magic,self.__class__.__dict__.keys())
250 172 out = []
251 173 for fn in set(magics):
252 174 out.append(fn.replace('magic_','',1))
253 175 out.sort()
254 176 return out
255 177
256 178 def extract_input_lines(self, range_str, raw=False):
257 179 """Return as a string a set of input history slices.
258 180
259 181 Inputs:
260 182
261 183 - range_str: the set of slices is given as a string, like
262 184 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
263 185 which get their arguments as strings. The number before the / is the
264 186 session number: ~n goes n back from the current session.
265 187
266 188 Optional inputs:
267 189
268 190 - raw(False): by default, the processed input is used. If this is
269 191 true, the raw input history is used instead.
270 192
271 193 Note that slices can be called with two notations:
272 194
273 195 N:M -> standard python form, means including items N...(M-1).
274 196
275 197 N-M -> include items N..M (closed endpoint)."""
276 198 lines = self.shell.history_manager.\
277 199 get_range_by_str(range_str, raw=raw)
278 200 return "\n".join(x for _, _, x in lines)
279 201
280 202 def arg_err(self,func):
281 203 """Print docstring if incorrect arguments were passed"""
282 204 print 'Error in arguments:'
283 205 print oinspect.getdoc(func)
284 206
285 207 def format_latex(self,strng):
286 208 """Format a string for latex inclusion."""
287 209
288 210 # Characters that need to be escaped for latex:
289 211 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
290 212 # Magic command names as headers:
291 213 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
292 214 re.MULTILINE)
293 215 # Magic commands
294 216 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
295 217 re.MULTILINE)
296 218 # Paragraph continue
297 219 par_re = re.compile(r'\\$',re.MULTILINE)
298 220
299 221 # The "\n" symbol
300 222 newline_re = re.compile(r'\\n')
301 223
302 224 # Now build the string for output:
303 225 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
304 226 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
305 227 strng)
306 228 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
307 229 strng = par_re.sub(r'\\\\',strng)
308 230 strng = escape_re.sub(r'\\\1',strng)
309 231 strng = newline_re.sub(r'\\textbackslash{}n',strng)
310 232 return strng
311 233
312 234 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
313 235 """Parse options passed to an argument string.
314 236
315 237 The interface is similar to that of getopt(), but it returns back a
316 238 Struct with the options as keys and the stripped argument string still
317 239 as a string.
318 240
319 241 arg_str is quoted as a true sys.argv vector by using shlex.split.
320 242 This allows us to easily expand variables, glob files, quote
321 243 arguments, etc.
322 244
323 245 Options:
324 246 -mode: default 'string'. If given as 'list', the argument string is
325 247 returned as a list (split on whitespace) instead of a string.
326 248
327 249 -list_all: put all option values in lists. Normally only options
328 250 appearing more than once are put in a list.
329 251
330 252 -posix (True): whether to split the input line in POSIX mode or not,
331 253 as per the conventions outlined in the shlex module from the
332 254 standard library."""
333 255
334 256 # inject default options at the beginning of the input line
335 257 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
336 258 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
337 259
338 260 mode = kw.get('mode','string')
339 261 if mode not in ['string','list']:
340 262 raise ValueError,'incorrect mode given: %s' % mode
341 263 # Get options
342 264 list_all = kw.get('list_all',0)
343 265 posix = kw.get('posix', os.name == 'posix')
344 266
345 267 # Check if we have more than one argument to warrant extra processing:
346 268 odict = {} # Dictionary with options
347 269 args = arg_str.split()
348 270 if len(args) >= 1:
349 271 # If the list of inputs only has 0 or 1 thing in it, there's no
350 272 # need to look for options
351 273 argv = arg_split(arg_str,posix)
352 274 # Do regular option processing
353 275 try:
354 276 opts,args = getopt(argv,opt_str,*long_opts)
355 277 except GetoptError,e:
356 278 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
357 279 " ".join(long_opts)))
358 280 for o,a in opts:
359 281 if o.startswith('--'):
360 282 o = o[2:]
361 283 else:
362 284 o = o[1:]
363 285 try:
364 286 odict[o].append(a)
365 287 except AttributeError:
366 288 odict[o] = [odict[o],a]
367 289 except KeyError:
368 290 if list_all:
369 291 odict[o] = [a]
370 292 else:
371 293 odict[o] = a
372 294
373 295 # Prepare opts,args for return
374 296 opts = Struct(odict)
375 297 if mode == 'string':
376 298 args = ' '.join(args)
377 299
378 300 return opts,args
379 301
380 302 #......................................................................
381 303 # And now the actual magic functions
382 304
383 305 # Functions for IPython shell work (vars,funcs, config, etc)
384 306 def magic_lsmagic(self, parameter_s = ''):
385 307 """List currently available magic functions."""
386 308 mesc = ESC_MAGIC
387 309 print 'Available magic functions:\n'+mesc+\
388 310 (' '+mesc).join(self.lsmagic())
389 311 print '\n' + Magic.auto_status[self.shell.automagic]
390 312 return None
391 313
392 314 def magic_magic(self, parameter_s = ''):
393 315 """Print information about the magic function system.
394 316
395 317 Supported formats: -latex, -brief, -rest
396 318 """
397 319
398 320 mode = ''
399 321 try:
400 322 if parameter_s.split()[0] == '-latex':
401 323 mode = 'latex'
402 324 if parameter_s.split()[0] == '-brief':
403 325 mode = 'brief'
404 326 if parameter_s.split()[0] == '-rest':
405 327 mode = 'rest'
406 328 rest_docs = []
407 329 except:
408 330 pass
409 331
410 332 magic_docs = []
411 333 for fname in self.lsmagic():
412 334 mname = 'magic_' + fname
413 335 for space in (Magic,self,self.__class__):
414 336 try:
415 337 fn = space.__dict__[mname]
416 338 except KeyError:
417 339 pass
418 340 else:
419 341 break
420 342 if mode == 'brief':
421 343 # only first line
422 344 if fn.__doc__:
423 345 fndoc = fn.__doc__.split('\n',1)[0]
424 346 else:
425 347 fndoc = 'No documentation'
426 348 else:
427 349 if fn.__doc__:
428 350 fndoc = fn.__doc__.rstrip()
429 351 else:
430 352 fndoc = 'No documentation'
431 353
432 354
433 355 if mode == 'rest':
434 356 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
435 357 fname,fndoc))
436 358
437 359 else:
438 360 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
439 361 fname,fndoc))
440 362
441 363 magic_docs = ''.join(magic_docs)
442 364
443 365 if mode == 'rest':
444 366 return "".join(rest_docs)
445 367
446 368 if mode == 'latex':
447 369 print self.format_latex(magic_docs)
448 370 return
449 371 else:
450 372 magic_docs = format_screen(magic_docs)
451 373 if mode == 'brief':
452 374 return magic_docs
453 375
454 376 outmsg = """
455 377 IPython's 'magic' functions
456 378 ===========================
457 379
458 380 The magic function system provides a series of functions which allow you to
459 381 control the behavior of IPython itself, plus a lot of system-type
460 382 features. All these functions are prefixed with a % character, but parameters
461 383 are given without parentheses or quotes.
462 384
463 385 NOTE: If you have 'automagic' enabled (via the command line option or with the
464 386 %automagic function), you don't need to type in the % explicitly. By default,
465 387 IPython ships with automagic on, so you should only rarely need the % escape.
466 388
467 389 Example: typing '%cd mydir' (without the quotes) changes you working directory
468 390 to 'mydir', if it exists.
469 391
470 392 For a list of the available magic functions, use %lsmagic. For a description
471 393 of any of them, type %magic_name?, e.g. '%cd?'.
472 394
473 395 Currently the magic system has the following functions:\n"""
474 396
475 397 mesc = ESC_MAGIC
476 398 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
477 399 "\n\n%s%s\n\n%s" % (outmsg,
478 400 magic_docs,mesc,mesc,
479 401 (' '+mesc).join(self.lsmagic()),
480 402 Magic.auto_status[self.shell.automagic] ) )
481 403 page.page(outmsg)
482 404
483 405 def magic_automagic(self, parameter_s = ''):
484 406 """Make magic functions callable without having to type the initial %.
485 407
486 408 Without argumentsl toggles on/off (when off, you must call it as
487 409 %automagic, of course). With arguments it sets the value, and you can
488 410 use any of (case insensitive):
489 411
490 412 - on,1,True: to activate
491 413
492 414 - off,0,False: to deactivate.
493 415
494 416 Note that magic functions have lowest priority, so if there's a
495 417 variable whose name collides with that of a magic fn, automagic won't
496 418 work for that function (you get the variable instead). However, if you
497 419 delete the variable (del var), the previously shadowed magic function
498 420 becomes visible to automagic again."""
499 421
500 422 arg = parameter_s.lower()
501 423 if parameter_s in ('on','1','true'):
502 424 self.shell.automagic = True
503 425 elif parameter_s in ('off','0','false'):
504 426 self.shell.automagic = False
505 427 else:
506 428 self.shell.automagic = not self.shell.automagic
507 429 print '\n' + Magic.auto_status[self.shell.automagic]
508 430
509 431 @skip_doctest
510 432 def magic_autocall(self, parameter_s = ''):
511 433 """Make functions callable without having to type parentheses.
512 434
513 435 Usage:
514 436
515 437 %autocall [mode]
516 438
517 439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
518 440 value is toggled on and off (remembering the previous state).
519 441
520 442 In more detail, these values mean:
521 443
522 444 0 -> fully disabled
523 445
524 446 1 -> active, but do not apply if there are no arguments on the line.
525 447
526 448 In this mode, you get:
527 449
528 450 In [1]: callable
529 451 Out[1]: <built-in function callable>
530 452
531 453 In [2]: callable 'hello'
532 454 ------> callable('hello')
533 455 Out[2]: False
534 456
535 457 2 -> Active always. Even if no arguments are present, the callable
536 458 object is called:
537 459
538 460 In [2]: float
539 461 ------> float()
540 462 Out[2]: 0.0
541 463
542 464 Note that even with autocall off, you can still use '/' at the start of
543 465 a line to treat the first argument on the command line as a function
544 466 and add parentheses to it:
545 467
546 468 In [8]: /str 43
547 469 ------> str(43)
548 470 Out[8]: '43'
549 471
550 472 # all-random (note for auto-testing)
551 473 """
552 474
553 475 if parameter_s:
554 476 arg = int(parameter_s)
555 477 else:
556 478 arg = 'toggle'
557 479
558 480 if not arg in (0,1,2,'toggle'):
559 481 error('Valid modes: (0->Off, 1->Smart, 2->Full')
560 482 return
561 483
562 484 if arg in (0,1,2):
563 485 self.shell.autocall = arg
564 486 else: # toggle
565 487 if self.shell.autocall:
566 488 self._magic_state.autocall_save = self.shell.autocall
567 489 self.shell.autocall = 0
568 490 else:
569 491 try:
570 492 self.shell.autocall = self._magic_state.autocall_save
571 493 except AttributeError:
572 494 self.shell.autocall = self._magic_state.autocall_save = 1
573 495
574 496 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
575 497
576 498
577 499 def magic_page(self, parameter_s=''):
578 500 """Pretty print the object and display it through a pager.
579 501
580 502 %page [options] OBJECT
581 503
582 504 If no object is given, use _ (last output).
583 505
584 506 Options:
585 507
586 508 -r: page str(object), don't pretty-print it."""
587 509
588 510 # After a function contributed by Olivier Aubert, slightly modified.
589 511
590 512 # Process options/args
591 513 opts,args = self.parse_options(parameter_s,'r')
592 514 raw = 'r' in opts
593 515
594 516 oname = args and args or '_'
595 517 info = self._ofind(oname)
596 518 if info['found']:
597 519 txt = (raw and str or pformat)( info['obj'] )
598 520 page.page(txt)
599 521 else:
600 522 print 'Object `%s` not found' % oname
601 523
602 524 def magic_profile(self, parameter_s=''):
603 525 """Print your currently active IPython profile."""
604 526 print self.shell.profile
605 527
606 528 def magic_pinfo(self, parameter_s='', namespaces=None):
607 529 """Provide detailed information about an object.
608 530
609 531 '%pinfo object' is just a synonym for object? or ?object."""
610 532
611 533 #print 'pinfo par: <%s>' % parameter_s # dbg
612 534
613 535
614 536 # detail_level: 0 -> obj? , 1 -> obj??
615 537 detail_level = 0
616 538 # We need to detect if we got called as 'pinfo pinfo foo', which can
617 539 # happen if the user types 'pinfo foo?' at the cmd line.
618 540 pinfo,qmark1,oname,qmark2 = \
619 541 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
620 542 if pinfo or qmark1 or qmark2:
621 543 detail_level = 1
622 544 if "*" in oname:
623 545 self.magic_psearch(oname)
624 546 else:
625 547 self.shell._inspect('pinfo', oname, detail_level=detail_level,
626 548 namespaces=namespaces)
627 549
628 550 def magic_pinfo2(self, parameter_s='', namespaces=None):
629 551 """Provide extra detailed information about an object.
630 552
631 553 '%pinfo2 object' is just a synonym for object?? or ??object."""
632 554 self.shell._inspect('pinfo', parameter_s, detail_level=1,
633 555 namespaces=namespaces)
634 556
635 557 @skip_doctest
636 558 def magic_pdef(self, parameter_s='', namespaces=None):
637 559 """Print the definition header for any callable object.
638 560
639 561 If the object is a class, print the constructor information.
640 562
641 563 Examples
642 564 --------
643 565 ::
644 566
645 567 In [3]: %pdef urllib.urlopen
646 568 urllib.urlopen(url, data=None, proxies=None)
647 569 """
648 570 self._inspect('pdef',parameter_s, namespaces)
649 571
650 572 def magic_pdoc(self, parameter_s='', namespaces=None):
651 573 """Print the docstring for an object.
652 574
653 575 If the given object is a class, it will print both the class and the
654 576 constructor docstrings."""
655 577 self._inspect('pdoc',parameter_s, namespaces)
656 578
657 579 def magic_psource(self, parameter_s='', namespaces=None):
658 580 """Print (or run through pager) the source code for an object."""
659 581 self._inspect('psource',parameter_s, namespaces)
660 582
661 583 def magic_pfile(self, parameter_s=''):
662 584 """Print (or run through pager) the file where an object is defined.
663 585
664 586 The file opens at the line where the object definition begins. IPython
665 587 will honor the environment variable PAGER if set, and otherwise will
666 588 do its best to print the file in a convenient form.
667 589
668 590 If the given argument is not an object currently defined, IPython will
669 591 try to interpret it as a filename (automatically adding a .py extension
670 592 if needed). You can thus use %pfile as a syntax highlighting code
671 593 viewer."""
672 594
673 595 # first interpret argument as an object name
674 596 out = self._inspect('pfile',parameter_s)
675 597 # if not, try the input as a filename
676 598 if out == 'not found':
677 599 try:
678 600 filename = get_py_filename(parameter_s)
679 601 except IOError,msg:
680 602 print msg
681 603 return
682 604 page.page(self.shell.inspector.format(file(filename).read()))
683 605
684 606 def magic_psearch(self, parameter_s=''):
685 607 """Search for object in namespaces by wildcard.
686 608
687 609 %psearch [options] PATTERN [OBJECT TYPE]
688 610
689 611 Note: ? can be used as a synonym for %psearch, at the beginning or at
690 612 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
691 613 rest of the command line must be unchanged (options come first), so
692 614 for example the following forms are equivalent
693 615
694 616 %psearch -i a* function
695 617 -i a* function?
696 618 ?-i a* function
697 619
698 620 Arguments:
699 621
700 622 PATTERN
701 623
702 624 where PATTERN is a string containing * as a wildcard similar to its
703 625 use in a shell. The pattern is matched in all namespaces on the
704 626 search path. By default objects starting with a single _ are not
705 627 matched, many IPython generated objects have a single
706 628 underscore. The default is case insensitive matching. Matching is
707 629 also done on the attributes of objects and not only on the objects
708 630 in a module.
709 631
710 632 [OBJECT TYPE]
711 633
712 634 Is the name of a python type from the types module. The name is
713 635 given in lowercase without the ending type, ex. StringType is
714 636 written string. By adding a type here only objects matching the
715 637 given type are matched. Using all here makes the pattern match all
716 638 types (this is the default).
717 639
718 640 Options:
719 641
720 642 -a: makes the pattern match even objects whose names start with a
721 643 single underscore. These names are normally ommitted from the
722 644 search.
723 645
724 646 -i/-c: make the pattern case insensitive/sensitive. If neither of
725 647 these options are given, the default is read from your configuration
726 648 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
727 649 If this option is not specified in your configuration file, IPython's
728 650 internal default is to do a case sensitive search.
729 651
730 652 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
731 653 specifiy can be searched in any of the following namespaces:
732 654 'builtin', 'user', 'user_global','internal', 'alias', where
733 655 'builtin' and 'user' are the search defaults. Note that you should
734 656 not use quotes when specifying namespaces.
735 657
736 658 'Builtin' contains the python module builtin, 'user' contains all
737 659 user data, 'alias' only contain the shell aliases and no python
738 660 objects, 'internal' contains objects used by IPython. The
739 661 'user_global' namespace is only used by embedded IPython instances,
740 662 and it contains module-level globals. You can add namespaces to the
741 663 search with -s or exclude them with -e (these options can be given
742 664 more than once).
743 665
744 666 Examples:
745 667
746 668 %psearch a* -> objects beginning with an a
747 669 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
748 670 %psearch a* function -> all functions beginning with an a
749 671 %psearch re.e* -> objects beginning with an e in module re
750 672 %psearch r*.e* -> objects that start with e in modules starting in r
751 673 %psearch r*.* string -> all strings in modules beginning with r
752 674
753 675 Case sensitve search:
754 676
755 677 %psearch -c a* list all object beginning with lower case a
756 678
757 679 Show objects beginning with a single _:
758 680
759 681 %psearch -a _* list objects beginning with a single underscore"""
760 682 try:
761 683 parameter_s.encode('ascii')
762 684 except UnicodeEncodeError:
763 685 print 'Python identifiers can only contain ascii characters.'
764 686 return
765 687
766 688 # default namespaces to be searched
767 689 def_search = ['user','builtin']
768 690
769 691 # Process options/args
770 692 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
771 693 opt = opts.get
772 694 shell = self.shell
773 695 psearch = shell.inspector.psearch
774 696
775 697 # select case options
776 698 if opts.has_key('i'):
777 699 ignore_case = True
778 700 elif opts.has_key('c'):
779 701 ignore_case = False
780 702 else:
781 703 ignore_case = not shell.wildcards_case_sensitive
782 704
783 705 # Build list of namespaces to search from user options
784 706 def_search.extend(opt('s',[]))
785 707 ns_exclude = ns_exclude=opt('e',[])
786 708 ns_search = [nm for nm in def_search if nm not in ns_exclude]
787 709
788 710 # Call the actual search
789 711 try:
790 712 psearch(args,shell.ns_table,ns_search,
791 713 show_all=opt('a'),ignore_case=ignore_case)
792 714 except:
793 715 shell.showtraceback()
794 716
795 717 @skip_doctest
796 718 def magic_who_ls(self, parameter_s=''):
797 719 """Return a sorted list of all interactive variables.
798 720
799 721 If arguments are given, only variables of types matching these
800 722 arguments are returned.
801 723
802 724 Examples
803 725 --------
804 726
805 727 Define two variables and list them with who_ls::
806 728
807 729 In [1]: alpha = 123
808 730
809 731 In [2]: beta = 'test'
810 732
811 733 In [3]: %who_ls
812 734 Out[3]: ['alpha', 'beta']
813 735
814 736 In [4]: %who_ls int
815 737 Out[4]: ['alpha']
816 738
817 739 In [5]: %who_ls str
818 740 Out[5]: ['beta']
819 741 """
820 742
821 743 user_ns = self.shell.user_ns
822 744 internal_ns = self.shell.internal_ns
823 745 user_ns_hidden = self.shell.user_ns_hidden
824 746 out = [ i for i in user_ns
825 747 if not i.startswith('_') \
826 748 and not (i in internal_ns or i in user_ns_hidden) ]
827 749
828 750 typelist = parameter_s.split()
829 751 if typelist:
830 752 typeset = set(typelist)
831 753 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
832 754
833 755 out.sort()
834 756 return out
835 757
836 758 @skip_doctest
837 759 def magic_who(self, parameter_s=''):
838 760 """Print all interactive variables, with some minimal formatting.
839 761
840 762 If any arguments are given, only variables whose type matches one of
841 763 these are printed. For example:
842 764
843 765 %who function str
844 766
845 767 will only list functions and strings, excluding all other types of
846 768 variables. To find the proper type names, simply use type(var) at a
847 769 command line to see how python prints type names. For example:
848 770
849 771 In [1]: type('hello')\\
850 772 Out[1]: <type 'str'>
851 773
852 774 indicates that the type name for strings is 'str'.
853 775
854 776 %who always excludes executed names loaded through your configuration
855 777 file and things which are internal to IPython.
856 778
857 779 This is deliberate, as typically you may load many modules and the
858 780 purpose of %who is to show you only what you've manually defined.
859 781
860 782 Examples
861 783 --------
862 784
863 785 Define two variables and list them with who::
864 786
865 787 In [1]: alpha = 123
866 788
867 789 In [2]: beta = 'test'
868 790
869 791 In [3]: %who
870 792 alpha beta
871 793
872 794 In [4]: %who int
873 795 alpha
874 796
875 797 In [5]: %who str
876 798 beta
877 799 """
878 800
879 801 varlist = self.magic_who_ls(parameter_s)
880 802 if not varlist:
881 803 if parameter_s:
882 804 print 'No variables match your requested type.'
883 805 else:
884 806 print 'Interactive namespace is empty.'
885 807 return
886 808
887 809 # if we have variables, move on...
888 810 count = 0
889 811 for i in varlist:
890 812 print i+'\t',
891 813 count += 1
892 814 if count > 8:
893 815 count = 0
894 816 print
895 817 print
896 818
897 819 @skip_doctest
898 820 def magic_whos(self, parameter_s=''):
899 821 """Like %who, but gives some extra information about each variable.
900 822
901 823 The same type filtering of %who can be applied here.
902 824
903 825 For all variables, the type is printed. Additionally it prints:
904 826
905 827 - For {},[],(): their length.
906 828
907 829 - For numpy arrays, a summary with shape, number of
908 830 elements, typecode and size in memory.
909 831
910 832 - Everything else: a string representation, snipping their middle if
911 833 too long.
912 834
913 835 Examples
914 836 --------
915 837
916 838 Define two variables and list them with whos::
917 839
918 840 In [1]: alpha = 123
919 841
920 842 In [2]: beta = 'test'
921 843
922 844 In [3]: %whos
923 845 Variable Type Data/Info
924 846 --------------------------------
925 847 alpha int 123
926 848 beta str test
927 849 """
928 850
929 851 varnames = self.magic_who_ls(parameter_s)
930 852 if not varnames:
931 853 if parameter_s:
932 854 print 'No variables match your requested type.'
933 855 else:
934 856 print 'Interactive namespace is empty.'
935 857 return
936 858
937 859 # if we have variables, move on...
938 860
939 861 # for these types, show len() instead of data:
940 862 seq_types = ['dict', 'list', 'tuple']
941 863
942 864 # for numpy/Numeric arrays, display summary info
943 865 try:
944 866 import numpy
945 867 except ImportError:
946 868 ndarray_type = None
947 869 else:
948 870 ndarray_type = numpy.ndarray.__name__
949 871 try:
950 872 import Numeric
951 873 except ImportError:
952 874 array_type = None
953 875 else:
954 876 array_type = Numeric.ArrayType.__name__
955 877
956 878 # Find all variable names and types so we can figure out column sizes
957 879 def get_vars(i):
958 880 return self.shell.user_ns[i]
959 881
960 882 # some types are well known and can be shorter
961 883 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
962 884 def type_name(v):
963 885 tn = type(v).__name__
964 886 return abbrevs.get(tn,tn)
965 887
966 888 varlist = map(get_vars,varnames)
967 889
968 890 typelist = []
969 891 for vv in varlist:
970 892 tt = type_name(vv)
971 893
972 894 if tt=='instance':
973 895 typelist.append( abbrevs.get(str(vv.__class__),
974 896 str(vv.__class__)))
975 897 else:
976 898 typelist.append(tt)
977 899
978 900 # column labels and # of spaces as separator
979 901 varlabel = 'Variable'
980 902 typelabel = 'Type'
981 903 datalabel = 'Data/Info'
982 904 colsep = 3
983 905 # variable format strings
984 906 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
985 907 aformat = "%s: %s elems, type `%s`, %s bytes"
986 908 # find the size of the columns to format the output nicely
987 909 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
988 910 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
989 911 # table header
990 912 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
991 913 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
992 914 # and the table itself
993 915 kb = 1024
994 916 Mb = 1048576 # kb**2
995 917 for vname,var,vtype in zip(varnames,varlist,typelist):
996 918 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
997 919 if vtype in seq_types:
998 920 print "n="+str(len(var))
999 921 elif vtype in [array_type,ndarray_type]:
1000 922 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1001 923 if vtype==ndarray_type:
1002 924 # numpy
1003 925 vsize = var.size
1004 926 vbytes = vsize*var.itemsize
1005 927 vdtype = var.dtype
1006 928 else:
1007 929 # Numeric
1008 930 vsize = Numeric.size(var)
1009 931 vbytes = vsize*var.itemsize()
1010 932 vdtype = var.typecode()
1011 933
1012 934 if vbytes < 100000:
1013 935 print aformat % (vshape,vsize,vdtype,vbytes)
1014 936 else:
1015 937 print aformat % (vshape,vsize,vdtype,vbytes),
1016 938 if vbytes < Mb:
1017 939 print '(%s kb)' % (vbytes/kb,)
1018 940 else:
1019 941 print '(%s Mb)' % (vbytes/Mb,)
1020 942 else:
1021 943 try:
1022 944 vstr = str(var)
1023 945 except UnicodeEncodeError:
1024 946 vstr = unicode(var).encode(sys.getdefaultencoding(),
1025 947 'backslashreplace')
1026 948 vstr = vstr.replace('\n','\\n')
1027 949 if len(vstr) < 50:
1028 950 print vstr
1029 951 else:
1030 952 print vstr[:25] + "<...>" + vstr[-25:]
1031 953
1032 954 def magic_reset(self, parameter_s=''):
1033 955 """Resets the namespace by removing all names defined by the user.
1034 956
1035 957 Parameters
1036 958 ----------
1037 959 -f : force reset without asking for confirmation.
1038 960
1039 961 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
1040 962 References to objects may be kept. By default (without this option),
1041 963 we do a 'hard' reset, giving you a new session and removing all
1042 964 references to objects from the current session.
1043 965
1044 966 Examples
1045 967 --------
1046 968 In [6]: a = 1
1047 969
1048 970 In [7]: a
1049 971 Out[7]: 1
1050 972
1051 973 In [8]: 'a' in _ip.user_ns
1052 974 Out[8]: True
1053 975
1054 976 In [9]: %reset -f
1055 977
1056 978 In [1]: 'a' in _ip.user_ns
1057 979 Out[1]: False
1058 980 """
1059 981 opts, args = self.parse_options(parameter_s,'sf')
1060 982 if 'f' in opts:
1061 983 ans = True
1062 984 else:
1063 985 ans = self.shell.ask_yes_no(
1064 986 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1065 987 if not ans:
1066 988 print 'Nothing done.'
1067 989 return
1068 990
1069 991 if 's' in opts: # Soft reset
1070 992 user_ns = self.shell.user_ns
1071 993 for i in self.magic_who_ls():
1072 994 del(user_ns[i])
1073 995
1074 996 else: # Hard reset
1075 997 self.shell.reset(new_session = False)
1076 998
1077 999
1078 1000
1079 1001 def magic_reset_selective(self, parameter_s=''):
1080 1002 """Resets the namespace by removing names defined by the user.
1081 1003
1082 1004 Input/Output history are left around in case you need them.
1083 1005
1084 1006 %reset_selective [-f] regex
1085 1007
1086 1008 No action is taken if regex is not included
1087 1009
1088 1010 Options
1089 1011 -f : force reset without asking for confirmation.
1090 1012
1091 1013 Examples
1092 1014 --------
1093 1015
1094 1016 We first fully reset the namespace so your output looks identical to
1095 1017 this example for pedagogical reasons; in practice you do not need a
1096 1018 full reset.
1097 1019
1098 1020 In [1]: %reset -f
1099 1021
1100 1022 Now, with a clean namespace we can make a few variables and use
1101 1023 %reset_selective to only delete names that match our regexp:
1102 1024
1103 1025 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1104 1026
1105 1027 In [3]: who_ls
1106 1028 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1107 1029
1108 1030 In [4]: %reset_selective -f b[2-3]m
1109 1031
1110 1032 In [5]: who_ls
1111 1033 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1112 1034
1113 1035 In [6]: %reset_selective -f d
1114 1036
1115 1037 In [7]: who_ls
1116 1038 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1117 1039
1118 1040 In [8]: %reset_selective -f c
1119 1041
1120 1042 In [9]: who_ls
1121 1043 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1122 1044
1123 1045 In [10]: %reset_selective -f b
1124 1046
1125 1047 In [11]: who_ls
1126 1048 Out[11]: ['a']
1127 1049 """
1128 1050
1129 1051 opts, regex = self.parse_options(parameter_s,'f')
1130 1052
1131 1053 if opts.has_key('f'):
1132 1054 ans = True
1133 1055 else:
1134 1056 ans = self.shell.ask_yes_no(
1135 1057 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1136 1058 if not ans:
1137 1059 print 'Nothing done.'
1138 1060 return
1139 1061 user_ns = self.shell.user_ns
1140 1062 if not regex:
1141 1063 print 'No regex pattern specified. Nothing done.'
1142 1064 return
1143 1065 else:
1144 1066 try:
1145 1067 m = re.compile(regex)
1146 1068 except TypeError:
1147 1069 raise TypeError('regex must be a string or compiled pattern')
1148 1070 for i in self.magic_who_ls():
1149 1071 if m.search(i):
1150 1072 del(user_ns[i])
1151 1073
1152 1074 def magic_xdel(self, parameter_s=''):
1153 1075 """Delete a variable, trying to clear it from anywhere that
1154 1076 IPython's machinery has references to it. By default, this uses
1155 1077 the identity of the named object in the user namespace to remove
1156 1078 references held under other names. The object is also removed
1157 1079 from the output history.
1158 1080
1159 1081 Options
1160 1082 -n : Delete the specified name from all namespaces, without
1161 1083 checking their identity.
1162 1084 """
1163 1085 opts, varname = self.parse_options(parameter_s,'n')
1164 1086 try:
1165 1087 self.shell.del_var(varname, ('n' in opts))
1166 1088 except (NameError, ValueError) as e:
1167 1089 print type(e).__name__ +": "+ str(e)
1168 1090
1169 1091 def magic_logstart(self,parameter_s=''):
1170 1092 """Start logging anywhere in a session.
1171 1093
1172 1094 %logstart [-o|-r|-t] [log_name [log_mode]]
1173 1095
1174 1096 If no name is given, it defaults to a file named 'ipython_log.py' in your
1175 1097 current directory, in 'rotate' mode (see below).
1176 1098
1177 1099 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1178 1100 history up to that point and then continues logging.
1179 1101
1180 1102 %logstart takes a second optional parameter: logging mode. This can be one
1181 1103 of (note that the modes are given unquoted):\\
1182 1104 append: well, that says it.\\
1183 1105 backup: rename (if exists) to name~ and start name.\\
1184 1106 global: single logfile in your home dir, appended to.\\
1185 1107 over : overwrite existing log.\\
1186 1108 rotate: create rotating logs name.1~, name.2~, etc.
1187 1109
1188 1110 Options:
1189 1111
1190 1112 -o: log also IPython's output. In this mode, all commands which
1191 1113 generate an Out[NN] prompt are recorded to the logfile, right after
1192 1114 their corresponding input line. The output lines are always
1193 1115 prepended with a '#[Out]# ' marker, so that the log remains valid
1194 1116 Python code.
1195 1117
1196 1118 Since this marker is always the same, filtering only the output from
1197 1119 a log is very easy, using for example a simple awk call:
1198 1120
1199 1121 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1200 1122
1201 1123 -r: log 'raw' input. Normally, IPython's logs contain the processed
1202 1124 input, so that user lines are logged in their final form, converted
1203 1125 into valid Python. For example, %Exit is logged as
1204 1126 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1205 1127 exactly as typed, with no transformations applied.
1206 1128
1207 1129 -t: put timestamps before each input line logged (these are put in
1208 1130 comments)."""
1209 1131
1210 1132 opts,par = self.parse_options(parameter_s,'ort')
1211 1133 log_output = 'o' in opts
1212 1134 log_raw_input = 'r' in opts
1213 1135 timestamp = 't' in opts
1214 1136
1215 1137 logger = self.shell.logger
1216 1138
1217 1139 # if no args are given, the defaults set in the logger constructor by
1218 1140 # ipytohn remain valid
1219 1141 if par:
1220 1142 try:
1221 1143 logfname,logmode = par.split()
1222 1144 except:
1223 1145 logfname = par
1224 1146 logmode = 'backup'
1225 1147 else:
1226 1148 logfname = logger.logfname
1227 1149 logmode = logger.logmode
1228 1150 # put logfname into rc struct as if it had been called on the command
1229 1151 # line, so it ends up saved in the log header Save it in case we need
1230 1152 # to restore it...
1231 1153 old_logfile = self.shell.logfile
1232 1154 if logfname:
1233 1155 logfname = os.path.expanduser(logfname)
1234 1156 self.shell.logfile = logfname
1235 1157
1236 1158 loghead = '# IPython log file\n\n'
1237 1159 try:
1238 1160 started = logger.logstart(logfname,loghead,logmode,
1239 1161 log_output,timestamp,log_raw_input)
1240 1162 except:
1241 1163 self.shell.logfile = old_logfile
1242 1164 warn("Couldn't start log: %s" % sys.exc_info()[1])
1243 1165 else:
1244 1166 # log input history up to this point, optionally interleaving
1245 1167 # output if requested
1246 1168
1247 1169 if timestamp:
1248 1170 # disable timestamping for the previous history, since we've
1249 1171 # lost those already (no time machine here).
1250 1172 logger.timestamp = False
1251 1173
1252 1174 if log_raw_input:
1253 1175 input_hist = self.shell.history_manager.input_hist_raw
1254 1176 else:
1255 1177 input_hist = self.shell.history_manager.input_hist_parsed
1256 1178
1257 1179 if log_output:
1258 1180 log_write = logger.log_write
1259 1181 output_hist = self.shell.history_manager.output_hist
1260 1182 for n in range(1,len(input_hist)-1):
1261 1183 log_write(input_hist[n].rstrip() + '\n')
1262 1184 if n in output_hist:
1263 1185 log_write(repr(output_hist[n]),'output')
1264 1186 else:
1265 1187 logger.log_write('\n'.join(input_hist[1:]))
1266 1188 logger.log_write('\n')
1267 1189 if timestamp:
1268 1190 # re-enable timestamping
1269 1191 logger.timestamp = True
1270 1192
1271 1193 print ('Activating auto-logging. '
1272 1194 'Current session state plus future input saved.')
1273 1195 logger.logstate()
1274 1196
1275 1197 def magic_logstop(self,parameter_s=''):
1276 1198 """Fully stop logging and close log file.
1277 1199
1278 1200 In order to start logging again, a new %logstart call needs to be made,
1279 1201 possibly (though not necessarily) with a new filename, mode and other
1280 1202 options."""
1281 1203 self.logger.logstop()
1282 1204
1283 1205 def magic_logoff(self,parameter_s=''):
1284 1206 """Temporarily stop logging.
1285 1207
1286 1208 You must have previously started logging."""
1287 1209 self.shell.logger.switch_log(0)
1288 1210
1289 1211 def magic_logon(self,parameter_s=''):
1290 1212 """Restart logging.
1291 1213
1292 1214 This function is for restarting logging which you've temporarily
1293 1215 stopped with %logoff. For starting logging for the first time, you
1294 1216 must use the %logstart function, which allows you to specify an
1295 1217 optional log filename."""
1296 1218
1297 1219 self.shell.logger.switch_log(1)
1298 1220
1299 1221 def magic_logstate(self,parameter_s=''):
1300 1222 """Print the status of the logging system."""
1301 1223
1302 1224 self.shell.logger.logstate()
1303 1225
1304 1226 def magic_pdb(self, parameter_s=''):
1305 1227 """Control the automatic calling of the pdb interactive debugger.
1306 1228
1307 1229 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1308 1230 argument it works as a toggle.
1309 1231
1310 1232 When an exception is triggered, IPython can optionally call the
1311 1233 interactive pdb debugger after the traceback printout. %pdb toggles
1312 1234 this feature on and off.
1313 1235
1314 1236 The initial state of this feature is set in your configuration
1315 1237 file (the option is ``InteractiveShell.pdb``).
1316 1238
1317 1239 If you want to just activate the debugger AFTER an exception has fired,
1318 1240 without having to type '%pdb on' and rerunning your code, you can use
1319 1241 the %debug magic."""
1320 1242
1321 1243 par = parameter_s.strip().lower()
1322 1244
1323 1245 if par:
1324 1246 try:
1325 1247 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1326 1248 except KeyError:
1327 1249 print ('Incorrect argument. Use on/1, off/0, '
1328 1250 'or nothing for a toggle.')
1329 1251 return
1330 1252 else:
1331 1253 # toggle
1332 1254 new_pdb = not self.shell.call_pdb
1333 1255
1334 1256 # set on the shell
1335 1257 self.shell.call_pdb = new_pdb
1336 1258 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1337 1259
1338 1260 def magic_debug(self, parameter_s=''):
1339 1261 """Activate the interactive debugger in post-mortem mode.
1340 1262
1341 1263 If an exception has just occurred, this lets you inspect its stack
1342 1264 frames interactively. Note that this will always work only on the last
1343 1265 traceback that occurred, so you must call this quickly after an
1344 1266 exception that you wish to inspect has fired, because if another one
1345 1267 occurs, it clobbers the previous one.
1346 1268
1347 1269 If you want IPython to automatically do this on every exception, see
1348 1270 the %pdb magic for more details.
1349 1271 """
1350 1272 self.shell.debugger(force=True)
1351 1273
1352 1274 @skip_doctest
1353 1275 def magic_prun(self, parameter_s ='',user_mode=1,
1354 1276 opts=None,arg_lst=None,prog_ns=None):
1355 1277
1356 1278 """Run a statement through the python code profiler.
1357 1279
1358 1280 Usage:
1359 1281 %prun [options] statement
1360 1282
1361 1283 The given statement (which doesn't require quote marks) is run via the
1362 1284 python profiler in a manner similar to the profile.run() function.
1363 1285 Namespaces are internally managed to work correctly; profile.run
1364 1286 cannot be used in IPython because it makes certain assumptions about
1365 1287 namespaces which do not hold under IPython.
1366 1288
1367 1289 Options:
1368 1290
1369 1291 -l <limit>: you can place restrictions on what or how much of the
1370 1292 profile gets printed. The limit value can be:
1371 1293
1372 1294 * A string: only information for function names containing this string
1373 1295 is printed.
1374 1296
1375 1297 * An integer: only these many lines are printed.
1376 1298
1377 1299 * A float (between 0 and 1): this fraction of the report is printed
1378 1300 (for example, use a limit of 0.4 to see the topmost 40% only).
1379 1301
1380 1302 You can combine several limits with repeated use of the option. For
1381 1303 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1382 1304 information about class constructors.
1383 1305
1384 1306 -r: return the pstats.Stats object generated by the profiling. This
1385 1307 object has all the information about the profile in it, and you can
1386 1308 later use it for further analysis or in other functions.
1387 1309
1388 1310 -s <key>: sort profile by given key. You can provide more than one key
1389 1311 by using the option several times: '-s key1 -s key2 -s key3...'. The
1390 1312 default sorting key is 'time'.
1391 1313
1392 1314 The following is copied verbatim from the profile documentation
1393 1315 referenced below:
1394 1316
1395 1317 When more than one key is provided, additional keys are used as
1396 1318 secondary criteria when the there is equality in all keys selected
1397 1319 before them.
1398 1320
1399 1321 Abbreviations can be used for any key names, as long as the
1400 1322 abbreviation is unambiguous. The following are the keys currently
1401 1323 defined:
1402 1324
1403 1325 Valid Arg Meaning
1404 1326 "calls" call count
1405 1327 "cumulative" cumulative time
1406 1328 "file" file name
1407 1329 "module" file name
1408 1330 "pcalls" primitive call count
1409 1331 "line" line number
1410 1332 "name" function name
1411 1333 "nfl" name/file/line
1412 1334 "stdname" standard name
1413 1335 "time" internal time
1414 1336
1415 1337 Note that all sorts on statistics are in descending order (placing
1416 1338 most time consuming items first), where as name, file, and line number
1417 1339 searches are in ascending order (i.e., alphabetical). The subtle
1418 1340 distinction between "nfl" and "stdname" is that the standard name is a
1419 1341 sort of the name as printed, which means that the embedded line
1420 1342 numbers get compared in an odd way. For example, lines 3, 20, and 40
1421 1343 would (if the file names were the same) appear in the string order
1422 1344 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1423 1345 line numbers. In fact, sort_stats("nfl") is the same as
1424 1346 sort_stats("name", "file", "line").
1425 1347
1426 1348 -T <filename>: save profile results as shown on screen to a text
1427 1349 file. The profile is still shown on screen.
1428 1350
1429 1351 -D <filename>: save (via dump_stats) profile statistics to given
1430 1352 filename. This data is in a format understod by the pstats module, and
1431 1353 is generated by a call to the dump_stats() method of profile
1432 1354 objects. The profile is still shown on screen.
1433 1355
1434 1356 If you want to run complete programs under the profiler's control, use
1435 1357 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1436 1358 contains profiler specific options as described here.
1437 1359
1438 1360 You can read the complete documentation for the profile module with::
1439 1361
1440 1362 In [1]: import profile; profile.help()
1441 1363 """
1442 1364
1443 1365 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1444 1366 # protect user quote marks
1445 1367 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1446 1368
1447 1369 if user_mode: # regular user call
1448 1370 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1449 1371 list_all=1)
1450 1372 namespace = self.shell.user_ns
1451 1373 else: # called to run a program by %run -p
1452 1374 try:
1453 1375 filename = get_py_filename(arg_lst[0])
1454 1376 except IOError as e:
1455 1377 try:
1456 1378 msg = str(e)
1457 1379 except UnicodeError:
1458 1380 msg = e.message
1459 1381 error(msg)
1460 1382 return
1461 1383
1462 1384 arg_str = 'execfile(filename,prog_ns)'
1463 1385 namespace = locals()
1464 1386
1465 1387 opts.merge(opts_def)
1466 1388
1467 1389 prof = profile.Profile()
1468 1390 try:
1469 1391 prof = prof.runctx(arg_str,namespace,namespace)
1470 1392 sys_exit = ''
1471 1393 except SystemExit:
1472 1394 sys_exit = """*** SystemExit exception caught in code being profiled."""
1473 1395
1474 1396 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1475 1397
1476 1398 lims = opts.l
1477 1399 if lims:
1478 1400 lims = [] # rebuild lims with ints/floats/strings
1479 1401 for lim in opts.l:
1480 1402 try:
1481 1403 lims.append(int(lim))
1482 1404 except ValueError:
1483 1405 try:
1484 1406 lims.append(float(lim))
1485 1407 except ValueError:
1486 1408 lims.append(lim)
1487 1409
1488 1410 # Trap output.
1489 1411 stdout_trap = StringIO()
1490 1412
1491 1413 if hasattr(stats,'stream'):
1492 1414 # In newer versions of python, the stats object has a 'stream'
1493 1415 # attribute to write into.
1494 1416 stats.stream = stdout_trap
1495 1417 stats.print_stats(*lims)
1496 1418 else:
1497 1419 # For older versions, we manually redirect stdout during printing
1498 1420 sys_stdout = sys.stdout
1499 1421 try:
1500 1422 sys.stdout = stdout_trap
1501 1423 stats.print_stats(*lims)
1502 1424 finally:
1503 1425 sys.stdout = sys_stdout
1504 1426
1505 1427 output = stdout_trap.getvalue()
1506 1428 output = output.rstrip()
1507 1429
1508 1430 page.page(output)
1509 1431 print sys_exit,
1510 1432
1511 1433 dump_file = opts.D[0]
1512 1434 text_file = opts.T[0]
1513 1435 if dump_file:
1514 1436 dump_file = unquote_filename(dump_file)
1515 1437 prof.dump_stats(dump_file)
1516 1438 print '\n*** Profile stats marshalled to file',\
1517 1439 `dump_file`+'.',sys_exit
1518 1440 if text_file:
1519 1441 text_file = unquote_filename(text_file)
1520 1442 pfile = file(text_file,'w')
1521 1443 pfile.write(output)
1522 1444 pfile.close()
1523 1445 print '\n*** Profile printout saved to text file',\
1524 1446 `text_file`+'.',sys_exit
1525 1447
1526 1448 if opts.has_key('r'):
1527 1449 return stats
1528 1450 else:
1529 1451 return None
1530 1452
1531 1453 @skip_doctest
1532 1454 def magic_run(self, parameter_s ='', runner=None,
1533 1455 file_finder=get_py_filename):
1534 1456 """Run the named file inside IPython as a program.
1535 1457
1536 1458 Usage:\\
1537 1459 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1538 1460
1539 1461 Parameters after the filename are passed as command-line arguments to
1540 1462 the program (put in sys.argv). Then, control returns to IPython's
1541 1463 prompt.
1542 1464
1543 1465 This is similar to running at a system prompt:\\
1544 1466 $ python file args\\
1545 1467 but with the advantage of giving you IPython's tracebacks, and of
1546 1468 loading all variables into your interactive namespace for further use
1547 1469 (unless -p is used, see below).
1548 1470
1549 1471 The file is executed in a namespace initially consisting only of
1550 1472 __name__=='__main__' and sys.argv constructed as indicated. It thus
1551 1473 sees its environment as if it were being run as a stand-alone program
1552 1474 (except for sharing global objects such as previously imported
1553 1475 modules). But after execution, the IPython interactive namespace gets
1554 1476 updated with all variables defined in the program (except for __name__
1555 1477 and sys.argv). This allows for very convenient loading of code for
1556 1478 interactive work, while giving each program a 'clean sheet' to run in.
1557 1479
1558 1480 Options:
1559 1481
1560 1482 -n: __name__ is NOT set to '__main__', but to the running file's name
1561 1483 without extension (as python does under import). This allows running
1562 1484 scripts and reloading the definitions in them without calling code
1563 1485 protected by an ' if __name__ == "__main__" ' clause.
1564 1486
1565 1487 -i: run the file in IPython's namespace instead of an empty one. This
1566 1488 is useful if you are experimenting with code written in a text editor
1567 1489 which depends on variables defined interactively.
1568 1490
1569 1491 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1570 1492 being run. This is particularly useful if IPython is being used to
1571 1493 run unittests, which always exit with a sys.exit() call. In such
1572 1494 cases you are interested in the output of the test results, not in
1573 1495 seeing a traceback of the unittest module.
1574 1496
1575 1497 -t: print timing information at the end of the run. IPython will give
1576 1498 you an estimated CPU time consumption for your script, which under
1577 1499 Unix uses the resource module to avoid the wraparound problems of
1578 1500 time.clock(). Under Unix, an estimate of time spent on system tasks
1579 1501 is also given (for Windows platforms this is reported as 0.0).
1580 1502
1581 1503 If -t is given, an additional -N<N> option can be given, where <N>
1582 1504 must be an integer indicating how many times you want the script to
1583 1505 run. The final timing report will include total and per run results.
1584 1506
1585 1507 For example (testing the script uniq_stable.py):
1586 1508
1587 1509 In [1]: run -t uniq_stable
1588 1510
1589 1511 IPython CPU timings (estimated):\\
1590 1512 User : 0.19597 s.\\
1591 1513 System: 0.0 s.\\
1592 1514
1593 1515 In [2]: run -t -N5 uniq_stable
1594 1516
1595 1517 IPython CPU timings (estimated):\\
1596 1518 Total runs performed: 5\\
1597 1519 Times : Total Per run\\
1598 1520 User : 0.910862 s, 0.1821724 s.\\
1599 1521 System: 0.0 s, 0.0 s.
1600 1522
1601 1523 -d: run your program under the control of pdb, the Python debugger.
1602 1524 This allows you to execute your program step by step, watch variables,
1603 1525 etc. Internally, what IPython does is similar to calling:
1604 1526
1605 1527 pdb.run('execfile("YOURFILENAME")')
1606 1528
1607 1529 with a breakpoint set on line 1 of your file. You can change the line
1608 1530 number for this automatic breakpoint to be <N> by using the -bN option
1609 1531 (where N must be an integer). For example:
1610 1532
1611 1533 %run -d -b40 myscript
1612 1534
1613 1535 will set the first breakpoint at line 40 in myscript.py. Note that
1614 1536 the first breakpoint must be set on a line which actually does
1615 1537 something (not a comment or docstring) for it to stop execution.
1616 1538
1617 1539 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1618 1540 first enter 'c' (without qoutes) to start execution up to the first
1619 1541 breakpoint.
1620 1542
1621 1543 Entering 'help' gives information about the use of the debugger. You
1622 1544 can easily see pdb's full documentation with "import pdb;pdb.help()"
1623 1545 at a prompt.
1624 1546
1625 1547 -p: run program under the control of the Python profiler module (which
1626 1548 prints a detailed report of execution times, function calls, etc).
1627 1549
1628 1550 You can pass other options after -p which affect the behavior of the
1629 1551 profiler itself. See the docs for %prun for details.
1630 1552
1631 1553 In this mode, the program's variables do NOT propagate back to the
1632 1554 IPython interactive namespace (because they remain in the namespace
1633 1555 where the profiler executes them).
1634 1556
1635 1557 Internally this triggers a call to %prun, see its documentation for
1636 1558 details on the options available specifically for profiling.
1637 1559
1638 1560 There is one special usage for which the text above doesn't apply:
1639 1561 if the filename ends with .ipy, the file is run as ipython script,
1640 1562 just as if the commands were written on IPython prompt.
1641 1563
1642 1564 -m: specify module name to load instead of script path. Similar to
1643 1565 the -m option for the python interpreter. Use this option last if you
1644 1566 want to combine with other %run options. Unlike the python interpreter
1645 1567 only source modules are allowed no .pyc or .pyo files.
1646 1568 For example:
1647 1569
1648 1570 %run -m example
1649 1571
1650 1572 will run the example module.
1651 1573
1652 1574 """
1653 1575
1654 1576 # get arguments and set sys.argv for program to be run.
1655 1577 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
1656 1578 mode='list', list_all=1)
1657 1579 if "m" in opts:
1658 1580 modulename = opts["m"][0]
1659 1581 modpath = find_mod(modulename)
1660 1582 if modpath is None:
1661 1583 warn('%r is not a valid modulename on sys.path'%modulename)
1662 1584 return
1663 1585 arg_lst = [modpath] + arg_lst
1664 1586 try:
1665 1587 filename = file_finder(arg_lst[0])
1666 1588 except IndexError:
1667 1589 warn('you must provide at least a filename.')
1668 1590 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1669 1591 return
1670 1592 except IOError as e:
1671 1593 try:
1672 1594 msg = str(e)
1673 1595 except UnicodeError:
1674 1596 msg = e.message
1675 1597 error(msg)
1676 1598 return
1677 1599
1678 1600 if filename.lower().endswith('.ipy'):
1679 1601 self.shell.safe_execfile_ipy(filename)
1680 1602 return
1681 1603
1682 1604 # Control the response to exit() calls made by the script being run
1683 1605 exit_ignore = 'e' in opts
1684 1606
1685 1607 # Make sure that the running script gets a proper sys.argv as if it
1686 1608 # were run from a system shell.
1687 1609 save_argv = sys.argv # save it for later restoring
1688 1610
1689 1611 # simulate shell expansion on arguments, at least tilde expansion
1690 1612 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1691 1613
1692 1614 sys.argv = [filename] + args # put in the proper filename
1693 1615
1694 1616 if 'i' in opts:
1695 1617 # Run in user's interactive namespace
1696 1618 prog_ns = self.shell.user_ns
1697 1619 __name__save = self.shell.user_ns['__name__']
1698 1620 prog_ns['__name__'] = '__main__'
1699 1621 main_mod = self.shell.new_main_mod(prog_ns)
1700 1622 else:
1701 1623 # Run in a fresh, empty namespace
1702 1624 if 'n' in opts:
1703 1625 name = os.path.splitext(os.path.basename(filename))[0]
1704 1626 else:
1705 1627 name = '__main__'
1706 1628
1707 1629 main_mod = self.shell.new_main_mod()
1708 1630 prog_ns = main_mod.__dict__
1709 1631 prog_ns['__name__'] = name
1710 1632
1711 1633 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1712 1634 # set the __file__ global in the script's namespace
1713 1635 prog_ns['__file__'] = filename
1714 1636
1715 1637 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1716 1638 # that, if we overwrite __main__, we replace it at the end
1717 1639 main_mod_name = prog_ns['__name__']
1718 1640
1719 1641 if main_mod_name == '__main__':
1720 1642 restore_main = sys.modules['__main__']
1721 1643 else:
1722 1644 restore_main = False
1723 1645
1724 1646 # This needs to be undone at the end to prevent holding references to
1725 1647 # every single object ever created.
1726 1648 sys.modules[main_mod_name] = main_mod
1727 1649
1728 1650 try:
1729 1651 stats = None
1730 1652 with self.readline_no_record:
1731 1653 if 'p' in opts:
1732 1654 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1733 1655 else:
1734 1656 if 'd' in opts:
1735 1657 deb = debugger.Pdb(self.shell.colors)
1736 1658 # reset Breakpoint state, which is moronically kept
1737 1659 # in a class
1738 1660 bdb.Breakpoint.next = 1
1739 1661 bdb.Breakpoint.bplist = {}
1740 1662 bdb.Breakpoint.bpbynumber = [None]
1741 1663 # Set an initial breakpoint to stop execution
1742 1664 maxtries = 10
1743 1665 bp = int(opts.get('b', [1])[0])
1744 1666 checkline = deb.checkline(filename, bp)
1745 1667 if not checkline:
1746 1668 for bp in range(bp + 1, bp + maxtries + 1):
1747 1669 if deb.checkline(filename, bp):
1748 1670 break
1749 1671 else:
1750 1672 msg = ("\nI failed to find a valid line to set "
1751 1673 "a breakpoint\n"
1752 1674 "after trying up to line: %s.\n"
1753 1675 "Please set a valid breakpoint manually "
1754 1676 "with the -b option." % bp)
1755 1677 error(msg)
1756 1678 return
1757 1679 # if we find a good linenumber, set the breakpoint
1758 1680 deb.do_break('%s:%s' % (filename, bp))
1759 1681 # Start file run
1760 1682 print "NOTE: Enter 'c' at the",
1761 1683 print "%s prompt to start your script." % deb.prompt
1762 1684 try:
1763 1685 deb.run('execfile("%s")' % filename, prog_ns)
1764 1686
1765 1687 except:
1766 1688 etype, value, tb = sys.exc_info()
1767 1689 # Skip three frames in the traceback: the %run one,
1768 1690 # one inside bdb.py, and the command-line typed by the
1769 1691 # user (run by exec in pdb itself).
1770 1692 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1771 1693 else:
1772 1694 if runner is None:
1773 1695 runner = self.shell.safe_execfile
1774 1696 if 't' in opts:
1775 1697 # timed execution
1776 1698 try:
1777 1699 nruns = int(opts['N'][0])
1778 1700 if nruns < 1:
1779 1701 error('Number of runs must be >=1')
1780 1702 return
1781 1703 except (KeyError):
1782 1704 nruns = 1
1783 1705 twall0 = time.time()
1784 1706 if nruns == 1:
1785 1707 t0 = clock2()
1786 1708 runner(filename, prog_ns, prog_ns,
1787 1709 exit_ignore=exit_ignore)
1788 1710 t1 = clock2()
1789 1711 t_usr = t1[0] - t0[0]
1790 1712 t_sys = t1[1] - t0[1]
1791 1713 print "\nIPython CPU timings (estimated):"
1792 1714 print " User : %10.2f s." % t_usr
1793 1715 print " System : %10.2f s." % t_sys
1794 1716 else:
1795 1717 runs = range(nruns)
1796 1718 t0 = clock2()
1797 1719 for nr in runs:
1798 1720 runner(filename, prog_ns, prog_ns,
1799 1721 exit_ignore=exit_ignore)
1800 1722 t1 = clock2()
1801 1723 t_usr = t1[0] - t0[0]
1802 1724 t_sys = t1[1] - t0[1]
1803 1725 print "\nIPython CPU timings (estimated):"
1804 1726 print "Total runs performed:", nruns
1805 1727 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1806 1728 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
1807 1729 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
1808 1730 twall1 = time.time()
1809 1731 print "Wall time: %10.2f s." % (twall1 - twall0)
1810 1732
1811 1733 else:
1812 1734 # regular execution
1813 1735 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1814 1736
1815 1737 if 'i' in opts:
1816 1738 self.shell.user_ns['__name__'] = __name__save
1817 1739 else:
1818 1740 # The shell MUST hold a reference to prog_ns so after %run
1819 1741 # exits, the python deletion mechanism doesn't zero it out
1820 1742 # (leaving dangling references).
1821 1743 self.shell.cache_main_mod(prog_ns, filename)
1822 1744 # update IPython interactive namespace
1823 1745
1824 1746 # Some forms of read errors on the file may mean the
1825 1747 # __name__ key was never set; using pop we don't have to
1826 1748 # worry about a possible KeyError.
1827 1749 prog_ns.pop('__name__', None)
1828 1750
1829 1751 self.shell.user_ns.update(prog_ns)
1830 1752 finally:
1831 1753 # It's a bit of a mystery why, but __builtins__ can change from
1832 1754 # being a module to becoming a dict missing some key data after
1833 1755 # %run. As best I can see, this is NOT something IPython is doing
1834 1756 # at all, and similar problems have been reported before:
1835 1757 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1836 1758 # Since this seems to be done by the interpreter itself, the best
1837 1759 # we can do is to at least restore __builtins__ for the user on
1838 1760 # exit.
1839 1761 self.shell.user_ns['__builtins__'] = builtin_mod
1840 1762
1841 1763 # Ensure key global structures are restored
1842 1764 sys.argv = save_argv
1843 1765 if restore_main:
1844 1766 sys.modules['__main__'] = restore_main
1845 1767 else:
1846 1768 # Remove from sys.modules the reference to main_mod we'd
1847 1769 # added. Otherwise it will trap references to objects
1848 1770 # contained therein.
1849 1771 del sys.modules[main_mod_name]
1850 1772
1851 1773 return stats
1852 1774
1853 1775 @skip_doctest
1854 1776 def magic_timeit(self, parameter_s =''):
1855 1777 """Time execution of a Python statement or expression
1856 1778
1857 1779 Usage:\\
1858 1780 %timeit [-n<N> -r<R> [-t|-c]] statement
1859 1781
1860 1782 Time execution of a Python statement or expression using the timeit
1861 1783 module.
1862 1784
1863 1785 Options:
1864 1786 -n<N>: execute the given statement <N> times in a loop. If this value
1865 1787 is not given, a fitting value is chosen.
1866 1788
1867 1789 -r<R>: repeat the loop iteration <R> times and take the best result.
1868 1790 Default: 3
1869 1791
1870 1792 -t: use time.time to measure the time, which is the default on Unix.
1871 1793 This function measures wall time.
1872 1794
1873 1795 -c: use time.clock to measure the time, which is the default on
1874 1796 Windows and measures wall time. On Unix, resource.getrusage is used
1875 1797 instead and returns the CPU user time.
1876 1798
1877 1799 -p<P>: use a precision of <P> digits to display the timing result.
1878 1800 Default: 3
1879 1801
1880 1802
1881 1803 Examples:
1882 1804
1883 1805 In [1]: %timeit pass
1884 1806 10000000 loops, best of 3: 53.3 ns per loop
1885 1807
1886 1808 In [2]: u = None
1887 1809
1888 1810 In [3]: %timeit u is None
1889 1811 10000000 loops, best of 3: 184 ns per loop
1890 1812
1891 1813 In [4]: %timeit -r 4 u == None
1892 1814 1000000 loops, best of 4: 242 ns per loop
1893 1815
1894 1816 In [5]: import time
1895 1817
1896 1818 In [6]: %timeit -n1 time.sleep(2)
1897 1819 1 loops, best of 3: 2 s per loop
1898 1820
1899 1821
1900 1822 The times reported by %timeit will be slightly higher than those
1901 1823 reported by the timeit.py script when variables are accessed. This is
1902 1824 due to the fact that %timeit executes the statement in the namespace
1903 1825 of the shell, compared with timeit.py, which uses a single setup
1904 1826 statement to import function or create variables. Generally, the bias
1905 1827 does not matter as long as results from timeit.py are not mixed with
1906 1828 those from %timeit."""
1907 1829
1908 1830 import timeit
1909 1831 import math
1910 1832
1911 1833 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1912 1834 # certain terminals. Until we figure out a robust way of
1913 1835 # auto-detecting if the terminal can deal with it, use plain 'us' for
1914 1836 # microseconds. I am really NOT happy about disabling the proper
1915 1837 # 'micro' prefix, but crashing is worse... If anyone knows what the
1916 1838 # right solution for this is, I'm all ears...
1917 1839 #
1918 1840 # Note: using
1919 1841 #
1920 1842 # s = u'\xb5'
1921 1843 # s.encode(sys.getdefaultencoding())
1922 1844 #
1923 1845 # is not sufficient, as I've seen terminals where that fails but
1924 1846 # print s
1925 1847 #
1926 1848 # succeeds
1927 1849 #
1928 1850 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1929 1851
1930 1852 #units = [u"s", u"ms",u'\xb5',"ns"]
1931 1853 units = [u"s", u"ms",u'us',"ns"]
1932 1854
1933 1855 scaling = [1, 1e3, 1e6, 1e9]
1934 1856
1935 1857 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1936 1858 posix=False)
1937 1859 if stmt == "":
1938 1860 return
1939 1861 timefunc = timeit.default_timer
1940 1862 number = int(getattr(opts, "n", 0))
1941 1863 repeat = int(getattr(opts, "r", timeit.default_repeat))
1942 1864 precision = int(getattr(opts, "p", 3))
1943 1865 if hasattr(opts, "t"):
1944 1866 timefunc = time.time
1945 1867 if hasattr(opts, "c"):
1946 1868 timefunc = clock
1947 1869
1948 1870 timer = timeit.Timer(timer=timefunc)
1949 1871 # this code has tight coupling to the inner workings of timeit.Timer,
1950 1872 # but is there a better way to achieve that the code stmt has access
1951 1873 # to the shell namespace?
1952 1874
1953 1875 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1954 1876 'setup': "pass"}
1955 1877 # Track compilation time so it can be reported if too long
1956 1878 # Minimum time above which compilation time will be reported
1957 1879 tc_min = 0.1
1958 1880
1959 1881 t0 = clock()
1960 1882 code = compile(src, "<magic-timeit>", "exec")
1961 1883 tc = clock()-t0
1962 1884
1963 1885 ns = {}
1964 1886 exec code in self.shell.user_ns, ns
1965 1887 timer.inner = ns["inner"]
1966 1888
1967 1889 if number == 0:
1968 1890 # determine number so that 0.2 <= total time < 2.0
1969 1891 number = 1
1970 1892 for i in range(1, 10):
1971 1893 if timer.timeit(number) >= 0.2:
1972 1894 break
1973 1895 number *= 10
1974 1896
1975 1897 best = min(timer.repeat(repeat, number)) / number
1976 1898
1977 1899 if best > 0.0 and best < 1000.0:
1978 1900 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1979 1901 elif best >= 1000.0:
1980 1902 order = 0
1981 1903 else:
1982 1904 order = 3
1983 1905 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1984 1906 precision,
1985 1907 best * scaling[order],
1986 1908 units[order])
1987 1909 if tc > tc_min:
1988 1910 print "Compiler time: %.2f s" % tc
1989 1911
1990 1912 @skip_doctest
1991 1913 @needs_local_scope
1992 1914 def magic_time(self,parameter_s = ''):
1993 1915 """Time execution of a Python statement or expression.
1994 1916
1995 1917 The CPU and wall clock times are printed, and the value of the
1996 1918 expression (if any) is returned. Note that under Win32, system time
1997 1919 is always reported as 0, since it can not be measured.
1998 1920
1999 1921 This function provides very basic timing functionality. In Python
2000 1922 2.3, the timeit module offers more control and sophistication, so this
2001 1923 could be rewritten to use it (patches welcome).
2002 1924
2003 1925 Some examples:
2004 1926
2005 1927 In [1]: time 2**128
2006 1928 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2007 1929 Wall time: 0.00
2008 1930 Out[1]: 340282366920938463463374607431768211456L
2009 1931
2010 1932 In [2]: n = 1000000
2011 1933
2012 1934 In [3]: time sum(range(n))
2013 1935 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
2014 1936 Wall time: 1.37
2015 1937 Out[3]: 499999500000L
2016 1938
2017 1939 In [4]: time print 'hello world'
2018 1940 hello world
2019 1941 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2020 1942 Wall time: 0.00
2021 1943
2022 1944 Note that the time needed by Python to compile the given expression
2023 1945 will be reported if it is more than 0.1s. In this example, the
2024 1946 actual exponentiation is done by Python at compilation time, so while
2025 1947 the expression can take a noticeable amount of time to compute, that
2026 1948 time is purely due to the compilation:
2027 1949
2028 1950 In [5]: time 3**9999;
2029 1951 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2030 1952 Wall time: 0.00 s
2031 1953
2032 1954 In [6]: time 3**999999;
2033 1955 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2034 1956 Wall time: 0.00 s
2035 1957 Compiler : 0.78 s
2036 1958 """
2037 1959
2038 1960 # fail immediately if the given expression can't be compiled
2039 1961
2040 1962 expr = self.shell.prefilter(parameter_s,False)
2041 1963
2042 1964 # Minimum time above which compilation time will be reported
2043 1965 tc_min = 0.1
2044 1966
2045 1967 try:
2046 1968 mode = 'eval'
2047 1969 t0 = clock()
2048 1970 code = compile(expr,'<timed eval>',mode)
2049 1971 tc = clock()-t0
2050 1972 except SyntaxError:
2051 1973 mode = 'exec'
2052 1974 t0 = clock()
2053 1975 code = compile(expr,'<timed exec>',mode)
2054 1976 tc = clock()-t0
2055 1977 # skew measurement as little as possible
2056 1978 glob = self.shell.user_ns
2057 1979 locs = self._magic_locals
2058 1980 clk = clock2
2059 1981 wtime = time.time
2060 1982 # time execution
2061 1983 wall_st = wtime()
2062 1984 if mode=='eval':
2063 1985 st = clk()
2064 1986 out = eval(code, glob, locs)
2065 1987 end = clk()
2066 1988 else:
2067 1989 st = clk()
2068 1990 exec code in glob, locs
2069 1991 end = clk()
2070 1992 out = None
2071 1993 wall_end = wtime()
2072 1994 # Compute actual times and report
2073 1995 wall_time = wall_end-wall_st
2074 1996 cpu_user = end[0]-st[0]
2075 1997 cpu_sys = end[1]-st[1]
2076 1998 cpu_tot = cpu_user+cpu_sys
2077 1999 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2078 2000 (cpu_user,cpu_sys,cpu_tot)
2079 2001 print "Wall time: %.2f s" % wall_time
2080 2002 if tc > tc_min:
2081 2003 print "Compiler : %.2f s" % tc
2082 2004 return out
2083 2005
2084 2006 @skip_doctest
2085 2007 def magic_macro(self,parameter_s = ''):
2086 2008 """Define a macro for future re-execution. It accepts ranges of history,
2087 2009 filenames or string objects.
2088 2010
2089 2011 Usage:\\
2090 2012 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2091 2013
2092 2014 Options:
2093 2015
2094 2016 -r: use 'raw' input. By default, the 'processed' history is used,
2095 2017 so that magics are loaded in their transformed version to valid
2096 2018 Python. If this option is given, the raw input as typed as the
2097 2019 command line is used instead.
2098 2020
2099 2021 This will define a global variable called `name` which is a string
2100 2022 made of joining the slices and lines you specify (n1,n2,... numbers
2101 2023 above) from your input history into a single string. This variable
2102 2024 acts like an automatic function which re-executes those lines as if
2103 2025 you had typed them. You just type 'name' at the prompt and the code
2104 2026 executes.
2105 2027
2106 2028 The syntax for indicating input ranges is described in %history.
2107 2029
2108 2030 Note: as a 'hidden' feature, you can also use traditional python slice
2109 2031 notation, where N:M means numbers N through M-1.
2110 2032
2111 2033 For example, if your history contains (%hist prints it):
2112 2034
2113 2035 44: x=1
2114 2036 45: y=3
2115 2037 46: z=x+y
2116 2038 47: print x
2117 2039 48: a=5
2118 2040 49: print 'x',x,'y',y
2119 2041
2120 2042 you can create a macro with lines 44 through 47 (included) and line 49
2121 2043 called my_macro with:
2122 2044
2123 2045 In [55]: %macro my_macro 44-47 49
2124 2046
2125 2047 Now, typing `my_macro` (without quotes) will re-execute all this code
2126 2048 in one pass.
2127 2049
2128 2050 You don't need to give the line-numbers in order, and any given line
2129 2051 number can appear multiple times. You can assemble macros with any
2130 2052 lines from your input history in any order.
2131 2053
2132 2054 The macro is a simple object which holds its value in an attribute,
2133 2055 but IPython's display system checks for macros and executes them as
2134 2056 code instead of printing them when you type their name.
2135 2057
2136 2058 You can view a macro's contents by explicitly printing it with:
2137 2059
2138 2060 'print macro_name'.
2139 2061
2140 2062 """
2141 2063 opts,args = self.parse_options(parameter_s,'r',mode='list')
2142 2064 if not args: # List existing macros
2143 2065 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2144 2066 isinstance(v, Macro))
2145 2067 if len(args) == 1:
2146 2068 raise UsageError(
2147 2069 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2148 2070 name, codefrom = args[0], " ".join(args[1:])
2149 2071
2150 2072 #print 'rng',ranges # dbg
2151 2073 try:
2152 2074 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2153 2075 except (ValueError, TypeError) as e:
2154 2076 print e.args[0]
2155 2077 return
2156 2078 macro = Macro(lines)
2157 2079 self.shell.define_macro(name, macro)
2158 2080 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2159 2081 print '=== Macro contents: ==='
2160 2082 print macro,
2161 2083
2162 2084 def magic_save(self,parameter_s = ''):
2163 2085 """Save a set of lines or a macro to a given filename.
2164 2086
2165 2087 Usage:\\
2166 2088 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2167 2089
2168 2090 Options:
2169 2091
2170 2092 -r: use 'raw' input. By default, the 'processed' history is used,
2171 2093 so that magics are loaded in their transformed version to valid
2172 2094 Python. If this option is given, the raw input as typed as the
2173 2095 command line is used instead.
2174 2096
2175 2097 This function uses the same syntax as %history for input ranges,
2176 2098 then saves the lines to the filename you specify.
2177 2099
2178 2100 It adds a '.py' extension to the file if you don't do so yourself, and
2179 2101 it asks for confirmation before overwriting existing files."""
2180 2102
2181 2103 opts,args = self.parse_options(parameter_s,'r',mode='list')
2182 2104 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2183 2105 if not fname.endswith('.py'):
2184 2106 fname += '.py'
2185 2107 if os.path.isfile(fname):
2186 2108 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2187 2109 if ans.lower() not in ['y','yes']:
2188 2110 print 'Operation cancelled.'
2189 2111 return
2190 2112 try:
2191 2113 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2192 2114 except (TypeError, ValueError) as e:
2193 2115 print e.args[0]
2194 2116 return
2195 2117 with py3compat.open(fname,'w', encoding="utf-8") as f:
2196 2118 f.write(u"# coding: utf-8\n")
2197 2119 f.write(py3compat.cast_unicode(cmds))
2198 2120 print 'The following commands were written to file `%s`:' % fname
2199 2121 print cmds
2200 2122
2201 2123 def magic_pastebin(self, parameter_s = ''):
2202 2124 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2203 2125 try:
2204 2126 code = self.shell.find_user_code(parameter_s)
2205 2127 except (ValueError, TypeError) as e:
2206 2128 print e.args[0]
2207 2129 return
2208 2130 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2209 2131 id = pbserver.pastes.newPaste("python", code)
2210 2132 return "http://paste.pocoo.org/show/" + id
2211 2133
2212 2134 def magic_loadpy(self, arg_s):
2213 2135 """Load a .py python script into the GUI console.
2214 2136
2215 2137 This magic command can either take a local filename or a url::
2216 2138
2217 2139 %loadpy myscript.py
2218 2140 %loadpy http://www.example.com/myscript.py
2219 2141 """
2220 2142 arg_s = unquote_filename(arg_s)
2221 2143 if not arg_s.endswith('.py'):
2222 2144 raise ValueError('%%load only works with .py files: %s' % arg_s)
2223 2145 if arg_s.startswith('http'):
2224 2146 import urllib2
2225 2147 response = urllib2.urlopen(arg_s)
2226 2148 content = response.read()
2227 2149 else:
2228 2150 with open(arg_s) as f:
2229 2151 content = f.read()
2230 2152 self.set_next_input(content)
2231 2153
2232 2154 def _find_edit_target(self, args, opts, last_call):
2233 2155 """Utility method used by magic_edit to find what to edit."""
2234 2156
2235 2157 def make_filename(arg):
2236 2158 "Make a filename from the given args"
2237 2159 arg = unquote_filename(arg)
2238 2160 try:
2239 2161 filename = get_py_filename(arg)
2240 2162 except IOError:
2241 2163 # If it ends with .py but doesn't already exist, assume we want
2242 2164 # a new file.
2243 2165 if arg.endswith('.py'):
2244 2166 filename = arg
2245 2167 else:
2246 2168 filename = None
2247 2169 return filename
2248 2170
2249 2171 # Set a few locals from the options for convenience:
2250 2172 opts_prev = 'p' in opts
2251 2173 opts_raw = 'r' in opts
2252 2174
2253 2175 # custom exceptions
2254 2176 class DataIsObject(Exception): pass
2255 2177
2256 2178 # Default line number value
2257 2179 lineno = opts.get('n',None)
2258 2180
2259 2181 if opts_prev:
2260 2182 args = '_%s' % last_call[0]
2261 2183 if not self.shell.user_ns.has_key(args):
2262 2184 args = last_call[1]
2263 2185
2264 2186 # use last_call to remember the state of the previous call, but don't
2265 2187 # let it be clobbered by successive '-p' calls.
2266 2188 try:
2267 2189 last_call[0] = self.shell.displayhook.prompt_count
2268 2190 if not opts_prev:
2269 2191 last_call[1] = parameter_s
2270 2192 except:
2271 2193 pass
2272 2194
2273 2195 # by default this is done with temp files, except when the given
2274 2196 # arg is a filename
2275 2197 use_temp = True
2276 2198
2277 2199 data = ''
2278 2200
2279 2201 # First, see if the arguments should be a filename.
2280 2202 filename = make_filename(args)
2281 2203 if filename:
2282 2204 use_temp = False
2283 2205 elif args:
2284 2206 # Mode where user specifies ranges of lines, like in %macro.
2285 2207 data = self.extract_input_lines(args, opts_raw)
2286 2208 if not data:
2287 2209 try:
2288 2210 # Load the parameter given as a variable. If not a string,
2289 2211 # process it as an object instead (below)
2290 2212
2291 2213 #print '*** args',args,'type',type(args) # dbg
2292 2214 data = eval(args, self.shell.user_ns)
2293 2215 if not isinstance(data, basestring):
2294 2216 raise DataIsObject
2295 2217
2296 2218 except (NameError,SyntaxError):
2297 2219 # given argument is not a variable, try as a filename
2298 2220 filename = make_filename(args)
2299 2221 if filename is None:
2300 2222 warn("Argument given (%s) can't be found as a variable "
2301 2223 "or as a filename." % args)
2302 2224 return
2303 2225 use_temp = False
2304 2226
2305 2227 except DataIsObject:
2306 2228 # macros have a special edit function
2307 2229 if isinstance(data, Macro):
2308 2230 raise MacroToEdit(data)
2309 2231
2310 2232 # For objects, try to edit the file where they are defined
2311 2233 try:
2312 2234 filename = inspect.getabsfile(data)
2313 2235 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2314 2236 # class created by %edit? Try to find source
2315 2237 # by looking for method definitions instead, the
2316 2238 # __module__ in those classes is FakeModule.
2317 2239 attrs = [getattr(data, aname) for aname in dir(data)]
2318 2240 for attr in attrs:
2319 2241 if not inspect.ismethod(attr):
2320 2242 continue
2321 2243 filename = inspect.getabsfile(attr)
2322 2244 if filename and 'fakemodule' not in filename.lower():
2323 2245 # change the attribute to be the edit target instead
2324 2246 data = attr
2325 2247 break
2326 2248
2327 2249 datafile = 1
2328 2250 except TypeError:
2329 2251 filename = make_filename(args)
2330 2252 datafile = 1
2331 2253 warn('Could not find file where `%s` is defined.\n'
2332 2254 'Opening a file named `%s`' % (args,filename))
2333 2255 # Now, make sure we can actually read the source (if it was in
2334 2256 # a temp file it's gone by now).
2335 2257 if datafile:
2336 2258 try:
2337 2259 if lineno is None:
2338 2260 lineno = inspect.getsourcelines(data)[1]
2339 2261 except IOError:
2340 2262 filename = make_filename(args)
2341 2263 if filename is None:
2342 2264 warn('The file `%s` where `%s` was defined cannot '
2343 2265 'be read.' % (filename,data))
2344 2266 return
2345 2267 use_temp = False
2346 2268
2347 2269 if use_temp:
2348 2270 filename = self.shell.mktempfile(data)
2349 2271 print 'IPython will make a temporary file named:',filename
2350 2272
2351 2273 return filename, lineno, use_temp
2352 2274
2353 2275 def _edit_macro(self,mname,macro):
2354 2276 """open an editor with the macro data in a file"""
2355 2277 filename = self.shell.mktempfile(macro.value)
2356 2278 self.shell.hooks.editor(filename)
2357 2279
2358 2280 # and make a new macro object, to replace the old one
2359 2281 mfile = open(filename)
2360 2282 mvalue = mfile.read()
2361 2283 mfile.close()
2362 2284 self.shell.user_ns[mname] = Macro(mvalue)
2363 2285
2364 2286 def magic_ed(self,parameter_s=''):
2365 2287 """Alias to %edit."""
2366 2288 return self.magic_edit(parameter_s)
2367 2289
2368 2290 @skip_doctest
2369 2291 def magic_edit(self,parameter_s='',last_call=['','']):
2370 2292 """Bring up an editor and execute the resulting code.
2371 2293
2372 2294 Usage:
2373 2295 %edit [options] [args]
2374 2296
2375 2297 %edit runs IPython's editor hook. The default version of this hook is
2376 2298 set to call the editor specified by your $EDITOR environment variable.
2377 2299 If this isn't found, it will default to vi under Linux/Unix and to
2378 2300 notepad under Windows. See the end of this docstring for how to change
2379 2301 the editor hook.
2380 2302
2381 2303 You can also set the value of this editor via the
2382 2304 ``TerminalInteractiveShell.editor`` option in your configuration file.
2383 2305 This is useful if you wish to use a different editor from your typical
2384 2306 default with IPython (and for Windows users who typically don't set
2385 2307 environment variables).
2386 2308
2387 2309 This command allows you to conveniently edit multi-line code right in
2388 2310 your IPython session.
2389 2311
2390 2312 If called without arguments, %edit opens up an empty editor with a
2391 2313 temporary file and will execute the contents of this file when you
2392 2314 close it (don't forget to save it!).
2393 2315
2394 2316
2395 2317 Options:
2396 2318
2397 2319 -n <number>: open the editor at a specified line number. By default,
2398 2320 the IPython editor hook uses the unix syntax 'editor +N filename', but
2399 2321 you can configure this by providing your own modified hook if your
2400 2322 favorite editor supports line-number specifications with a different
2401 2323 syntax.
2402 2324
2403 2325 -p: this will call the editor with the same data as the previous time
2404 2326 it was used, regardless of how long ago (in your current session) it
2405 2327 was.
2406 2328
2407 2329 -r: use 'raw' input. This option only applies to input taken from the
2408 2330 user's history. By default, the 'processed' history is used, so that
2409 2331 magics are loaded in their transformed version to valid Python. If
2410 2332 this option is given, the raw input as typed as the command line is
2411 2333 used instead. When you exit the editor, it will be executed by
2412 2334 IPython's own processor.
2413 2335
2414 2336 -x: do not execute the edited code immediately upon exit. This is
2415 2337 mainly useful if you are editing programs which need to be called with
2416 2338 command line arguments, which you can then do using %run.
2417 2339
2418 2340
2419 2341 Arguments:
2420 2342
2421 2343 If arguments are given, the following possibilites exist:
2422 2344
2423 2345 - If the argument is a filename, IPython will load that into the
2424 2346 editor. It will execute its contents with execfile() when you exit,
2425 2347 loading any code in the file into your interactive namespace.
2426 2348
2427 2349 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2428 2350 The syntax is the same as in the %history magic.
2429 2351
2430 2352 - If the argument is a string variable, its contents are loaded
2431 2353 into the editor. You can thus edit any string which contains
2432 2354 python code (including the result of previous edits).
2433 2355
2434 2356 - If the argument is the name of an object (other than a string),
2435 2357 IPython will try to locate the file where it was defined and open the
2436 2358 editor at the point where it is defined. You can use `%edit function`
2437 2359 to load an editor exactly at the point where 'function' is defined,
2438 2360 edit it and have the file be executed automatically.
2439 2361
2440 2362 - If the object is a macro (see %macro for details), this opens up your
2441 2363 specified editor with a temporary file containing the macro's data.
2442 2364 Upon exit, the macro is reloaded with the contents of the file.
2443 2365
2444 2366 Note: opening at an exact line is only supported under Unix, and some
2445 2367 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2446 2368 '+NUMBER' parameter necessary for this feature. Good editors like
2447 2369 (X)Emacs, vi, jed, pico and joe all do.
2448 2370
2449 2371 After executing your code, %edit will return as output the code you
2450 2372 typed in the editor (except when it was an existing file). This way
2451 2373 you can reload the code in further invocations of %edit as a variable,
2452 2374 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2453 2375 the output.
2454 2376
2455 2377 Note that %edit is also available through the alias %ed.
2456 2378
2457 2379 This is an example of creating a simple function inside the editor and
2458 2380 then modifying it. First, start up the editor:
2459 2381
2460 2382 In [1]: ed
2461 2383 Editing... done. Executing edited code...
2462 2384 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2463 2385
2464 2386 We can then call the function foo():
2465 2387
2466 2388 In [2]: foo()
2467 2389 foo() was defined in an editing session
2468 2390
2469 2391 Now we edit foo. IPython automatically loads the editor with the
2470 2392 (temporary) file where foo() was previously defined:
2471 2393
2472 2394 In [3]: ed foo
2473 2395 Editing... done. Executing edited code...
2474 2396
2475 2397 And if we call foo() again we get the modified version:
2476 2398
2477 2399 In [4]: foo()
2478 2400 foo() has now been changed!
2479 2401
2480 2402 Here is an example of how to edit a code snippet successive
2481 2403 times. First we call the editor:
2482 2404
2483 2405 In [5]: ed
2484 2406 Editing... done. Executing edited code...
2485 2407 hello
2486 2408 Out[5]: "print 'hello'n"
2487 2409
2488 2410 Now we call it again with the previous output (stored in _):
2489 2411
2490 2412 In [6]: ed _
2491 2413 Editing... done. Executing edited code...
2492 2414 hello world
2493 2415 Out[6]: "print 'hello world'n"
2494 2416
2495 2417 Now we call it with the output #8 (stored in _8, also as Out[8]):
2496 2418
2497 2419 In [7]: ed _8
2498 2420 Editing... done. Executing edited code...
2499 2421 hello again
2500 2422 Out[7]: "print 'hello again'n"
2501 2423
2502 2424
2503 2425 Changing the default editor hook:
2504 2426
2505 2427 If you wish to write your own editor hook, you can put it in a
2506 2428 configuration file which you load at startup time. The default hook
2507 2429 is defined in the IPython.core.hooks module, and you can use that as a
2508 2430 starting example for further modifications. That file also has
2509 2431 general instructions on how to set a new hook for use once you've
2510 2432 defined it."""
2511 2433 opts,args = self.parse_options(parameter_s,'prxn:')
2512 2434
2513 2435 try:
2514 2436 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2515 2437 except MacroToEdit as e:
2516 2438 self._edit_macro(args, e.args[0])
2517 2439 return
2518 2440
2519 2441 # do actual editing here
2520 2442 print 'Editing...',
2521 2443 sys.stdout.flush()
2522 2444 try:
2523 2445 # Quote filenames that may have spaces in them
2524 2446 if ' ' in filename:
2525 2447 filename = "'%s'" % filename
2526 2448 self.shell.hooks.editor(filename,lineno)
2527 2449 except TryNext:
2528 2450 warn('Could not open editor')
2529 2451 return
2530 2452
2531 2453 # XXX TODO: should this be generalized for all string vars?
2532 2454 # For now, this is special-cased to blocks created by cpaste
2533 2455 if args.strip() == 'pasted_block':
2534 2456 self.shell.user_ns['pasted_block'] = file_read(filename)
2535 2457
2536 2458 if 'x' in opts: # -x prevents actual execution
2537 2459 print
2538 2460 else:
2539 2461 print 'done. Executing edited code...'
2540 2462 if 'r' in opts: # Untranslated IPython code
2541 2463 self.shell.run_cell(file_read(filename),
2542 2464 store_history=False)
2543 2465 else:
2544 2466 self.shell.safe_execfile(filename,self.shell.user_ns,
2545 2467 self.shell.user_ns)
2546 2468
2547 2469 if is_temp:
2548 2470 try:
2549 2471 return open(filename).read()
2550 2472 except IOError,msg:
2551 2473 if msg.filename == filename:
2552 2474 warn('File not found. Did you forget to save?')
2553 2475 return
2554 2476 else:
2555 2477 self.shell.showtraceback()
2556 2478
2557 2479 def magic_xmode(self,parameter_s = ''):
2558 2480 """Switch modes for the exception handlers.
2559 2481
2560 2482 Valid modes: Plain, Context and Verbose.
2561 2483
2562 2484 If called without arguments, acts as a toggle."""
2563 2485
2564 2486 def xmode_switch_err(name):
2565 2487 warn('Error changing %s exception modes.\n%s' %
2566 2488 (name,sys.exc_info()[1]))
2567 2489
2568 2490 shell = self.shell
2569 2491 new_mode = parameter_s.strip().capitalize()
2570 2492 try:
2571 2493 shell.InteractiveTB.set_mode(mode=new_mode)
2572 2494 print 'Exception reporting mode:',shell.InteractiveTB.mode
2573 2495 except:
2574 2496 xmode_switch_err('user')
2575 2497
2576 2498 def magic_colors(self,parameter_s = ''):
2577 2499 """Switch color scheme for prompts, info system and exception handlers.
2578 2500
2579 2501 Currently implemented schemes: NoColor, Linux, LightBG.
2580 2502
2581 2503 Color scheme names are not case-sensitive.
2582 2504
2583 2505 Examples
2584 2506 --------
2585 2507 To get a plain black and white terminal::
2586 2508
2587 2509 %colors nocolor
2588 2510 """
2589 2511
2590 2512 def color_switch_err(name):
2591 2513 warn('Error changing %s color schemes.\n%s' %
2592 2514 (name,sys.exc_info()[1]))
2593 2515
2594 2516
2595 2517 new_scheme = parameter_s.strip()
2596 2518 if not new_scheme:
2597 2519 raise UsageError(
2598 2520 "%colors: you must specify a color scheme. See '%colors?'")
2599 2521 return
2600 2522 # local shortcut
2601 2523 shell = self.shell
2602 2524
2603 2525 import IPython.utils.rlineimpl as readline
2604 2526
2605 2527 if not shell.colors_force and \
2606 2528 not readline.have_readline and sys.platform == "win32":
2607 2529 msg = """\
2608 2530 Proper color support under MS Windows requires the pyreadline library.
2609 2531 You can find it at:
2610 2532 http://ipython.org/pyreadline.html
2611 2533 Gary's readline needs the ctypes module, from:
2612 2534 http://starship.python.net/crew/theller/ctypes
2613 2535 (Note that ctypes is already part of Python versions 2.5 and newer).
2614 2536
2615 2537 Defaulting color scheme to 'NoColor'"""
2616 2538 new_scheme = 'NoColor'
2617 2539 warn(msg)
2618 2540
2619 2541 # readline option is 0
2620 2542 if not shell.colors_force and not shell.has_readline:
2621 2543 new_scheme = 'NoColor'
2622 2544
2623 2545 # Set prompt colors
2624 2546 try:
2625 2547 shell.displayhook.set_colors(new_scheme)
2626 2548 except:
2627 2549 color_switch_err('prompt')
2628 2550 else:
2629 2551 shell.colors = \
2630 2552 shell.displayhook.color_table.active_scheme_name
2631 2553 # Set exception colors
2632 2554 try:
2633 2555 shell.InteractiveTB.set_colors(scheme = new_scheme)
2634 2556 shell.SyntaxTB.set_colors(scheme = new_scheme)
2635 2557 except:
2636 2558 color_switch_err('exception')
2637 2559
2638 2560 # Set info (for 'object?') colors
2639 2561 if shell.color_info:
2640 2562 try:
2641 2563 shell.inspector.set_active_scheme(new_scheme)
2642 2564 except:
2643 2565 color_switch_err('object inspector')
2644 2566 else:
2645 2567 shell.inspector.set_active_scheme('NoColor')
2646 2568
2647 2569 def magic_pprint(self, parameter_s=''):
2648 2570 """Toggle pretty printing on/off."""
2649 2571 ptformatter = self.shell.display_formatter.formatters['text/plain']
2650 2572 ptformatter.pprint = bool(1 - ptformatter.pprint)
2651 2573 print 'Pretty printing has been turned', \
2652 2574 ['OFF','ON'][ptformatter.pprint]
2653 2575
2654 2576 #......................................................................
2655 2577 # Functions to implement unix shell-type things
2656 2578
2657 2579 @skip_doctest
2658 2580 def magic_alias(self, parameter_s = ''):
2659 2581 """Define an alias for a system command.
2660 2582
2661 2583 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2662 2584
2663 2585 Then, typing 'alias_name params' will execute the system command 'cmd
2664 2586 params' (from your underlying operating system).
2665 2587
2666 2588 Aliases have lower precedence than magic functions and Python normal
2667 2589 variables, so if 'foo' is both a Python variable and an alias, the
2668 2590 alias can not be executed until 'del foo' removes the Python variable.
2669 2591
2670 2592 You can use the %l specifier in an alias definition to represent the
2671 2593 whole line when the alias is called. For example:
2672 2594
2673 2595 In [2]: alias bracket echo "Input in brackets: <%l>"
2674 2596 In [3]: bracket hello world
2675 2597 Input in brackets: <hello world>
2676 2598
2677 2599 You can also define aliases with parameters using %s specifiers (one
2678 2600 per parameter):
2679 2601
2680 2602 In [1]: alias parts echo first %s second %s
2681 2603 In [2]: %parts A B
2682 2604 first A second B
2683 2605 In [3]: %parts A
2684 2606 Incorrect number of arguments: 2 expected.
2685 2607 parts is an alias to: 'echo first %s second %s'
2686 2608
2687 2609 Note that %l and %s are mutually exclusive. You can only use one or
2688 2610 the other in your aliases.
2689 2611
2690 2612 Aliases expand Python variables just like system calls using ! or !!
2691 2613 do: all expressions prefixed with '$' get expanded. For details of
2692 2614 the semantic rules, see PEP-215:
2693 2615 http://www.python.org/peps/pep-0215.html. This is the library used by
2694 2616 IPython for variable expansion. If you want to access a true shell
2695 2617 variable, an extra $ is necessary to prevent its expansion by IPython:
2696 2618
2697 2619 In [6]: alias show echo
2698 2620 In [7]: PATH='A Python string'
2699 2621 In [8]: show $PATH
2700 2622 A Python string
2701 2623 In [9]: show $$PATH
2702 2624 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2703 2625
2704 2626 You can use the alias facility to acess all of $PATH. See the %rehash
2705 2627 and %rehashx functions, which automatically create aliases for the
2706 2628 contents of your $PATH.
2707 2629
2708 2630 If called with no parameters, %alias prints the current alias table."""
2709 2631
2710 2632 par = parameter_s.strip()
2711 2633 if not par:
2712 2634 stored = self.db.get('stored_aliases', {} )
2713 2635 aliases = sorted(self.shell.alias_manager.aliases)
2714 2636 # for k, v in stored:
2715 2637 # atab.append(k, v[0])
2716 2638
2717 2639 print "Total number of aliases:", len(aliases)
2718 2640 sys.stdout.flush()
2719 2641 return aliases
2720 2642
2721 2643 # Now try to define a new one
2722 2644 try:
2723 2645 alias,cmd = par.split(None, 1)
2724 2646 except:
2725 2647 print oinspect.getdoc(self.magic_alias)
2726 2648 else:
2727 2649 self.shell.alias_manager.soft_define_alias(alias, cmd)
2728 2650 # end magic_alias
2729 2651
2730 2652 def magic_unalias(self, parameter_s = ''):
2731 2653 """Remove an alias"""
2732 2654
2733 2655 aname = parameter_s.strip()
2734 2656 self.shell.alias_manager.undefine_alias(aname)
2735 2657 stored = self.db.get('stored_aliases', {} )
2736 2658 if aname in stored:
2737 2659 print "Removing %stored alias",aname
2738 2660 del stored[aname]
2739 2661 self.db['stored_aliases'] = stored
2740 2662
2741 2663 def magic_rehashx(self, parameter_s = ''):
2742 2664 """Update the alias table with all executable files in $PATH.
2743 2665
2744 2666 This version explicitly checks that every entry in $PATH is a file
2745 2667 with execute access (os.X_OK), so it is much slower than %rehash.
2746 2668
2747 2669 Under Windows, it checks executability as a match agains a
2748 2670 '|'-separated string of extensions, stored in the IPython config
2749 2671 variable win_exec_ext. This defaults to 'exe|com|bat'.
2750 2672
2751 2673 This function also resets the root module cache of module completer,
2752 2674 used on slow filesystems.
2753 2675 """
2754 2676 from IPython.core.alias import InvalidAliasError
2755 2677
2756 2678 # for the benefit of module completer in ipy_completers.py
2757 2679 del self.db['rootmodules']
2758 2680
2759 2681 path = [os.path.abspath(os.path.expanduser(p)) for p in
2760 2682 os.environ.get('PATH','').split(os.pathsep)]
2761 2683 path = filter(os.path.isdir,path)
2762 2684
2763 2685 syscmdlist = []
2764 2686 # Now define isexec in a cross platform manner.
2765 2687 if os.name == 'posix':
2766 2688 isexec = lambda fname:os.path.isfile(fname) and \
2767 2689 os.access(fname,os.X_OK)
2768 2690 else:
2769 2691 try:
2770 2692 winext = os.environ['pathext'].replace(';','|').replace('.','')
2771 2693 except KeyError:
2772 2694 winext = 'exe|com|bat|py'
2773 2695 if 'py' not in winext:
2774 2696 winext += '|py'
2775 2697 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2776 2698 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2777 2699 savedir = os.getcwdu()
2778 2700
2779 2701 # Now walk the paths looking for executables to alias.
2780 2702 try:
2781 2703 # write the whole loop for posix/Windows so we don't have an if in
2782 2704 # the innermost part
2783 2705 if os.name == 'posix':
2784 2706 for pdir in path:
2785 2707 os.chdir(pdir)
2786 2708 for ff in os.listdir(pdir):
2787 2709 if isexec(ff):
2788 2710 try:
2789 2711 # Removes dots from the name since ipython
2790 2712 # will assume names with dots to be python.
2791 2713 self.shell.alias_manager.define_alias(
2792 2714 ff.replace('.',''), ff)
2793 2715 except InvalidAliasError:
2794 2716 pass
2795 2717 else:
2796 2718 syscmdlist.append(ff)
2797 2719 else:
2798 2720 no_alias = self.shell.alias_manager.no_alias
2799 2721 for pdir in path:
2800 2722 os.chdir(pdir)
2801 2723 for ff in os.listdir(pdir):
2802 2724 base, ext = os.path.splitext(ff)
2803 2725 if isexec(ff) and base.lower() not in no_alias:
2804 2726 if ext.lower() == '.exe':
2805 2727 ff = base
2806 2728 try:
2807 2729 # Removes dots from the name since ipython
2808 2730 # will assume names with dots to be python.
2809 2731 self.shell.alias_manager.define_alias(
2810 2732 base.lower().replace('.',''), ff)
2811 2733 except InvalidAliasError:
2812 2734 pass
2813 2735 syscmdlist.append(ff)
2814 2736 db = self.db
2815 2737 db['syscmdlist'] = syscmdlist
2816 2738 finally:
2817 2739 os.chdir(savedir)
2818 2740
2819 2741 @skip_doctest
2820 2742 def magic_pwd(self, parameter_s = ''):
2821 2743 """Return the current working directory path.
2822 2744
2823 2745 Examples
2824 2746 --------
2825 2747 ::
2826 2748
2827 2749 In [9]: pwd
2828 2750 Out[9]: '/home/tsuser/sprint/ipython'
2829 2751 """
2830 2752 return os.getcwdu()
2831 2753
2832 2754 @skip_doctest
2833 2755 def magic_cd(self, parameter_s=''):
2834 2756 """Change the current working directory.
2835 2757
2836 2758 This command automatically maintains an internal list of directories
2837 2759 you visit during your IPython session, in the variable _dh. The
2838 2760 command %dhist shows this history nicely formatted. You can also
2839 2761 do 'cd -<tab>' to see directory history conveniently.
2840 2762
2841 2763 Usage:
2842 2764
2843 2765 cd 'dir': changes to directory 'dir'.
2844 2766
2845 2767 cd -: changes to the last visited directory.
2846 2768
2847 2769 cd -<n>: changes to the n-th directory in the directory history.
2848 2770
2849 2771 cd --foo: change to directory that matches 'foo' in history
2850 2772
2851 2773 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2852 2774 (note: cd <bookmark_name> is enough if there is no
2853 2775 directory <bookmark_name>, but a bookmark with the name exists.)
2854 2776 'cd -b <tab>' allows you to tab-complete bookmark names.
2855 2777
2856 2778 Options:
2857 2779
2858 2780 -q: quiet. Do not print the working directory after the cd command is
2859 2781 executed. By default IPython's cd command does print this directory,
2860 2782 since the default prompts do not display path information.
2861 2783
2862 2784 Note that !cd doesn't work for this purpose because the shell where
2863 2785 !command runs is immediately discarded after executing 'command'.
2864 2786
2865 2787 Examples
2866 2788 --------
2867 2789 ::
2868 2790
2869 2791 In [10]: cd parent/child
2870 2792 /home/tsuser/parent/child
2871 2793 """
2872 2794
2873 2795 parameter_s = parameter_s.strip()
2874 2796 #bkms = self.shell.persist.get("bookmarks",{})
2875 2797
2876 2798 oldcwd = os.getcwdu()
2877 2799 numcd = re.match(r'(-)(\d+)$',parameter_s)
2878 2800 # jump in directory history by number
2879 2801 if numcd:
2880 2802 nn = int(numcd.group(2))
2881 2803 try:
2882 2804 ps = self.shell.user_ns['_dh'][nn]
2883 2805 except IndexError:
2884 2806 print 'The requested directory does not exist in history.'
2885 2807 return
2886 2808 else:
2887 2809 opts = {}
2888 2810 elif parameter_s.startswith('--'):
2889 2811 ps = None
2890 2812 fallback = None
2891 2813 pat = parameter_s[2:]
2892 2814 dh = self.shell.user_ns['_dh']
2893 2815 # first search only by basename (last component)
2894 2816 for ent in reversed(dh):
2895 2817 if pat in os.path.basename(ent) and os.path.isdir(ent):
2896 2818 ps = ent
2897 2819 break
2898 2820
2899 2821 if fallback is None and pat in ent and os.path.isdir(ent):
2900 2822 fallback = ent
2901 2823
2902 2824 # if we have no last part match, pick the first full path match
2903 2825 if ps is None:
2904 2826 ps = fallback
2905 2827
2906 2828 if ps is None:
2907 2829 print "No matching entry in directory history"
2908 2830 return
2909 2831 else:
2910 2832 opts = {}
2911 2833
2912 2834
2913 2835 else:
2914 2836 #turn all non-space-escaping backslashes to slashes,
2915 2837 # for c:\windows\directory\names\
2916 2838 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2917 2839 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2918 2840 # jump to previous
2919 2841 if ps == '-':
2920 2842 try:
2921 2843 ps = self.shell.user_ns['_dh'][-2]
2922 2844 except IndexError:
2923 2845 raise UsageError('%cd -: No previous directory to change to.')
2924 2846 # jump to bookmark if needed
2925 2847 else:
2926 2848 if not os.path.isdir(ps) or opts.has_key('b'):
2927 2849 bkms = self.db.get('bookmarks', {})
2928 2850
2929 2851 if bkms.has_key(ps):
2930 2852 target = bkms[ps]
2931 2853 print '(bookmark:%s) -> %s' % (ps,target)
2932 2854 ps = target
2933 2855 else:
2934 2856 if opts.has_key('b'):
2935 2857 raise UsageError("Bookmark '%s' not found. "
2936 2858 "Use '%%bookmark -l' to see your bookmarks." % ps)
2937 2859
2938 2860 # strip extra quotes on Windows, because os.chdir doesn't like them
2939 2861 ps = unquote_filename(ps)
2940 2862 # at this point ps should point to the target dir
2941 2863 if ps:
2942 2864 try:
2943 2865 os.chdir(os.path.expanduser(ps))
2944 2866 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2945 2867 set_term_title('IPython: ' + abbrev_cwd())
2946 2868 except OSError:
2947 2869 print sys.exc_info()[1]
2948 2870 else:
2949 2871 cwd = os.getcwdu()
2950 2872 dhist = self.shell.user_ns['_dh']
2951 2873 if oldcwd != cwd:
2952 2874 dhist.append(cwd)
2953 2875 self.db['dhist'] = compress_dhist(dhist)[-100:]
2954 2876
2955 2877 else:
2956 2878 os.chdir(self.shell.home_dir)
2957 2879 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2958 2880 set_term_title('IPython: ' + '~')
2959 2881 cwd = os.getcwdu()
2960 2882 dhist = self.shell.user_ns['_dh']
2961 2883
2962 2884 if oldcwd != cwd:
2963 2885 dhist.append(cwd)
2964 2886 self.db['dhist'] = compress_dhist(dhist)[-100:]
2965 2887 if not 'q' in opts and self.shell.user_ns['_dh']:
2966 2888 print self.shell.user_ns['_dh'][-1]
2967 2889
2968 2890
2969 2891 def magic_env(self, parameter_s=''):
2970 2892 """List environment variables."""
2971 2893
2972 2894 return os.environ.data
2973 2895
2974 2896 def magic_pushd(self, parameter_s=''):
2975 2897 """Place the current dir on stack and change directory.
2976 2898
2977 2899 Usage:\\
2978 2900 %pushd ['dirname']
2979 2901 """
2980 2902
2981 2903 dir_s = self.shell.dir_stack
2982 2904 tgt = os.path.expanduser(unquote_filename(parameter_s))
2983 2905 cwd = os.getcwdu().replace(self.home_dir,'~')
2984 2906 if tgt:
2985 2907 self.magic_cd(parameter_s)
2986 2908 dir_s.insert(0,cwd)
2987 2909 return self.magic_dirs()
2988 2910
2989 2911 def magic_popd(self, parameter_s=''):
2990 2912 """Change to directory popped off the top of the stack.
2991 2913 """
2992 2914 if not self.shell.dir_stack:
2993 2915 raise UsageError("%popd on empty stack")
2994 2916 top = self.shell.dir_stack.pop(0)
2995 2917 self.magic_cd(top)
2996 2918 print "popd ->",top
2997 2919
2998 2920 def magic_dirs(self, parameter_s=''):
2999 2921 """Return the current directory stack."""
3000 2922
3001 2923 return self.shell.dir_stack
3002 2924
3003 2925 def magic_dhist(self, parameter_s=''):
3004 2926 """Print your history of visited directories.
3005 2927
3006 2928 %dhist -> print full history\\
3007 2929 %dhist n -> print last n entries only\\
3008 2930 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
3009 2931
3010 2932 This history is automatically maintained by the %cd command, and
3011 2933 always available as the global list variable _dh. You can use %cd -<n>
3012 2934 to go to directory number <n>.
3013 2935
3014 2936 Note that most of time, you should view directory history by entering
3015 2937 cd -<TAB>.
3016 2938
3017 2939 """
3018 2940
3019 2941 dh = self.shell.user_ns['_dh']
3020 2942 if parameter_s:
3021 2943 try:
3022 2944 args = map(int,parameter_s.split())
3023 2945 except:
3024 2946 self.arg_err(Magic.magic_dhist)
3025 2947 return
3026 2948 if len(args) == 1:
3027 2949 ini,fin = max(len(dh)-(args[0]),0),len(dh)
3028 2950 elif len(args) == 2:
3029 2951 ini,fin = args
3030 2952 else:
3031 2953 self.arg_err(Magic.magic_dhist)
3032 2954 return
3033 2955 else:
3034 2956 ini,fin = 0,len(dh)
3035 2957 nlprint(dh,
3036 2958 header = 'Directory history (kept in _dh)',
3037 2959 start=ini,stop=fin)
3038 2960
3039 2961 @skip_doctest
3040 2962 def magic_sc(self, parameter_s=''):
3041 2963 """Shell capture - execute a shell command and capture its output.
3042 2964
3043 2965 DEPRECATED. Suboptimal, retained for backwards compatibility.
3044 2966
3045 2967 You should use the form 'var = !command' instead. Example:
3046 2968
3047 2969 "%sc -l myfiles = ls ~" should now be written as
3048 2970
3049 2971 "myfiles = !ls ~"
3050 2972
3051 2973 myfiles.s, myfiles.l and myfiles.n still apply as documented
3052 2974 below.
3053 2975
3054 2976 --
3055 2977 %sc [options] varname=command
3056 2978
3057 2979 IPython will run the given command using commands.getoutput(), and
3058 2980 will then update the user's interactive namespace with a variable
3059 2981 called varname, containing the value of the call. Your command can
3060 2982 contain shell wildcards, pipes, etc.
3061 2983
3062 2984 The '=' sign in the syntax is mandatory, and the variable name you
3063 2985 supply must follow Python's standard conventions for valid names.
3064 2986
3065 2987 (A special format without variable name exists for internal use)
3066 2988
3067 2989 Options:
3068 2990
3069 2991 -l: list output. Split the output on newlines into a list before
3070 2992 assigning it to the given variable. By default the output is stored
3071 2993 as a single string.
3072 2994
3073 2995 -v: verbose. Print the contents of the variable.
3074 2996
3075 2997 In most cases you should not need to split as a list, because the
3076 2998 returned value is a special type of string which can automatically
3077 2999 provide its contents either as a list (split on newlines) or as a
3078 3000 space-separated string. These are convenient, respectively, either
3079 3001 for sequential processing or to be passed to a shell command.
3080 3002
3081 3003 For example:
3082 3004
3083 3005 # all-random
3084 3006
3085 3007 # Capture into variable a
3086 3008 In [1]: sc a=ls *py
3087 3009
3088 3010 # a is a string with embedded newlines
3089 3011 In [2]: a
3090 3012 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3091 3013
3092 3014 # which can be seen as a list:
3093 3015 In [3]: a.l
3094 3016 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3095 3017
3096 3018 # or as a whitespace-separated string:
3097 3019 In [4]: a.s
3098 3020 Out[4]: 'setup.py win32_manual_post_install.py'
3099 3021
3100 3022 # a.s is useful to pass as a single command line:
3101 3023 In [5]: !wc -l $a.s
3102 3024 146 setup.py
3103 3025 130 win32_manual_post_install.py
3104 3026 276 total
3105 3027
3106 3028 # while the list form is useful to loop over:
3107 3029 In [6]: for f in a.l:
3108 3030 ...: !wc -l $f
3109 3031 ...:
3110 3032 146 setup.py
3111 3033 130 win32_manual_post_install.py
3112 3034
3113 3035 Similiarly, the lists returned by the -l option are also special, in
3114 3036 the sense that you can equally invoke the .s attribute on them to
3115 3037 automatically get a whitespace-separated string from their contents:
3116 3038
3117 3039 In [7]: sc -l b=ls *py
3118 3040
3119 3041 In [8]: b
3120 3042 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3121 3043
3122 3044 In [9]: b.s
3123 3045 Out[9]: 'setup.py win32_manual_post_install.py'
3124 3046
3125 3047 In summary, both the lists and strings used for ouptut capture have
3126 3048 the following special attributes:
3127 3049
3128 3050 .l (or .list) : value as list.
3129 3051 .n (or .nlstr): value as newline-separated string.
3130 3052 .s (or .spstr): value as space-separated string.
3131 3053 """
3132 3054
3133 3055 opts,args = self.parse_options(parameter_s,'lv')
3134 3056 # Try to get a variable name and command to run
3135 3057 try:
3136 3058 # the variable name must be obtained from the parse_options
3137 3059 # output, which uses shlex.split to strip options out.
3138 3060 var,_ = args.split('=',1)
3139 3061 var = var.strip()
3140 3062 # But the the command has to be extracted from the original input
3141 3063 # parameter_s, not on what parse_options returns, to avoid the
3142 3064 # quote stripping which shlex.split performs on it.
3143 3065 _,cmd = parameter_s.split('=',1)
3144 3066 except ValueError:
3145 3067 var,cmd = '',''
3146 3068 # If all looks ok, proceed
3147 3069 split = 'l' in opts
3148 3070 out = self.shell.getoutput(cmd, split=split)
3149 3071 if opts.has_key('v'):
3150 3072 print '%s ==\n%s' % (var,pformat(out))
3151 3073 if var:
3152 3074 self.shell.user_ns.update({var:out})
3153 3075 else:
3154 3076 return out
3155 3077
3156 3078 def magic_sx(self, parameter_s=''):
3157 3079 """Shell execute - run a shell command and capture its output.
3158 3080
3159 3081 %sx command
3160 3082
3161 3083 IPython will run the given command using commands.getoutput(), and
3162 3084 return the result formatted as a list (split on '\\n'). Since the
3163 3085 output is _returned_, it will be stored in ipython's regular output
3164 3086 cache Out[N] and in the '_N' automatic variables.
3165 3087
3166 3088 Notes:
3167 3089
3168 3090 1) If an input line begins with '!!', then %sx is automatically
3169 3091 invoked. That is, while:
3170 3092 !ls
3171 3093 causes ipython to simply issue system('ls'), typing
3172 3094 !!ls
3173 3095 is a shorthand equivalent to:
3174 3096 %sx ls
3175 3097
3176 3098 2) %sx differs from %sc in that %sx automatically splits into a list,
3177 3099 like '%sc -l'. The reason for this is to make it as easy as possible
3178 3100 to process line-oriented shell output via further python commands.
3179 3101 %sc is meant to provide much finer control, but requires more
3180 3102 typing.
3181 3103
3182 3104 3) Just like %sc -l, this is a list with special attributes:
3183 3105
3184 3106 .l (or .list) : value as list.
3185 3107 .n (or .nlstr): value as newline-separated string.
3186 3108 .s (or .spstr): value as whitespace-separated string.
3187 3109
3188 3110 This is very useful when trying to use such lists as arguments to
3189 3111 system commands."""
3190 3112
3191 3113 if parameter_s:
3192 3114 return self.shell.getoutput(parameter_s)
3193 3115
3194 3116
3195 3117 def magic_bookmark(self, parameter_s=''):
3196 3118 """Manage IPython's bookmark system.
3197 3119
3198 3120 %bookmark <name> - set bookmark to current dir
3199 3121 %bookmark <name> <dir> - set bookmark to <dir>
3200 3122 %bookmark -l - list all bookmarks
3201 3123 %bookmark -d <name> - remove bookmark
3202 3124 %bookmark -r - remove all bookmarks
3203 3125
3204 3126 You can later on access a bookmarked folder with:
3205 3127 %cd -b <name>
3206 3128 or simply '%cd <name>' if there is no directory called <name> AND
3207 3129 there is such a bookmark defined.
3208 3130
3209 3131 Your bookmarks persist through IPython sessions, but they are
3210 3132 associated with each profile."""
3211 3133
3212 3134 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3213 3135 if len(args) > 2:
3214 3136 raise UsageError("%bookmark: too many arguments")
3215 3137
3216 3138 bkms = self.db.get('bookmarks',{})
3217 3139
3218 3140 if opts.has_key('d'):
3219 3141 try:
3220 3142 todel = args[0]
3221 3143 except IndexError:
3222 3144 raise UsageError(
3223 3145 "%bookmark -d: must provide a bookmark to delete")
3224 3146 else:
3225 3147 try:
3226 3148 del bkms[todel]
3227 3149 except KeyError:
3228 3150 raise UsageError(
3229 3151 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3230 3152
3231 3153 elif opts.has_key('r'):
3232 3154 bkms = {}
3233 3155 elif opts.has_key('l'):
3234 3156 bks = bkms.keys()
3235 3157 bks.sort()
3236 3158 if bks:
3237 3159 size = max(map(len,bks))
3238 3160 else:
3239 3161 size = 0
3240 3162 fmt = '%-'+str(size)+'s -> %s'
3241 3163 print 'Current bookmarks:'
3242 3164 for bk in bks:
3243 3165 print fmt % (bk,bkms[bk])
3244 3166 else:
3245 3167 if not args:
3246 3168 raise UsageError("%bookmark: You must specify the bookmark name")
3247 3169 elif len(args)==1:
3248 3170 bkms[args[0]] = os.getcwdu()
3249 3171 elif len(args)==2:
3250 3172 bkms[args[0]] = args[1]
3251 3173 self.db['bookmarks'] = bkms
3252 3174
3253 3175 def magic_pycat(self, parameter_s=''):
3254 3176 """Show a syntax-highlighted file through a pager.
3255 3177
3256 3178 This magic is similar to the cat utility, but it will assume the file
3257 3179 to be Python source and will show it with syntax highlighting. """
3258 3180
3259 3181 try:
3260 3182 filename = get_py_filename(parameter_s)
3261 3183 cont = file_read(filename)
3262 3184 except IOError:
3263 3185 try:
3264 3186 cont = eval(parameter_s,self.user_ns)
3265 3187 except NameError:
3266 3188 cont = None
3267 3189 if cont is None:
3268 3190 print "Error: no such file or variable"
3269 3191 return
3270 3192
3271 3193 page.page(self.shell.pycolorize(cont))
3272 3194
3273 3195 def _rerun_pasted(self):
3274 3196 """ Rerun a previously pasted command.
3275 3197 """
3276 3198 b = self.user_ns.get('pasted_block', None)
3277 3199 if b is None:
3278 3200 raise UsageError('No previous pasted block available')
3279 3201 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3280 3202 exec b in self.user_ns
3281 3203
3282 3204 def _get_pasted_lines(self, sentinel):
3283 3205 """ Yield pasted lines until the user enters the given sentinel value.
3284 3206 """
3285 3207 from IPython.core import interactiveshell
3286 3208 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3287 3209 while True:
3288 3210 l = self.shell.raw_input_original(':')
3289 3211 if l == sentinel:
3290 3212 return
3291 3213 else:
3292 3214 yield l
3293 3215
3294 3216 def _strip_pasted_lines_for_code(self, raw_lines):
3295 3217 """ Strip non-code parts of a sequence of lines to return a block of
3296 3218 code.
3297 3219 """
3298 3220 # Regular expressions that declare text we strip from the input:
3299 3221 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3300 3222 r'^\s*(\s?>)+', # Python input prompt
3301 3223 r'^\s*\.{3,}', # Continuation prompts
3302 3224 r'^\++',
3303 3225 ]
3304 3226
3305 3227 strip_from_start = map(re.compile,strip_re)
3306 3228
3307 3229 lines = []
3308 3230 for l in raw_lines:
3309 3231 for pat in strip_from_start:
3310 3232 l = pat.sub('',l)
3311 3233 lines.append(l)
3312 3234
3313 3235 block = "\n".join(lines) + '\n'
3314 3236 #print "block:\n",block
3315 3237 return block
3316 3238
3317 3239 def _execute_block(self, block, par):
3318 3240 """ Execute a block, or store it in a variable, per the user's request.
3319 3241 """
3320 3242 if not par:
3321 3243 b = textwrap.dedent(block)
3322 3244 self.user_ns['pasted_block'] = b
3323 3245 exec b in self.user_ns
3324 3246 else:
3325 3247 self.user_ns[par] = SList(block.splitlines())
3326 3248 print "Block assigned to '%s'" % par
3327 3249
3328 3250 def magic_quickref(self,arg):
3329 3251 """ Show a quick reference sheet """
3330 3252 import IPython.core.usage
3331 3253 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3332 3254
3333 3255 page.page(qr)
3334 3256
3335 3257 def magic_doctest_mode(self,parameter_s=''):
3336 3258 """Toggle doctest mode on and off.
3337 3259
3338 3260 This mode is intended to make IPython behave as much as possible like a
3339 3261 plain Python shell, from the perspective of how its prompts, exceptions
3340 3262 and output look. This makes it easy to copy and paste parts of a
3341 3263 session into doctests. It does so by:
3342 3264
3343 3265 - Changing the prompts to the classic ``>>>`` ones.
3344 3266 - Changing the exception reporting mode to 'Plain'.
3345 3267 - Disabling pretty-printing of output.
3346 3268
3347 3269 Note that IPython also supports the pasting of code snippets that have
3348 3270 leading '>>>' and '...' prompts in them. This means that you can paste
3349 3271 doctests from files or docstrings (even if they have leading
3350 3272 whitespace), and the code will execute correctly. You can then use
3351 3273 '%history -t' to see the translated history; this will give you the
3352 3274 input after removal of all the leading prompts and whitespace, which
3353 3275 can be pasted back into an editor.
3354 3276
3355 3277 With these features, you can switch into this mode easily whenever you
3356 3278 need to do testing and changes to doctests, without having to leave
3357 3279 your existing IPython session.
3358 3280 """
3359 3281
3360 3282 from IPython.utils.ipstruct import Struct
3361 3283
3362 3284 # Shorthands
3363 3285 shell = self.shell
3364 3286 oc = shell.displayhook
3365 3287 meta = shell.meta
3366 3288 disp_formatter = self.shell.display_formatter
3367 3289 ptformatter = disp_formatter.formatters['text/plain']
3368 3290 # dstore is a data store kept in the instance metadata bag to track any
3369 3291 # changes we make, so we can undo them later.
3370 3292 dstore = meta.setdefault('doctest_mode',Struct())
3371 3293 save_dstore = dstore.setdefault
3372 3294
3373 3295 # save a few values we'll need to recover later
3374 3296 mode = save_dstore('mode',False)
3375 3297 save_dstore('rc_pprint',ptformatter.pprint)
3376 3298 save_dstore('xmode',shell.InteractiveTB.mode)
3377 3299 save_dstore('rc_separate_out',shell.separate_out)
3378 3300 save_dstore('rc_separate_out2',shell.separate_out2)
3379 3301 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3380 3302 save_dstore('rc_separate_in',shell.separate_in)
3381 3303 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3382 3304
3383 3305 if mode == False:
3384 3306 # turn on
3385 3307 oc.prompt1.p_template = '>>> '
3386 3308 oc.prompt2.p_template = '... '
3387 3309 oc.prompt_out.p_template = ''
3388 3310
3389 3311 # Prompt separators like plain python
3390 3312 oc.input_sep = oc.prompt1.sep = ''
3391 3313 oc.output_sep = ''
3392 3314 oc.output_sep2 = ''
3393 3315
3394 3316 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3395 3317 oc.prompt_out.pad_left = False
3396 3318
3397 3319 ptformatter.pprint = False
3398 3320 disp_formatter.plain_text_only = True
3399 3321
3400 3322 shell.magic_xmode('Plain')
3401 3323 else:
3402 3324 # turn off
3403 3325 oc.prompt1.p_template = shell.prompt_in1
3404 3326 oc.prompt2.p_template = shell.prompt_in2
3405 3327 oc.prompt_out.p_template = shell.prompt_out
3406 3328
3407 3329 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3408 3330
3409 3331 oc.output_sep = dstore.rc_separate_out
3410 3332 oc.output_sep2 = dstore.rc_separate_out2
3411 3333
3412 3334 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3413 3335 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3414 3336
3415 3337 ptformatter.pprint = dstore.rc_pprint
3416 3338 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3417 3339
3418 3340 shell.magic_xmode(dstore.xmode)
3419 3341
3420 3342 # Store new mode and inform
3421 3343 dstore.mode = bool(1-int(mode))
3422 3344 mode_label = ['OFF','ON'][dstore.mode]
3423 3345 print 'Doctest mode is:', mode_label
3424 3346
3425 3347 def magic_gui(self, parameter_s=''):
3426 3348 """Enable or disable IPython GUI event loop integration.
3427 3349
3428 3350 %gui [GUINAME]
3429 3351
3430 3352 This magic replaces IPython's threaded shells that were activated
3431 3353 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3432 3354 can now be enabled, disabled and changed at runtime and keyboard
3433 3355 interrupts should work without any problems. The following toolkits
3434 3356 are supported: wxPython, PyQt4, PyGTK, and Tk::
3435 3357
3436 3358 %gui wx # enable wxPython event loop integration
3437 3359 %gui qt4|qt # enable PyQt4 event loop integration
3438 3360 %gui gtk # enable PyGTK event loop integration
3439 3361 %gui tk # enable Tk event loop integration
3440 3362 %gui # disable all event loop integration
3441 3363
3442 3364 WARNING: after any of these has been called you can simply create
3443 3365 an application object, but DO NOT start the event loop yourself, as
3444 3366 we have already handled that.
3445 3367 """
3446 3368 from IPython.lib.inputhook import enable_gui
3447 3369 opts, arg = self.parse_options(parameter_s, '')
3448 3370 if arg=='': arg = None
3449 3371 return enable_gui(arg)
3450 3372
3451 3373 def magic_load_ext(self, module_str):
3452 3374 """Load an IPython extension by its module name."""
3453 3375 return self.extension_manager.load_extension(module_str)
3454 3376
3455 3377 def magic_unload_ext(self, module_str):
3456 3378 """Unload an IPython extension by its module name."""
3457 3379 self.extension_manager.unload_extension(module_str)
3458 3380
3459 3381 def magic_reload_ext(self, module_str):
3460 3382 """Reload an IPython extension by its module name."""
3461 3383 self.extension_manager.reload_extension(module_str)
3462 3384
3463 3385 @skip_doctest
3464 3386 def magic_install_profiles(self, s):
3465 3387 """Install the default IPython profiles into the .ipython dir.
3466 3388
3467 3389 If the default profiles have already been installed, they will not
3468 3390 be overwritten. You can force overwriting them by using the ``-o``
3469 3391 option::
3470 3392
3471 3393 In [1]: %install_profiles -o
3472 3394 """
3473 3395 if '-o' in s:
3474 3396 overwrite = True
3475 3397 else:
3476 3398 overwrite = False
3477 3399 from IPython.config import profile
3478 3400 profile_dir = os.path.dirname(profile.__file__)
3479 3401 ipython_dir = self.ipython_dir
3480 3402 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3481 3403 for src in os.listdir(profile_dir):
3482 3404 if src.startswith('profile_'):
3483 3405 name = src.replace('profile_', '')
3484 3406 print " %s"%name
3485 3407 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3486 3408 pd.copy_config_file('ipython_config.py', path=src,
3487 3409 overwrite=overwrite)
3488 3410
3489 3411 @skip_doctest
3490 3412 def magic_install_default_config(self, s):
3491 3413 """Install IPython's default config file into the .ipython dir.
3492 3414
3493 3415 If the default config file (:file:`ipython_config.py`) is already
3494 3416 installed, it will not be overwritten. You can force overwriting
3495 3417 by using the ``-o`` option::
3496 3418
3497 3419 In [1]: %install_default_config
3498 3420 """
3499 3421 if '-o' in s:
3500 3422 overwrite = True
3501 3423 else:
3502 3424 overwrite = False
3503 3425 pd = self.shell.profile_dir
3504 3426 print "Installing default config file in: %s" % pd.location
3505 3427 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3506 3428
3507 3429 # Pylab support: simple wrappers that activate pylab, load gui input
3508 3430 # handling and modify slightly %run
3509 3431
3510 3432 @skip_doctest
3511 3433 def _pylab_magic_run(self, parameter_s=''):
3512 3434 Magic.magic_run(self, parameter_s,
3513 3435 runner=mpl_runner(self.shell.safe_execfile))
3514 3436
3515 3437 _pylab_magic_run.__doc__ = magic_run.__doc__
3516 3438
3517 3439 @skip_doctest
3518 3440 def magic_pylab(self, s):
3519 3441 """Load numpy and matplotlib to work interactively.
3520 3442
3521 3443 %pylab [GUINAME]
3522 3444
3523 3445 This function lets you activate pylab (matplotlib, numpy and
3524 3446 interactive support) at any point during an IPython session.
3525 3447
3526 3448 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3527 3449 pylab and mlab, as well as all names from numpy and pylab.
3528 3450
3529 3451 Parameters
3530 3452 ----------
3531 3453 guiname : optional
3532 3454 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3533 3455 'tk'). If given, the corresponding Matplotlib backend is used,
3534 3456 otherwise matplotlib's default (which you can override in your
3535 3457 matplotlib config file) is used.
3536 3458
3537 3459 Examples
3538 3460 --------
3539 3461 In this case, where the MPL default is TkAgg:
3540 3462 In [2]: %pylab
3541 3463
3542 3464 Welcome to pylab, a matplotlib-based Python environment.
3543 3465 Backend in use: TkAgg
3544 3466 For more information, type 'help(pylab)'.
3545 3467
3546 3468 But you can explicitly request a different backend:
3547 3469 In [3]: %pylab qt
3548 3470
3549 3471 Welcome to pylab, a matplotlib-based Python environment.
3550 3472 Backend in use: Qt4Agg
3551 3473 For more information, type 'help(pylab)'.
3552 3474 """
3553 3475
3554 3476 if Application.initialized():
3555 3477 app = Application.instance()
3556 3478 try:
3557 3479 import_all_status = app.pylab_import_all
3558 3480 except AttributeError:
3559 3481 import_all_status = True
3560 3482 else:
3561 3483 import_all_status = True
3562 3484
3563 3485 self.shell.enable_pylab(s,import_all=import_all_status)
3564 3486
3565 3487 def magic_tb(self, s):
3566 3488 """Print the last traceback with the currently active exception mode.
3567 3489
3568 3490 See %xmode for changing exception reporting modes."""
3569 3491 self.shell.showtraceback()
3570 3492
3571 3493 @skip_doctest
3572 3494 def magic_precision(self, s=''):
3573 3495 """Set floating point precision for pretty printing.
3574 3496
3575 3497 Can set either integer precision or a format string.
3576 3498
3577 3499 If numpy has been imported and precision is an int,
3578 3500 numpy display precision will also be set, via ``numpy.set_printoptions``.
3579 3501
3580 3502 If no argument is given, defaults will be restored.
3581 3503
3582 3504 Examples
3583 3505 --------
3584 3506 ::
3585 3507
3586 3508 In [1]: from math import pi
3587 3509
3588 3510 In [2]: %precision 3
3589 3511 Out[2]: u'%.3f'
3590 3512
3591 3513 In [3]: pi
3592 3514 Out[3]: 3.142
3593 3515
3594 3516 In [4]: %precision %i
3595 3517 Out[4]: u'%i'
3596 3518
3597 3519 In [5]: pi
3598 3520 Out[5]: 3
3599 3521
3600 3522 In [6]: %precision %e
3601 3523 Out[6]: u'%e'
3602 3524
3603 3525 In [7]: pi**10
3604 3526 Out[7]: 9.364805e+04
3605 3527
3606 3528 In [8]: %precision
3607 3529 Out[8]: u'%r'
3608 3530
3609 3531 In [9]: pi**10
3610 3532 Out[9]: 93648.047476082982
3611 3533
3612 3534 """
3613 3535
3614 3536 ptformatter = self.shell.display_formatter.formatters['text/plain']
3615 3537 ptformatter.float_precision = s
3616 3538 return ptformatter.float_format
3617 3539
3618 3540
3619 3541 @magic_arguments.magic_arguments()
3620 3542 @magic_arguments.argument(
3621 3543 '-e', '--export', action='store_true', default=False,
3622 3544 help='Export IPython history as a notebook. The filename argument '
3623 3545 'is used to specify the notebook name and format. For example '
3624 3546 'a filename of notebook.ipynb will result in a notebook name '
3625 3547 'of "notebook" and a format of "xml". Likewise using a ".json" '
3626 3548 'or ".py" file extension will write the notebook in the json '
3627 3549 'or py formats.'
3628 3550 )
3629 3551 @magic_arguments.argument(
3630 3552 '-f', '--format',
3631 3553 help='Convert an existing IPython notebook to a new format. This option '
3632 3554 'specifies the new format and can have the values: xml, json, py. '
3633 3555 'The target filename is choosen automatically based on the new '
3634 3556 'format. The filename argument gives the name of the source file.'
3635 3557 )
3636 3558 @magic_arguments.argument(
3637 3559 'filename', type=unicode,
3638 3560 help='Notebook name or filename'
3639 3561 )
3640 3562 def magic_notebook(self, s):
3641 3563 """Export and convert IPython notebooks.
3642 3564
3643 3565 This function can export the current IPython history to a notebook file
3644 3566 or can convert an existing notebook file into a different format. For
3645 3567 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3646 3568 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3647 3569 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3648 3570 formats include (json/ipynb, py).
3649 3571 """
3650 3572 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3651 3573
3652 3574 from IPython.nbformat import current
3653 3575 args.filename = unquote_filename(args.filename)
3654 3576 if args.export:
3655 3577 fname, name, format = current.parse_filename(args.filename)
3656 3578 cells = []
3657 3579 hist = list(self.history_manager.get_range())
3658 3580 for session, prompt_number, input in hist[:-1]:
3659 3581 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3660 3582 worksheet = current.new_worksheet(cells=cells)
3661 3583 nb = current.new_notebook(name=name,worksheets=[worksheet])
3662 3584 with open(fname, 'w') as f:
3663 3585 current.write(nb, f, format);
3664 3586 elif args.format is not None:
3665 3587 old_fname, old_name, old_format = current.parse_filename(args.filename)
3666 3588 new_format = args.format
3667 3589 if new_format == u'xml':
3668 3590 raise ValueError('Notebooks cannot be written as xml.')
3669 3591 elif new_format == u'ipynb' or new_format == u'json':
3670 3592 new_fname = old_name + u'.ipynb'
3671 3593 new_format = u'json'
3672 3594 elif new_format == u'py':
3673 3595 new_fname = old_name + u'.py'
3674 3596 else:
3675 3597 raise ValueError('Invalid notebook format: %s' % new_format)
3676 3598 with open(old_fname, 'r') as f:
3677 3599 s = f.read()
3678 3600 try:
3679 3601 nb = current.reads(s, old_format)
3680 3602 except:
3681 3603 nb = current.reads(s, u'xml')
3682 3604 with open(new_fname, 'w') as f:
3683 3605 current.write(nb, f, new_format)
3684 3606
3685 3607
3686 3608 # end Magic
General Comments 0
You need to be logged in to leave comments. Login now