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