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