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