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