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