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