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