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