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