##// END OF EJS Templates
Fix magic decorator logic so we correctly fetch bound instance methods.
Fernando Perez -
Show More
@@ -1,2912 +1,2914 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Main IPython class."""
2 """Main IPython class."""
3
3
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 # Copyright (C) 2008-2011 The IPython Development Team
7 # Copyright (C) 2008-2011 The IPython Development Team
8 #
8 #
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12
12
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Imports
14 # Imports
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16
16
17 from __future__ import with_statement
17 from __future__ import with_statement
18 from __future__ import absolute_import
18 from __future__ import absolute_import
19
19
20 import __builtin__ as builtin_mod
20 import __builtin__ as builtin_mod
21 import __future__
21 import __future__
22 import abc
22 import abc
23 import ast
23 import ast
24 import atexit
24 import atexit
25 import os
25 import os
26 import re
26 import re
27 import runpy
27 import runpy
28 import sys
28 import sys
29 import tempfile
29 import tempfile
30 import types
30 import types
31 import urllib
31 import urllib
32 from io import open as io_open
32 from io import open as io_open
33
33
34 from IPython.config.configurable import SingletonConfigurable
34 from IPython.config.configurable import SingletonConfigurable
35 from IPython.core import debugger, oinspect
35 from IPython.core import debugger, oinspect
36 from IPython.core import history as ipcorehist
36 from IPython.core import history as ipcorehist
37 from IPython.core import magic
37 from IPython.core import magic
38 from IPython.core import page
38 from IPython.core import page
39 from IPython.core import prefilter
39 from IPython.core import prefilter
40 from IPython.core import shadowns
40 from IPython.core import shadowns
41 from IPython.core import ultratb
41 from IPython.core import ultratb
42 from IPython.core.alias import AliasManager, AliasError
42 from IPython.core.alias import AliasManager, AliasError
43 from IPython.core.autocall import ExitAutocall
43 from IPython.core.autocall import ExitAutocall
44 from IPython.core.builtin_trap import BuiltinTrap
44 from IPython.core.builtin_trap import BuiltinTrap
45 from IPython.core.compilerop import CachingCompiler
45 from IPython.core.compilerop import CachingCompiler
46 from IPython.core.display_trap import DisplayTrap
46 from IPython.core.display_trap import DisplayTrap
47 from IPython.core.displayhook import DisplayHook
47 from IPython.core.displayhook import DisplayHook
48 from IPython.core.displaypub import DisplayPublisher
48 from IPython.core.displaypub import DisplayPublisher
49 from IPython.core.error import UsageError
49 from IPython.core.error import UsageError
50 from IPython.core.extensions import ExtensionManager
50 from IPython.core.extensions import ExtensionManager
51 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
51 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
52 from IPython.core.formatters import DisplayFormatter
52 from IPython.core.formatters import DisplayFormatter
53 from IPython.core.history import HistoryManager
53 from IPython.core.history import HistoryManager
54 from IPython.core.inputsplitter import IPythonInputSplitter
54 from IPython.core.inputsplitter import IPythonInputSplitter
55 from IPython.core.logger import Logger
55 from IPython.core.logger import Logger
56 from IPython.core.macro import Macro
56 from IPython.core.macro import Macro
57 from IPython.core.payload import PayloadManager
57 from IPython.core.payload import PayloadManager
58 from IPython.core.plugin import PluginManager
58 from IPython.core.plugin import PluginManager
59 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC
59 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC
60 from IPython.core.profiledir import ProfileDir
60 from IPython.core.profiledir import ProfileDir
61 from IPython.core.pylabtools import pylab_activate
61 from IPython.core.pylabtools import pylab_activate
62 from IPython.core.prompts import PromptManager
62 from IPython.core.prompts import PromptManager
63 from IPython.utils import PyColorize
63 from IPython.utils import PyColorize
64 from IPython.utils import io
64 from IPython.utils import io
65 from IPython.utils import py3compat
65 from IPython.utils import py3compat
66 from IPython.utils import openpy
66 from IPython.utils import openpy
67 from IPython.utils.doctestreload import doctest_reload
67 from IPython.utils.doctestreload import doctest_reload
68 from IPython.utils.io import ask_yes_no
68 from IPython.utils.io import ask_yes_no
69 from IPython.utils.ipstruct import Struct
69 from IPython.utils.ipstruct import Struct
70 from IPython.utils.path import get_home_dir, get_ipython_dir, get_py_filename, unquote_filename
70 from IPython.utils.path import get_home_dir, get_ipython_dir, get_py_filename, unquote_filename
71 from IPython.utils.pickleshare import PickleShareDB
71 from IPython.utils.pickleshare import PickleShareDB
72 from IPython.utils.process import system, getoutput
72 from IPython.utils.process import system, getoutput
73 from IPython.utils.strdispatch import StrDispatch
73 from IPython.utils.strdispatch import StrDispatch
74 from IPython.utils.syspathcontext import prepended_to_syspath
74 from IPython.utils.syspathcontext import prepended_to_syspath
75 from IPython.utils.text import (format_screen, LSString, SList,
75 from IPython.utils.text import (format_screen, LSString, SList,
76 DollarFormatter)
76 DollarFormatter)
77 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
77 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
78 List, Unicode, Instance, Type)
78 List, Unicode, Instance, Type)
79 from IPython.utils.warn import warn, error
79 from IPython.utils.warn import warn, error
80 import IPython.core.hooks
80 import IPython.core.hooks
81
81
82 #-----------------------------------------------------------------------------
82 #-----------------------------------------------------------------------------
83 # Globals
83 # Globals
84 #-----------------------------------------------------------------------------
84 #-----------------------------------------------------------------------------
85
85
86 # compiled regexps for autoindent management
86 # compiled regexps for autoindent management
87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88
88
89 #-----------------------------------------------------------------------------
89 #-----------------------------------------------------------------------------
90 # Utilities
90 # Utilities
91 #-----------------------------------------------------------------------------
91 #-----------------------------------------------------------------------------
92
92
93 def softspace(file, newvalue):
93 def softspace(file, newvalue):
94 """Copied from code.py, to remove the dependency"""
94 """Copied from code.py, to remove the dependency"""
95
95
96 oldvalue = 0
96 oldvalue = 0
97 try:
97 try:
98 oldvalue = file.softspace
98 oldvalue = file.softspace
99 except AttributeError:
99 except AttributeError:
100 pass
100 pass
101 try:
101 try:
102 file.softspace = newvalue
102 file.softspace = newvalue
103 except (AttributeError, TypeError):
103 except (AttributeError, TypeError):
104 # "attribute-less object" or "read-only attributes"
104 # "attribute-less object" or "read-only attributes"
105 pass
105 pass
106 return oldvalue
106 return oldvalue
107
107
108
108
109 def no_op(*a, **kw): pass
109 def no_op(*a, **kw): pass
110
110
111 class NoOpContext(object):
111 class NoOpContext(object):
112 def __enter__(self): pass
112 def __enter__(self): pass
113 def __exit__(self, type, value, traceback): pass
113 def __exit__(self, type, value, traceback): pass
114 no_op_context = NoOpContext()
114 no_op_context = NoOpContext()
115
115
116 class SpaceInInput(Exception): pass
116 class SpaceInInput(Exception): pass
117
117
118 class Bunch: pass
118 class Bunch: pass
119
119
120
120
121 def get_default_colors():
121 def get_default_colors():
122 if sys.platform=='darwin':
122 if sys.platform=='darwin':
123 return "LightBG"
123 return "LightBG"
124 elif os.name=='nt':
124 elif os.name=='nt':
125 return 'Linux'
125 return 'Linux'
126 else:
126 else:
127 return 'Linux'
127 return 'Linux'
128
128
129
129
130 class SeparateUnicode(Unicode):
130 class SeparateUnicode(Unicode):
131 """A Unicode subclass to validate separate_in, separate_out, etc.
131 """A Unicode subclass to validate separate_in, separate_out, etc.
132
132
133 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
133 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
134 """
134 """
135
135
136 def validate(self, obj, value):
136 def validate(self, obj, value):
137 if value == '0': value = ''
137 if value == '0': value = ''
138 value = value.replace('\\n','\n')
138 value = value.replace('\\n','\n')
139 return super(SeparateUnicode, self).validate(obj, value)
139 return super(SeparateUnicode, self).validate(obj, value)
140
140
141
141
142 class ReadlineNoRecord(object):
142 class ReadlineNoRecord(object):
143 """Context manager to execute some code, then reload readline history
143 """Context manager to execute some code, then reload readline history
144 so that interactive input to the code doesn't appear when pressing up."""
144 so that interactive input to the code doesn't appear when pressing up."""
145 def __init__(self, shell):
145 def __init__(self, shell):
146 self.shell = shell
146 self.shell = shell
147 self._nested_level = 0
147 self._nested_level = 0
148
148
149 def __enter__(self):
149 def __enter__(self):
150 if self._nested_level == 0:
150 if self._nested_level == 0:
151 try:
151 try:
152 self.orig_length = self.current_length()
152 self.orig_length = self.current_length()
153 self.readline_tail = self.get_readline_tail()
153 self.readline_tail = self.get_readline_tail()
154 except (AttributeError, IndexError): # Can fail with pyreadline
154 except (AttributeError, IndexError): # Can fail with pyreadline
155 self.orig_length, self.readline_tail = 999999, []
155 self.orig_length, self.readline_tail = 999999, []
156 self._nested_level += 1
156 self._nested_level += 1
157
157
158 def __exit__(self, type, value, traceback):
158 def __exit__(self, type, value, traceback):
159 self._nested_level -= 1
159 self._nested_level -= 1
160 if self._nested_level == 0:
160 if self._nested_level == 0:
161 # Try clipping the end if it's got longer
161 # Try clipping the end if it's got longer
162 try:
162 try:
163 e = self.current_length() - self.orig_length
163 e = self.current_length() - self.orig_length
164 if e > 0:
164 if e > 0:
165 for _ in range(e):
165 for _ in range(e):
166 self.shell.readline.remove_history_item(self.orig_length)
166 self.shell.readline.remove_history_item(self.orig_length)
167
167
168 # If it still doesn't match, just reload readline history.
168 # If it still doesn't match, just reload readline history.
169 if self.current_length() != self.orig_length \
169 if self.current_length() != self.orig_length \
170 or self.get_readline_tail() != self.readline_tail:
170 or self.get_readline_tail() != self.readline_tail:
171 self.shell.refill_readline_hist()
171 self.shell.refill_readline_hist()
172 except (AttributeError, IndexError):
172 except (AttributeError, IndexError):
173 pass
173 pass
174 # Returning False will cause exceptions to propagate
174 # Returning False will cause exceptions to propagate
175 return False
175 return False
176
176
177 def current_length(self):
177 def current_length(self):
178 return self.shell.readline.get_current_history_length()
178 return self.shell.readline.get_current_history_length()
179
179
180 def get_readline_tail(self, n=10):
180 def get_readline_tail(self, n=10):
181 """Get the last n items in readline history."""
181 """Get the last n items in readline history."""
182 end = self.shell.readline.get_current_history_length() + 1
182 end = self.shell.readline.get_current_history_length() + 1
183 start = max(end-n, 1)
183 start = max(end-n, 1)
184 ghi = self.shell.readline.get_history_item
184 ghi = self.shell.readline.get_history_item
185 return [ghi(x) for x in range(start, end)]
185 return [ghi(x) for x in range(start, end)]
186
186
187 #-----------------------------------------------------------------------------
187 #-----------------------------------------------------------------------------
188 # Main IPython class
188 # Main IPython class
189 #-----------------------------------------------------------------------------
189 #-----------------------------------------------------------------------------
190
190
191 class InteractiveShell(SingletonConfigurable):
191 class InteractiveShell(SingletonConfigurable):
192 """An enhanced, interactive shell for Python."""
192 """An enhanced, interactive shell for Python."""
193
193
194 _instance = None
194 _instance = None
195
195
196 autocall = Enum((0,1,2), default_value=0, config=True, help=
196 autocall = Enum((0,1,2), default_value=0, config=True, help=
197 """
197 """
198 Make IPython automatically call any callable object even if you didn't
198 Make IPython automatically call any callable object even if you didn't
199 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
199 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
200 automatically. The value can be '0' to disable the feature, '1' for
200 automatically. The value can be '0' to disable the feature, '1' for
201 'smart' autocall, where it is not applied if there are no more
201 'smart' autocall, where it is not applied if there are no more
202 arguments on the line, and '2' for 'full' autocall, where all callable
202 arguments on the line, and '2' for 'full' autocall, where all callable
203 objects are automatically called (even if no arguments are present).
203 objects are automatically called (even if no arguments are present).
204 """
204 """
205 )
205 )
206 # TODO: remove all autoindent logic and put into frontends.
206 # TODO: remove all autoindent logic and put into frontends.
207 # We can't do this yet because even runlines uses the autoindent.
207 # We can't do this yet because even runlines uses the autoindent.
208 autoindent = CBool(True, config=True, help=
208 autoindent = CBool(True, config=True, help=
209 """
209 """
210 Autoindent IPython code entered interactively.
210 Autoindent IPython code entered interactively.
211 """
211 """
212 )
212 )
213 automagic = CBool(True, config=True, help=
213 automagic = CBool(True, config=True, help=
214 """
214 """
215 Enable magic commands to be called without the leading %.
215 Enable magic commands to be called without the leading %.
216 """
216 """
217 )
217 )
218 cache_size = Integer(1000, config=True, help=
218 cache_size = Integer(1000, config=True, help=
219 """
219 """
220 Set the size of the output cache. The default is 1000, you can
220 Set the size of the output cache. The default is 1000, you can
221 change it permanently in your config file. Setting it to 0 completely
221 change it permanently in your config file. Setting it to 0 completely
222 disables the caching system, and the minimum value accepted is 20 (if
222 disables the caching system, and the minimum value accepted is 20 (if
223 you provide a value less than 20, it is reset to 0 and a warning is
223 you provide a value less than 20, it is reset to 0 and a warning is
224 issued). This limit is defined because otherwise you'll spend more
224 issued). This limit is defined because otherwise you'll spend more
225 time re-flushing a too small cache than working
225 time re-flushing a too small cache than working
226 """
226 """
227 )
227 )
228 color_info = CBool(True, config=True, help=
228 color_info = CBool(True, config=True, help=
229 """
229 """
230 Use colors for displaying information about objects. Because this
230 Use colors for displaying information about objects. Because this
231 information is passed through a pager (like 'less'), and some pagers
231 information is passed through a pager (like 'less'), and some pagers
232 get confused with color codes, this capability can be turned off.
232 get confused with color codes, this capability can be turned off.
233 """
233 """
234 )
234 )
235 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
235 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
236 default_value=get_default_colors(), config=True,
236 default_value=get_default_colors(), config=True,
237 help="Set the color scheme (NoColor, Linux, or LightBG)."
237 help="Set the color scheme (NoColor, Linux, or LightBG)."
238 )
238 )
239 colors_force = CBool(False, help=
239 colors_force = CBool(False, help=
240 """
240 """
241 Force use of ANSI color codes, regardless of OS and readline
241 Force use of ANSI color codes, regardless of OS and readline
242 availability.
242 availability.
243 """
243 """
244 # FIXME: This is essentially a hack to allow ZMQShell to show colors
244 # FIXME: This is essentially a hack to allow ZMQShell to show colors
245 # without readline on Win32. When the ZMQ formatting system is
245 # without readline on Win32. When the ZMQ formatting system is
246 # refactored, this should be removed.
246 # refactored, this should be removed.
247 )
247 )
248 debug = CBool(False, config=True)
248 debug = CBool(False, config=True)
249 deep_reload = CBool(False, config=True, help=
249 deep_reload = CBool(False, config=True, help=
250 """
250 """
251 Enable deep (recursive) reloading by default. IPython can use the
251 Enable deep (recursive) reloading by default. IPython can use the
252 deep_reload module which reloads changes in modules recursively (it
252 deep_reload module which reloads changes in modules recursively (it
253 replaces the reload() function, so you don't need to change anything to
253 replaces the reload() function, so you don't need to change anything to
254 use it). deep_reload() forces a full reload of modules whose code may
254 use it). deep_reload() forces a full reload of modules whose code may
255 have changed, which the default reload() function does not. When
255 have changed, which the default reload() function does not. When
256 deep_reload is off, IPython will use the normal reload(), but
256 deep_reload is off, IPython will use the normal reload(), but
257 deep_reload will still be available as dreload().
257 deep_reload will still be available as dreload().
258 """
258 """
259 )
259 )
260 disable_failing_post_execute = CBool(False, config=True,
260 disable_failing_post_execute = CBool(False, config=True,
261 help="Don't call post-execute functions that have failed in the past."""
261 help="Don't call post-execute functions that have failed in the past."""
262 )
262 )
263 display_formatter = Instance(DisplayFormatter)
263 display_formatter = Instance(DisplayFormatter)
264 displayhook_class = Type(DisplayHook)
264 displayhook_class = Type(DisplayHook)
265 display_pub_class = Type(DisplayPublisher)
265 display_pub_class = Type(DisplayPublisher)
266
266
267 exit_now = CBool(False)
267 exit_now = CBool(False)
268 exiter = Instance(ExitAutocall)
268 exiter = Instance(ExitAutocall)
269 def _exiter_default(self):
269 def _exiter_default(self):
270 return ExitAutocall(self)
270 return ExitAutocall(self)
271 # Monotonically increasing execution counter
271 # Monotonically increasing execution counter
272 execution_count = Integer(1)
272 execution_count = Integer(1)
273 filename = Unicode("<ipython console>")
273 filename = Unicode("<ipython console>")
274 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
274 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
275
275
276 # Input splitter, to split entire cells of input into either individual
276 # Input splitter, to split entire cells of input into either individual
277 # interactive statements or whole blocks.
277 # interactive statements or whole blocks.
278 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
278 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
279 (), {})
279 (), {})
280 logstart = CBool(False, config=True, help=
280 logstart = CBool(False, config=True, help=
281 """
281 """
282 Start logging to the default log file.
282 Start logging to the default log file.
283 """
283 """
284 )
284 )
285 logfile = Unicode('', config=True, help=
285 logfile = Unicode('', config=True, help=
286 """
286 """
287 The name of the logfile to use.
287 The name of the logfile to use.
288 """
288 """
289 )
289 )
290 logappend = Unicode('', config=True, help=
290 logappend = Unicode('', config=True, help=
291 """
291 """
292 Start logging to the given file in append mode.
292 Start logging to the given file in append mode.
293 """
293 """
294 )
294 )
295 object_info_string_level = Enum((0,1,2), default_value=0,
295 object_info_string_level = Enum((0,1,2), default_value=0,
296 config=True)
296 config=True)
297 pdb = CBool(False, config=True, help=
297 pdb = CBool(False, config=True, help=
298 """
298 """
299 Automatically call the pdb debugger after every exception.
299 Automatically call the pdb debugger after every exception.
300 """
300 """
301 )
301 )
302 multiline_history = CBool(sys.platform != 'win32', config=True,
302 multiline_history = CBool(sys.platform != 'win32', config=True,
303 help="Save multi-line entries as one entry in readline history"
303 help="Save multi-line entries as one entry in readline history"
304 )
304 )
305
305
306 # deprecated prompt traits:
306 # deprecated prompt traits:
307
307
308 prompt_in1 = Unicode('In [\\#]: ', config=True,
308 prompt_in1 = Unicode('In [\\#]: ', config=True,
309 help="Deprecated, use PromptManager.in_template")
309 help="Deprecated, use PromptManager.in_template")
310 prompt_in2 = Unicode(' .\\D.: ', config=True,
310 prompt_in2 = Unicode(' .\\D.: ', config=True,
311 help="Deprecated, use PromptManager.in2_template")
311 help="Deprecated, use PromptManager.in2_template")
312 prompt_out = Unicode('Out[\\#]: ', config=True,
312 prompt_out = Unicode('Out[\\#]: ', config=True,
313 help="Deprecated, use PromptManager.out_template")
313 help="Deprecated, use PromptManager.out_template")
314 prompts_pad_left = CBool(True, config=True,
314 prompts_pad_left = CBool(True, config=True,
315 help="Deprecated, use PromptManager.justify")
315 help="Deprecated, use PromptManager.justify")
316
316
317 def _prompt_trait_changed(self, name, old, new):
317 def _prompt_trait_changed(self, name, old, new):
318 table = {
318 table = {
319 'prompt_in1' : 'in_template',
319 'prompt_in1' : 'in_template',
320 'prompt_in2' : 'in2_template',
320 'prompt_in2' : 'in2_template',
321 'prompt_out' : 'out_template',
321 'prompt_out' : 'out_template',
322 'prompts_pad_left' : 'justify',
322 'prompts_pad_left' : 'justify',
323 }
323 }
324 warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
324 warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
325 name=name, newname=table[name])
325 name=name, newname=table[name])
326 )
326 )
327 # protect against weird cases where self.config may not exist:
327 # protect against weird cases where self.config may not exist:
328 if self.config is not None:
328 if self.config is not None:
329 # propagate to corresponding PromptManager trait
329 # propagate to corresponding PromptManager trait
330 setattr(self.config.PromptManager, table[name], new)
330 setattr(self.config.PromptManager, table[name], new)
331
331
332 _prompt_in1_changed = _prompt_trait_changed
332 _prompt_in1_changed = _prompt_trait_changed
333 _prompt_in2_changed = _prompt_trait_changed
333 _prompt_in2_changed = _prompt_trait_changed
334 _prompt_out_changed = _prompt_trait_changed
334 _prompt_out_changed = _prompt_trait_changed
335 _prompt_pad_left_changed = _prompt_trait_changed
335 _prompt_pad_left_changed = _prompt_trait_changed
336
336
337 show_rewritten_input = CBool(True, config=True,
337 show_rewritten_input = CBool(True, config=True,
338 help="Show rewritten input, e.g. for autocall."
338 help="Show rewritten input, e.g. for autocall."
339 )
339 )
340
340
341 quiet = CBool(False, config=True)
341 quiet = CBool(False, config=True)
342
342
343 history_length = Integer(10000, config=True)
343 history_length = Integer(10000, config=True)
344
344
345 # The readline stuff will eventually be moved to the terminal subclass
345 # The readline stuff will eventually be moved to the terminal subclass
346 # but for now, we can't do that as readline is welded in everywhere.
346 # but for now, we can't do that as readline is welded in everywhere.
347 readline_use = CBool(True, config=True)
347 readline_use = CBool(True, config=True)
348 readline_remove_delims = Unicode('-/~', config=True)
348 readline_remove_delims = Unicode('-/~', config=True)
349 # don't use \M- bindings by default, because they
349 # don't use \M- bindings by default, because they
350 # conflict with 8-bit encodings. See gh-58,gh-88
350 # conflict with 8-bit encodings. See gh-58,gh-88
351 readline_parse_and_bind = List([
351 readline_parse_and_bind = List([
352 'tab: complete',
352 'tab: complete',
353 '"\C-l": clear-screen',
353 '"\C-l": clear-screen',
354 'set show-all-if-ambiguous on',
354 'set show-all-if-ambiguous on',
355 '"\C-o": tab-insert',
355 '"\C-o": tab-insert',
356 '"\C-r": reverse-search-history',
356 '"\C-r": reverse-search-history',
357 '"\C-s": forward-search-history',
357 '"\C-s": forward-search-history',
358 '"\C-p": history-search-backward',
358 '"\C-p": history-search-backward',
359 '"\C-n": history-search-forward',
359 '"\C-n": history-search-forward',
360 '"\e[A": history-search-backward',
360 '"\e[A": history-search-backward',
361 '"\e[B": history-search-forward',
361 '"\e[B": history-search-forward',
362 '"\C-k": kill-line',
362 '"\C-k": kill-line',
363 '"\C-u": unix-line-discard',
363 '"\C-u": unix-line-discard',
364 ], allow_none=False, config=True)
364 ], allow_none=False, config=True)
365
365
366 # TODO: this part of prompt management should be moved to the frontends.
366 # TODO: this part of prompt management should be moved to the frontends.
367 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
367 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
368 separate_in = SeparateUnicode('\n', config=True)
368 separate_in = SeparateUnicode('\n', config=True)
369 separate_out = SeparateUnicode('', config=True)
369 separate_out = SeparateUnicode('', config=True)
370 separate_out2 = SeparateUnicode('', config=True)
370 separate_out2 = SeparateUnicode('', config=True)
371 wildcards_case_sensitive = CBool(True, config=True)
371 wildcards_case_sensitive = CBool(True, config=True)
372 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
372 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
373 default_value='Context', config=True)
373 default_value='Context', config=True)
374
374
375 # Subcomponents of InteractiveShell
375 # Subcomponents of InteractiveShell
376 alias_manager = Instance('IPython.core.alias.AliasManager')
376 alias_manager = Instance('IPython.core.alias.AliasManager')
377 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
377 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
378 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
378 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
379 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
379 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
380 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
380 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
381 plugin_manager = Instance('IPython.core.plugin.PluginManager')
381 plugin_manager = Instance('IPython.core.plugin.PluginManager')
382 payload_manager = Instance('IPython.core.payload.PayloadManager')
382 payload_manager = Instance('IPython.core.payload.PayloadManager')
383 history_manager = Instance('IPython.core.history.HistoryManager')
383 history_manager = Instance('IPython.core.history.HistoryManager')
384 magics_manager = Instance('IPython.core.magic.MagicsManager')
384 magics_manager = Instance('IPython.core.magic.MagicsManager')
385
385
386 profile_dir = Instance('IPython.core.application.ProfileDir')
386 profile_dir = Instance('IPython.core.application.ProfileDir')
387 @property
387 @property
388 def profile(self):
388 def profile(self):
389 if self.profile_dir is not None:
389 if self.profile_dir is not None:
390 name = os.path.basename(self.profile_dir.location)
390 name = os.path.basename(self.profile_dir.location)
391 return name.replace('profile_','')
391 return name.replace('profile_','')
392
392
393
393
394 # Private interface
394 # Private interface
395 _post_execute = Instance(dict)
395 _post_execute = Instance(dict)
396
396
397 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
397 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
398 user_module=None, user_ns=None,
398 user_module=None, user_ns=None,
399 custom_exceptions=((), None)):
399 custom_exceptions=((), None)):
400
400
401 # This is where traits with a config_key argument are updated
401 # This is where traits with a config_key argument are updated
402 # from the values on config.
402 # from the values on config.
403 super(InteractiveShell, self).__init__(config=config)
403 super(InteractiveShell, self).__init__(config=config)
404 self.configurables = [self]
404 self.configurables = [self]
405
405
406 # These are relatively independent and stateless
406 # These are relatively independent and stateless
407 self.init_ipython_dir(ipython_dir)
407 self.init_ipython_dir(ipython_dir)
408 self.init_profile_dir(profile_dir)
408 self.init_profile_dir(profile_dir)
409 self.init_instance_attrs()
409 self.init_instance_attrs()
410 self.init_environment()
410 self.init_environment()
411
411
412 # Check if we're in a virtualenv, and set up sys.path.
412 # Check if we're in a virtualenv, and set up sys.path.
413 self.init_virtualenv()
413 self.init_virtualenv()
414
414
415 # Create namespaces (user_ns, user_global_ns, etc.)
415 # Create namespaces (user_ns, user_global_ns, etc.)
416 self.init_create_namespaces(user_module, user_ns)
416 self.init_create_namespaces(user_module, user_ns)
417 # This has to be done after init_create_namespaces because it uses
417 # This has to be done after init_create_namespaces because it uses
418 # something in self.user_ns, but before init_sys_modules, which
418 # something in self.user_ns, but before init_sys_modules, which
419 # is the first thing to modify sys.
419 # is the first thing to modify sys.
420 # TODO: When we override sys.stdout and sys.stderr before this class
420 # TODO: When we override sys.stdout and sys.stderr before this class
421 # is created, we are saving the overridden ones here. Not sure if this
421 # is created, we are saving the overridden ones here. Not sure if this
422 # is what we want to do.
422 # is what we want to do.
423 self.save_sys_module_state()
423 self.save_sys_module_state()
424 self.init_sys_modules()
424 self.init_sys_modules()
425
425
426 # While we're trying to have each part of the code directly access what
426 # While we're trying to have each part of the code directly access what
427 # it needs without keeping redundant references to objects, we have too
427 # it needs without keeping redundant references to objects, we have too
428 # much legacy code that expects ip.db to exist.
428 # much legacy code that expects ip.db to exist.
429 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
429 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
430
430
431 self.init_history()
431 self.init_history()
432 self.init_encoding()
432 self.init_encoding()
433 self.init_prefilter()
433 self.init_prefilter()
434
434
435 self.init_syntax_highlighting()
435 self.init_syntax_highlighting()
436 self.init_hooks()
436 self.init_hooks()
437 self.init_pushd_popd_magic()
437 self.init_pushd_popd_magic()
438 # self.init_traceback_handlers use to be here, but we moved it below
438 # self.init_traceback_handlers use to be here, but we moved it below
439 # because it and init_io have to come after init_readline.
439 # because it and init_io have to come after init_readline.
440 self.init_user_ns()
440 self.init_user_ns()
441 self.init_logger()
441 self.init_logger()
442 self.init_alias()
442 self.init_alias()
443 self.init_builtins()
443 self.init_builtins()
444
444
445 # pre_config_initialization
445 # pre_config_initialization
446
446
447 # The next section should contain everything that was in ipmaker.
447 # The next section should contain everything that was in ipmaker.
448 self.init_logstart()
448 self.init_logstart()
449
449
450 # The following was in post_config_initialization
450 # The following was in post_config_initialization
451 self.init_inspector()
451 self.init_inspector()
452 # init_readline() must come before init_io(), because init_io uses
452 # init_readline() must come before init_io(), because init_io uses
453 # readline related things.
453 # readline related things.
454 self.init_readline()
454 self.init_readline()
455 # We save this here in case user code replaces raw_input, but it needs
455 # We save this here in case user code replaces raw_input, but it needs
456 # to be after init_readline(), because PyPy's readline works by replacing
456 # to be after init_readline(), because PyPy's readline works by replacing
457 # raw_input.
457 # raw_input.
458 if py3compat.PY3:
458 if py3compat.PY3:
459 self.raw_input_original = input
459 self.raw_input_original = input
460 else:
460 else:
461 self.raw_input_original = raw_input
461 self.raw_input_original = raw_input
462 # init_completer must come after init_readline, because it needs to
462 # init_completer must come after init_readline, because it needs to
463 # know whether readline is present or not system-wide to configure the
463 # know whether readline is present or not system-wide to configure the
464 # completers, since the completion machinery can now operate
464 # completers, since the completion machinery can now operate
465 # independently of readline (e.g. over the network)
465 # independently of readline (e.g. over the network)
466 self.init_completer()
466 self.init_completer()
467 # TODO: init_io() needs to happen before init_traceback handlers
467 # TODO: init_io() needs to happen before init_traceback handlers
468 # because the traceback handlers hardcode the stdout/stderr streams.
468 # because the traceback handlers hardcode the stdout/stderr streams.
469 # This logic in in debugger.Pdb and should eventually be changed.
469 # This logic in in debugger.Pdb and should eventually be changed.
470 self.init_io()
470 self.init_io()
471 self.init_traceback_handlers(custom_exceptions)
471 self.init_traceback_handlers(custom_exceptions)
472 self.init_prompts()
472 self.init_prompts()
473 self.init_display_formatter()
473 self.init_display_formatter()
474 self.init_display_pub()
474 self.init_display_pub()
475 self.init_displayhook()
475 self.init_displayhook()
476 self.init_reload_doctest()
476 self.init_reload_doctest()
477 self.init_magics()
477 self.init_magics()
478 self.init_pdb()
478 self.init_pdb()
479 self.init_extension_manager()
479 self.init_extension_manager()
480 self.init_plugin_manager()
480 self.init_plugin_manager()
481 self.init_payload()
481 self.init_payload()
482 self.hooks.late_startup_hook()
482 self.hooks.late_startup_hook()
483 atexit.register(self.atexit_operations)
483 atexit.register(self.atexit_operations)
484
484
485 def get_ipython(self):
485 def get_ipython(self):
486 """Return the currently running IPython instance."""
486 """Return the currently running IPython instance."""
487 return self
487 return self
488
488
489 #-------------------------------------------------------------------------
489 #-------------------------------------------------------------------------
490 # Trait changed handlers
490 # Trait changed handlers
491 #-------------------------------------------------------------------------
491 #-------------------------------------------------------------------------
492
492
493 def _ipython_dir_changed(self, name, new):
493 def _ipython_dir_changed(self, name, new):
494 if not os.path.isdir(new):
494 if not os.path.isdir(new):
495 os.makedirs(new, mode = 0777)
495 os.makedirs(new, mode = 0777)
496
496
497 def set_autoindent(self,value=None):
497 def set_autoindent(self,value=None):
498 """Set the autoindent flag, checking for readline support.
498 """Set the autoindent flag, checking for readline support.
499
499
500 If called with no arguments, it acts as a toggle."""
500 If called with no arguments, it acts as a toggle."""
501
501
502 if value != 0 and not self.has_readline:
502 if value != 0 and not self.has_readline:
503 if os.name == 'posix':
503 if os.name == 'posix':
504 warn("The auto-indent feature requires the readline library")
504 warn("The auto-indent feature requires the readline library")
505 self.autoindent = 0
505 self.autoindent = 0
506 return
506 return
507 if value is None:
507 if value is None:
508 self.autoindent = not self.autoindent
508 self.autoindent = not self.autoindent
509 else:
509 else:
510 self.autoindent = value
510 self.autoindent = value
511
511
512 #-------------------------------------------------------------------------
512 #-------------------------------------------------------------------------
513 # init_* methods called by __init__
513 # init_* methods called by __init__
514 #-------------------------------------------------------------------------
514 #-------------------------------------------------------------------------
515
515
516 def init_ipython_dir(self, ipython_dir):
516 def init_ipython_dir(self, ipython_dir):
517 if ipython_dir is not None:
517 if ipython_dir is not None:
518 self.ipython_dir = ipython_dir
518 self.ipython_dir = ipython_dir
519 return
519 return
520
520
521 self.ipython_dir = get_ipython_dir()
521 self.ipython_dir = get_ipython_dir()
522
522
523 def init_profile_dir(self, profile_dir):
523 def init_profile_dir(self, profile_dir):
524 if profile_dir is not None:
524 if profile_dir is not None:
525 self.profile_dir = profile_dir
525 self.profile_dir = profile_dir
526 return
526 return
527 self.profile_dir =\
527 self.profile_dir =\
528 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
528 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
529
529
530 def init_instance_attrs(self):
530 def init_instance_attrs(self):
531 self.more = False
531 self.more = False
532
532
533 # command compiler
533 # command compiler
534 self.compile = CachingCompiler()
534 self.compile = CachingCompiler()
535
535
536 # Make an empty namespace, which extension writers can rely on both
536 # Make an empty namespace, which extension writers can rely on both
537 # existing and NEVER being used by ipython itself. This gives them a
537 # existing and NEVER being used by ipython itself. This gives them a
538 # convenient location for storing additional information and state
538 # convenient location for storing additional information and state
539 # their extensions may require, without fear of collisions with other
539 # their extensions may require, without fear of collisions with other
540 # ipython names that may develop later.
540 # ipython names that may develop later.
541 self.meta = Struct()
541 self.meta = Struct()
542
542
543 # Temporary files used for various purposes. Deleted at exit.
543 # Temporary files used for various purposes. Deleted at exit.
544 self.tempfiles = []
544 self.tempfiles = []
545
545
546 # Keep track of readline usage (later set by init_readline)
546 # Keep track of readline usage (later set by init_readline)
547 self.has_readline = False
547 self.has_readline = False
548
548
549 # keep track of where we started running (mainly for crash post-mortem)
549 # keep track of where we started running (mainly for crash post-mortem)
550 # This is not being used anywhere currently.
550 # This is not being used anywhere currently.
551 self.starting_dir = os.getcwdu()
551 self.starting_dir = os.getcwdu()
552
552
553 # Indentation management
553 # Indentation management
554 self.indent_current_nsp = 0
554 self.indent_current_nsp = 0
555
555
556 # Dict to track post-execution functions that have been registered
556 # Dict to track post-execution functions that have been registered
557 self._post_execute = {}
557 self._post_execute = {}
558
558
559 def init_environment(self):
559 def init_environment(self):
560 """Any changes we need to make to the user's environment."""
560 """Any changes we need to make to the user's environment."""
561 pass
561 pass
562
562
563 def init_encoding(self):
563 def init_encoding(self):
564 # Get system encoding at startup time. Certain terminals (like Emacs
564 # Get system encoding at startup time. Certain terminals (like Emacs
565 # under Win32 have it set to None, and we need to have a known valid
565 # under Win32 have it set to None, and we need to have a known valid
566 # encoding to use in the raw_input() method
566 # encoding to use in the raw_input() method
567 try:
567 try:
568 self.stdin_encoding = sys.stdin.encoding or 'ascii'
568 self.stdin_encoding = sys.stdin.encoding or 'ascii'
569 except AttributeError:
569 except AttributeError:
570 self.stdin_encoding = 'ascii'
570 self.stdin_encoding = 'ascii'
571
571
572 def init_syntax_highlighting(self):
572 def init_syntax_highlighting(self):
573 # Python source parser/formatter for syntax highlighting
573 # Python source parser/formatter for syntax highlighting
574 pyformat = PyColorize.Parser().format
574 pyformat = PyColorize.Parser().format
575 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
575 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
576
576
577 def init_pushd_popd_magic(self):
577 def init_pushd_popd_magic(self):
578 # for pushd/popd management
578 # for pushd/popd management
579 self.home_dir = get_home_dir()
579 self.home_dir = get_home_dir()
580
580
581 self.dir_stack = []
581 self.dir_stack = []
582
582
583 def init_logger(self):
583 def init_logger(self):
584 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
584 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
585 logmode='rotate')
585 logmode='rotate')
586
586
587 def init_logstart(self):
587 def init_logstart(self):
588 """Initialize logging in case it was requested at the command line.
588 """Initialize logging in case it was requested at the command line.
589 """
589 """
590 if self.logappend:
590 if self.logappend:
591 self.magic('logstart %s append' % self.logappend)
591 self.magic('logstart %s append' % self.logappend)
592 elif self.logfile:
592 elif self.logfile:
593 self.magic('logstart %' % self.logfile)
593 self.magic('logstart %' % self.logfile)
594 elif self.logstart:
594 elif self.logstart:
595 self.magic('logstart')
595 self.magic('logstart')
596
596
597 def init_builtins(self):
597 def init_builtins(self):
598 # A single, static flag that we set to True. Its presence indicates
598 # A single, static flag that we set to True. Its presence indicates
599 # that an IPython shell has been created, and we make no attempts at
599 # that an IPython shell has been created, and we make no attempts at
600 # removing on exit or representing the existence of more than one
600 # removing on exit or representing the existence of more than one
601 # IPython at a time.
601 # IPython at a time.
602 builtin_mod.__dict__['__IPYTHON__'] = True
602 builtin_mod.__dict__['__IPYTHON__'] = True
603
603
604 # In 0.11 we introduced '__IPYTHON__active' as an integer we'd try to
604 # In 0.11 we introduced '__IPYTHON__active' as an integer we'd try to
605 # manage on enter/exit, but with all our shells it's virtually
605 # manage on enter/exit, but with all our shells it's virtually
606 # impossible to get all the cases right. We're leaving the name in for
606 # impossible to get all the cases right. We're leaving the name in for
607 # those who adapted their codes to check for this flag, but will
607 # those who adapted their codes to check for this flag, but will
608 # eventually remove it after a few more releases.
608 # eventually remove it after a few more releases.
609 builtin_mod.__dict__['__IPYTHON__active'] = \
609 builtin_mod.__dict__['__IPYTHON__active'] = \
610 'Deprecated, check for __IPYTHON__'
610 'Deprecated, check for __IPYTHON__'
611
611
612 self.builtin_trap = BuiltinTrap(shell=self)
612 self.builtin_trap = BuiltinTrap(shell=self)
613
613
614 def init_inspector(self):
614 def init_inspector(self):
615 # Object inspector
615 # Object inspector
616 self.inspector = oinspect.Inspector(oinspect.InspectColors,
616 self.inspector = oinspect.Inspector(oinspect.InspectColors,
617 PyColorize.ANSICodeColors,
617 PyColorize.ANSICodeColors,
618 'NoColor',
618 'NoColor',
619 self.object_info_string_level)
619 self.object_info_string_level)
620
620
621 def init_io(self):
621 def init_io(self):
622 # This will just use sys.stdout and sys.stderr. If you want to
622 # This will just use sys.stdout and sys.stderr. If you want to
623 # override sys.stdout and sys.stderr themselves, you need to do that
623 # override sys.stdout and sys.stderr themselves, you need to do that
624 # *before* instantiating this class, because io holds onto
624 # *before* instantiating this class, because io holds onto
625 # references to the underlying streams.
625 # references to the underlying streams.
626 if sys.platform == 'win32' and self.has_readline:
626 if sys.platform == 'win32' and self.has_readline:
627 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
627 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
628 else:
628 else:
629 io.stdout = io.IOStream(sys.stdout)
629 io.stdout = io.IOStream(sys.stdout)
630 io.stderr = io.IOStream(sys.stderr)
630 io.stderr = io.IOStream(sys.stderr)
631
631
632 def init_prompts(self):
632 def init_prompts(self):
633 self.prompt_manager = PromptManager(shell=self, config=self.config)
633 self.prompt_manager = PromptManager(shell=self, config=self.config)
634 self.configurables.append(self.prompt_manager)
634 self.configurables.append(self.prompt_manager)
635 # Set system prompts, so that scripts can decide if they are running
635 # Set system prompts, so that scripts can decide if they are running
636 # interactively.
636 # interactively.
637 sys.ps1 = 'In : '
637 sys.ps1 = 'In : '
638 sys.ps2 = '...: '
638 sys.ps2 = '...: '
639 sys.ps3 = 'Out: '
639 sys.ps3 = 'Out: '
640
640
641 def init_display_formatter(self):
641 def init_display_formatter(self):
642 self.display_formatter = DisplayFormatter(config=self.config)
642 self.display_formatter = DisplayFormatter(config=self.config)
643 self.configurables.append(self.display_formatter)
643 self.configurables.append(self.display_formatter)
644
644
645 def init_display_pub(self):
645 def init_display_pub(self):
646 self.display_pub = self.display_pub_class(config=self.config)
646 self.display_pub = self.display_pub_class(config=self.config)
647 self.configurables.append(self.display_pub)
647 self.configurables.append(self.display_pub)
648
648
649 def init_displayhook(self):
649 def init_displayhook(self):
650 # Initialize displayhook, set in/out prompts and printing system
650 # Initialize displayhook, set in/out prompts and printing system
651 self.displayhook = self.displayhook_class(
651 self.displayhook = self.displayhook_class(
652 config=self.config,
652 config=self.config,
653 shell=self,
653 shell=self,
654 cache_size=self.cache_size,
654 cache_size=self.cache_size,
655 )
655 )
656 self.configurables.append(self.displayhook)
656 self.configurables.append(self.displayhook)
657 # This is a context manager that installs/revmoes the displayhook at
657 # This is a context manager that installs/revmoes the displayhook at
658 # the appropriate time.
658 # the appropriate time.
659 self.display_trap = DisplayTrap(hook=self.displayhook)
659 self.display_trap = DisplayTrap(hook=self.displayhook)
660
660
661 def init_reload_doctest(self):
661 def init_reload_doctest(self):
662 # Do a proper resetting of doctest, including the necessary displayhook
662 # Do a proper resetting of doctest, including the necessary displayhook
663 # monkeypatching
663 # monkeypatching
664 try:
664 try:
665 doctest_reload()
665 doctest_reload()
666 except ImportError:
666 except ImportError:
667 warn("doctest module does not exist.")
667 warn("doctest module does not exist.")
668
668
669 def init_virtualenv(self):
669 def init_virtualenv(self):
670 """Add a virtualenv to sys.path so the user can import modules from it.
670 """Add a virtualenv to sys.path so the user can import modules from it.
671 This isn't perfect: it doesn't use the Python interpreter with which the
671 This isn't perfect: it doesn't use the Python interpreter with which the
672 virtualenv was built, and it ignores the --no-site-packages option. A
672 virtualenv was built, and it ignores the --no-site-packages option. A
673 warning will appear suggesting the user installs IPython in the
673 warning will appear suggesting the user installs IPython in the
674 virtualenv, but for many cases, it probably works well enough.
674 virtualenv, but for many cases, it probably works well enough.
675
675
676 Adapted from code snippets online.
676 Adapted from code snippets online.
677
677
678 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
678 http://blog.ufsoft.org/2009/1/29/ipython-and-virtualenv
679 """
679 """
680 if 'VIRTUAL_ENV' not in os.environ:
680 if 'VIRTUAL_ENV' not in os.environ:
681 # Not in a virtualenv
681 # Not in a virtualenv
682 return
682 return
683
683
684 if sys.executable.startswith(os.environ['VIRTUAL_ENV']):
684 if sys.executable.startswith(os.environ['VIRTUAL_ENV']):
685 # Running properly in the virtualenv, don't need to do anything
685 # Running properly in the virtualenv, don't need to do anything
686 return
686 return
687
687
688 warn("Attempting to work in a virtualenv. If you encounter problems, please "
688 warn("Attempting to work in a virtualenv. If you encounter problems, please "
689 "install IPython inside the virtualenv.\n")
689 "install IPython inside the virtualenv.\n")
690 if sys.platform == "win32":
690 if sys.platform == "win32":
691 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
691 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'Lib', 'site-packages')
692 else:
692 else:
693 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
693 virtual_env = os.path.join(os.environ['VIRTUAL_ENV'], 'lib',
694 'python%d.%d' % sys.version_info[:2], 'site-packages')
694 'python%d.%d' % sys.version_info[:2], 'site-packages')
695
695
696 import site
696 import site
697 sys.path.insert(0, virtual_env)
697 sys.path.insert(0, virtual_env)
698 site.addsitedir(virtual_env)
698 site.addsitedir(virtual_env)
699
699
700 #-------------------------------------------------------------------------
700 #-------------------------------------------------------------------------
701 # Things related to injections into the sys module
701 # Things related to injections into the sys module
702 #-------------------------------------------------------------------------
702 #-------------------------------------------------------------------------
703
703
704 def save_sys_module_state(self):
704 def save_sys_module_state(self):
705 """Save the state of hooks in the sys module.
705 """Save the state of hooks in the sys module.
706
706
707 This has to be called after self.user_module is created.
707 This has to be called after self.user_module is created.
708 """
708 """
709 self._orig_sys_module_state = {}
709 self._orig_sys_module_state = {}
710 self._orig_sys_module_state['stdin'] = sys.stdin
710 self._orig_sys_module_state['stdin'] = sys.stdin
711 self._orig_sys_module_state['stdout'] = sys.stdout
711 self._orig_sys_module_state['stdout'] = sys.stdout
712 self._orig_sys_module_state['stderr'] = sys.stderr
712 self._orig_sys_module_state['stderr'] = sys.stderr
713 self._orig_sys_module_state['excepthook'] = sys.excepthook
713 self._orig_sys_module_state['excepthook'] = sys.excepthook
714 self._orig_sys_modules_main_name = self.user_module.__name__
714 self._orig_sys_modules_main_name = self.user_module.__name__
715 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
715 self._orig_sys_modules_main_mod = sys.modules.get(self.user_module.__name__)
716
716
717 def restore_sys_module_state(self):
717 def restore_sys_module_state(self):
718 """Restore the state of the sys module."""
718 """Restore the state of the sys module."""
719 try:
719 try:
720 for k, v in self._orig_sys_module_state.iteritems():
720 for k, v in self._orig_sys_module_state.iteritems():
721 setattr(sys, k, v)
721 setattr(sys, k, v)
722 except AttributeError:
722 except AttributeError:
723 pass
723 pass
724 # Reset what what done in self.init_sys_modules
724 # Reset what what done in self.init_sys_modules
725 if self._orig_sys_modules_main_mod is not None:
725 if self._orig_sys_modules_main_mod is not None:
726 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
726 sys.modules[self._orig_sys_modules_main_name] = self._orig_sys_modules_main_mod
727
727
728 #-------------------------------------------------------------------------
728 #-------------------------------------------------------------------------
729 # Things related to hooks
729 # Things related to hooks
730 #-------------------------------------------------------------------------
730 #-------------------------------------------------------------------------
731
731
732 def init_hooks(self):
732 def init_hooks(self):
733 # hooks holds pointers used for user-side customizations
733 # hooks holds pointers used for user-side customizations
734 self.hooks = Struct()
734 self.hooks = Struct()
735
735
736 self.strdispatchers = {}
736 self.strdispatchers = {}
737
737
738 # Set all default hooks, defined in the IPython.hooks module.
738 # Set all default hooks, defined in the IPython.hooks module.
739 hooks = IPython.core.hooks
739 hooks = IPython.core.hooks
740 for hook_name in hooks.__all__:
740 for hook_name in hooks.__all__:
741 # default hooks have priority 100, i.e. low; user hooks should have
741 # default hooks have priority 100, i.e. low; user hooks should have
742 # 0-100 priority
742 # 0-100 priority
743 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
743 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
744
744
745 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
745 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
746 """set_hook(name,hook) -> sets an internal IPython hook.
746 """set_hook(name,hook) -> sets an internal IPython hook.
747
747
748 IPython exposes some of its internal API as user-modifiable hooks. By
748 IPython exposes some of its internal API as user-modifiable hooks. By
749 adding your function to one of these hooks, you can modify IPython's
749 adding your function to one of these hooks, you can modify IPython's
750 behavior to call at runtime your own routines."""
750 behavior to call at runtime your own routines."""
751
751
752 # At some point in the future, this should validate the hook before it
752 # At some point in the future, this should validate the hook before it
753 # accepts it. Probably at least check that the hook takes the number
753 # accepts it. Probably at least check that the hook takes the number
754 # of args it's supposed to.
754 # of args it's supposed to.
755
755
756 f = types.MethodType(hook,self)
756 f = types.MethodType(hook,self)
757
757
758 # check if the hook is for strdispatcher first
758 # check if the hook is for strdispatcher first
759 if str_key is not None:
759 if str_key is not None:
760 sdp = self.strdispatchers.get(name, StrDispatch())
760 sdp = self.strdispatchers.get(name, StrDispatch())
761 sdp.add_s(str_key, f, priority )
761 sdp.add_s(str_key, f, priority )
762 self.strdispatchers[name] = sdp
762 self.strdispatchers[name] = sdp
763 return
763 return
764 if re_key is not None:
764 if re_key is not None:
765 sdp = self.strdispatchers.get(name, StrDispatch())
765 sdp = self.strdispatchers.get(name, StrDispatch())
766 sdp.add_re(re.compile(re_key), f, priority )
766 sdp.add_re(re.compile(re_key), f, priority )
767 self.strdispatchers[name] = sdp
767 self.strdispatchers[name] = sdp
768 return
768 return
769
769
770 dp = getattr(self.hooks, name, None)
770 dp = getattr(self.hooks, name, None)
771 if name not in IPython.core.hooks.__all__:
771 if name not in IPython.core.hooks.__all__:
772 print "Warning! Hook '%s' is not one of %s" % \
772 print "Warning! Hook '%s' is not one of %s" % \
773 (name, IPython.core.hooks.__all__ )
773 (name, IPython.core.hooks.__all__ )
774 if not dp:
774 if not dp:
775 dp = IPython.core.hooks.CommandChainDispatcher()
775 dp = IPython.core.hooks.CommandChainDispatcher()
776
776
777 try:
777 try:
778 dp.add(f,priority)
778 dp.add(f,priority)
779 except AttributeError:
779 except AttributeError:
780 # it was not commandchain, plain old func - replace
780 # it was not commandchain, plain old func - replace
781 dp = f
781 dp = f
782
782
783 setattr(self.hooks,name, dp)
783 setattr(self.hooks,name, dp)
784
784
785 def register_post_execute(self, func):
785 def register_post_execute(self, func):
786 """Register a function for calling after code execution.
786 """Register a function for calling after code execution.
787 """
787 """
788 if not callable(func):
788 if not callable(func):
789 raise ValueError('argument %s must be callable' % func)
789 raise ValueError('argument %s must be callable' % func)
790 self._post_execute[func] = True
790 self._post_execute[func] = True
791
791
792 #-------------------------------------------------------------------------
792 #-------------------------------------------------------------------------
793 # Things related to the "main" module
793 # Things related to the "main" module
794 #-------------------------------------------------------------------------
794 #-------------------------------------------------------------------------
795
795
796 def new_main_mod(self,ns=None):
796 def new_main_mod(self,ns=None):
797 """Return a new 'main' module object for user code execution.
797 """Return a new 'main' module object for user code execution.
798 """
798 """
799 main_mod = self._user_main_module
799 main_mod = self._user_main_module
800 init_fakemod_dict(main_mod,ns)
800 init_fakemod_dict(main_mod,ns)
801 return main_mod
801 return main_mod
802
802
803 def cache_main_mod(self,ns,fname):
803 def cache_main_mod(self,ns,fname):
804 """Cache a main module's namespace.
804 """Cache a main module's namespace.
805
805
806 When scripts are executed via %run, we must keep a reference to the
806 When scripts are executed via %run, we must keep a reference to the
807 namespace of their __main__ module (a FakeModule instance) around so
807 namespace of their __main__ module (a FakeModule instance) around so
808 that Python doesn't clear it, rendering objects defined therein
808 that Python doesn't clear it, rendering objects defined therein
809 useless.
809 useless.
810
810
811 This method keeps said reference in a private dict, keyed by the
811 This method keeps said reference in a private dict, keyed by the
812 absolute path of the module object (which corresponds to the script
812 absolute path of the module object (which corresponds to the script
813 path). This way, for multiple executions of the same script we only
813 path). This way, for multiple executions of the same script we only
814 keep one copy of the namespace (the last one), thus preventing memory
814 keep one copy of the namespace (the last one), thus preventing memory
815 leaks from old references while allowing the objects from the last
815 leaks from old references while allowing the objects from the last
816 execution to be accessible.
816 execution to be accessible.
817
817
818 Note: we can not allow the actual FakeModule instances to be deleted,
818 Note: we can not allow the actual FakeModule instances to be deleted,
819 because of how Python tears down modules (it hard-sets all their
819 because of how Python tears down modules (it hard-sets all their
820 references to None without regard for reference counts). This method
820 references to None without regard for reference counts). This method
821 must therefore make a *copy* of the given namespace, to allow the
821 must therefore make a *copy* of the given namespace, to allow the
822 original module's __dict__ to be cleared and reused.
822 original module's __dict__ to be cleared and reused.
823
823
824
824
825 Parameters
825 Parameters
826 ----------
826 ----------
827 ns : a namespace (a dict, typically)
827 ns : a namespace (a dict, typically)
828
828
829 fname : str
829 fname : str
830 Filename associated with the namespace.
830 Filename associated with the namespace.
831
831
832 Examples
832 Examples
833 --------
833 --------
834
834
835 In [10]: import IPython
835 In [10]: import IPython
836
836
837 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
837 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
838
838
839 In [12]: IPython.__file__ in _ip._main_ns_cache
839 In [12]: IPython.__file__ in _ip._main_ns_cache
840 Out[12]: True
840 Out[12]: True
841 """
841 """
842 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
842 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
843
843
844 def clear_main_mod_cache(self):
844 def clear_main_mod_cache(self):
845 """Clear the cache of main modules.
845 """Clear the cache of main modules.
846
846
847 Mainly for use by utilities like %reset.
847 Mainly for use by utilities like %reset.
848
848
849 Examples
849 Examples
850 --------
850 --------
851
851
852 In [15]: import IPython
852 In [15]: import IPython
853
853
854 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
854 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
855
855
856 In [17]: len(_ip._main_ns_cache) > 0
856 In [17]: len(_ip._main_ns_cache) > 0
857 Out[17]: True
857 Out[17]: True
858
858
859 In [18]: _ip.clear_main_mod_cache()
859 In [18]: _ip.clear_main_mod_cache()
860
860
861 In [19]: len(_ip._main_ns_cache) == 0
861 In [19]: len(_ip._main_ns_cache) == 0
862 Out[19]: True
862 Out[19]: True
863 """
863 """
864 self._main_ns_cache.clear()
864 self._main_ns_cache.clear()
865
865
866 #-------------------------------------------------------------------------
866 #-------------------------------------------------------------------------
867 # Things related to debugging
867 # Things related to debugging
868 #-------------------------------------------------------------------------
868 #-------------------------------------------------------------------------
869
869
870 def init_pdb(self):
870 def init_pdb(self):
871 # Set calling of pdb on exceptions
871 # Set calling of pdb on exceptions
872 # self.call_pdb is a property
872 # self.call_pdb is a property
873 self.call_pdb = self.pdb
873 self.call_pdb = self.pdb
874
874
875 def _get_call_pdb(self):
875 def _get_call_pdb(self):
876 return self._call_pdb
876 return self._call_pdb
877
877
878 def _set_call_pdb(self,val):
878 def _set_call_pdb(self,val):
879
879
880 if val not in (0,1,False,True):
880 if val not in (0,1,False,True):
881 raise ValueError,'new call_pdb value must be boolean'
881 raise ValueError,'new call_pdb value must be boolean'
882
882
883 # store value in instance
883 # store value in instance
884 self._call_pdb = val
884 self._call_pdb = val
885
885
886 # notify the actual exception handlers
886 # notify the actual exception handlers
887 self.InteractiveTB.call_pdb = val
887 self.InteractiveTB.call_pdb = val
888
888
889 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
889 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
890 'Control auto-activation of pdb at exceptions')
890 'Control auto-activation of pdb at exceptions')
891
891
892 def debugger(self,force=False):
892 def debugger(self,force=False):
893 """Call the pydb/pdb debugger.
893 """Call the pydb/pdb debugger.
894
894
895 Keywords:
895 Keywords:
896
896
897 - force(False): by default, this routine checks the instance call_pdb
897 - force(False): by default, this routine checks the instance call_pdb
898 flag and does not actually invoke the debugger if the flag is false.
898 flag and does not actually invoke the debugger if the flag is false.
899 The 'force' option forces the debugger to activate even if the flag
899 The 'force' option forces the debugger to activate even if the flag
900 is false.
900 is false.
901 """
901 """
902
902
903 if not (force or self.call_pdb):
903 if not (force or self.call_pdb):
904 return
904 return
905
905
906 if not hasattr(sys,'last_traceback'):
906 if not hasattr(sys,'last_traceback'):
907 error('No traceback has been produced, nothing to debug.')
907 error('No traceback has been produced, nothing to debug.')
908 return
908 return
909
909
910 # use pydb if available
910 # use pydb if available
911 if debugger.has_pydb:
911 if debugger.has_pydb:
912 from pydb import pm
912 from pydb import pm
913 else:
913 else:
914 # fallback to our internal debugger
914 # fallback to our internal debugger
915 pm = lambda : self.InteractiveTB.debugger(force=True)
915 pm = lambda : self.InteractiveTB.debugger(force=True)
916
916
917 with self.readline_no_record:
917 with self.readline_no_record:
918 pm()
918 pm()
919
919
920 #-------------------------------------------------------------------------
920 #-------------------------------------------------------------------------
921 # Things related to IPython's various namespaces
921 # Things related to IPython's various namespaces
922 #-------------------------------------------------------------------------
922 #-------------------------------------------------------------------------
923 default_user_namespaces = True
923 default_user_namespaces = True
924
924
925 def init_create_namespaces(self, user_module=None, user_ns=None):
925 def init_create_namespaces(self, user_module=None, user_ns=None):
926 # Create the namespace where the user will operate. user_ns is
926 # Create the namespace where the user will operate. user_ns is
927 # normally the only one used, and it is passed to the exec calls as
927 # normally the only one used, and it is passed to the exec calls as
928 # the locals argument. But we do carry a user_global_ns namespace
928 # the locals argument. But we do carry a user_global_ns namespace
929 # given as the exec 'globals' argument, This is useful in embedding
929 # given as the exec 'globals' argument, This is useful in embedding
930 # situations where the ipython shell opens in a context where the
930 # situations where the ipython shell opens in a context where the
931 # distinction between locals and globals is meaningful. For
931 # distinction between locals and globals is meaningful. For
932 # non-embedded contexts, it is just the same object as the user_ns dict.
932 # non-embedded contexts, it is just the same object as the user_ns dict.
933
933
934 # FIXME. For some strange reason, __builtins__ is showing up at user
934 # FIXME. For some strange reason, __builtins__ is showing up at user
935 # level as a dict instead of a module. This is a manual fix, but I
935 # level as a dict instead of a module. This is a manual fix, but I
936 # should really track down where the problem is coming from. Alex
936 # should really track down where the problem is coming from. Alex
937 # Schmolck reported this problem first.
937 # Schmolck reported this problem first.
938
938
939 # A useful post by Alex Martelli on this topic:
939 # A useful post by Alex Martelli on this topic:
940 # Re: inconsistent value from __builtins__
940 # Re: inconsistent value from __builtins__
941 # Von: Alex Martelli <aleaxit@yahoo.com>
941 # Von: Alex Martelli <aleaxit@yahoo.com>
942 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
942 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
943 # Gruppen: comp.lang.python
943 # Gruppen: comp.lang.python
944
944
945 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
945 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
946 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
946 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
947 # > <type 'dict'>
947 # > <type 'dict'>
948 # > >>> print type(__builtins__)
948 # > >>> print type(__builtins__)
949 # > <type 'module'>
949 # > <type 'module'>
950 # > Is this difference in return value intentional?
950 # > Is this difference in return value intentional?
951
951
952 # Well, it's documented that '__builtins__' can be either a dictionary
952 # Well, it's documented that '__builtins__' can be either a dictionary
953 # or a module, and it's been that way for a long time. Whether it's
953 # or a module, and it's been that way for a long time. Whether it's
954 # intentional (or sensible), I don't know. In any case, the idea is
954 # intentional (or sensible), I don't know. In any case, the idea is
955 # that if you need to access the built-in namespace directly, you
955 # that if you need to access the built-in namespace directly, you
956 # should start with "import __builtin__" (note, no 's') which will
956 # should start with "import __builtin__" (note, no 's') which will
957 # definitely give you a module. Yeah, it's somewhat confusing:-(.
957 # definitely give you a module. Yeah, it's somewhat confusing:-(.
958
958
959 # These routines return a properly built module and dict as needed by
959 # These routines return a properly built module and dict as needed by
960 # the rest of the code, and can also be used by extension writers to
960 # the rest of the code, and can also be used by extension writers to
961 # generate properly initialized namespaces.
961 # generate properly initialized namespaces.
962 if (user_ns is not None) or (user_module is not None):
962 if (user_ns is not None) or (user_module is not None):
963 self.default_user_namespaces = False
963 self.default_user_namespaces = False
964 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
964 self.user_module, self.user_ns = self.prepare_user_module(user_module, user_ns)
965
965
966 # A record of hidden variables we have added to the user namespace, so
966 # A record of hidden variables we have added to the user namespace, so
967 # we can list later only variables defined in actual interactive use.
967 # we can list later only variables defined in actual interactive use.
968 self.user_ns_hidden = set()
968 self.user_ns_hidden = set()
969
969
970 # Now that FakeModule produces a real module, we've run into a nasty
970 # Now that FakeModule produces a real module, we've run into a nasty
971 # problem: after script execution (via %run), the module where the user
971 # problem: after script execution (via %run), the module where the user
972 # code ran is deleted. Now that this object is a true module (needed
972 # code ran is deleted. Now that this object is a true module (needed
973 # so docetst and other tools work correctly), the Python module
973 # so docetst and other tools work correctly), the Python module
974 # teardown mechanism runs over it, and sets to None every variable
974 # teardown mechanism runs over it, and sets to None every variable
975 # present in that module. Top-level references to objects from the
975 # present in that module. Top-level references to objects from the
976 # script survive, because the user_ns is updated with them. However,
976 # script survive, because the user_ns is updated with them. However,
977 # calling functions defined in the script that use other things from
977 # calling functions defined in the script that use other things from
978 # the script will fail, because the function's closure had references
978 # the script will fail, because the function's closure had references
979 # to the original objects, which are now all None. So we must protect
979 # to the original objects, which are now all None. So we must protect
980 # these modules from deletion by keeping a cache.
980 # these modules from deletion by keeping a cache.
981 #
981 #
982 # To avoid keeping stale modules around (we only need the one from the
982 # To avoid keeping stale modules around (we only need the one from the
983 # last run), we use a dict keyed with the full path to the script, so
983 # last run), we use a dict keyed with the full path to the script, so
984 # only the last version of the module is held in the cache. Note,
984 # only the last version of the module is held in the cache. Note,
985 # however, that we must cache the module *namespace contents* (their
985 # however, that we must cache the module *namespace contents* (their
986 # __dict__). Because if we try to cache the actual modules, old ones
986 # __dict__). Because if we try to cache the actual modules, old ones
987 # (uncached) could be destroyed while still holding references (such as
987 # (uncached) could be destroyed while still holding references (such as
988 # those held by GUI objects that tend to be long-lived)>
988 # those held by GUI objects that tend to be long-lived)>
989 #
989 #
990 # The %reset command will flush this cache. See the cache_main_mod()
990 # The %reset command will flush this cache. See the cache_main_mod()
991 # and clear_main_mod_cache() methods for details on use.
991 # and clear_main_mod_cache() methods for details on use.
992
992
993 # This is the cache used for 'main' namespaces
993 # This is the cache used for 'main' namespaces
994 self._main_ns_cache = {}
994 self._main_ns_cache = {}
995 # And this is the single instance of FakeModule whose __dict__ we keep
995 # And this is the single instance of FakeModule whose __dict__ we keep
996 # copying and clearing for reuse on each %run
996 # copying and clearing for reuse on each %run
997 self._user_main_module = FakeModule()
997 self._user_main_module = FakeModule()
998
998
999 # A table holding all the namespaces IPython deals with, so that
999 # A table holding all the namespaces IPython deals with, so that
1000 # introspection facilities can search easily.
1000 # introspection facilities can search easily.
1001 self.ns_table = {'user_global':self.user_module.__dict__,
1001 self.ns_table = {'user_global':self.user_module.__dict__,
1002 'user_local':self.user_ns,
1002 'user_local':self.user_ns,
1003 'builtin':builtin_mod.__dict__
1003 'builtin':builtin_mod.__dict__
1004 }
1004 }
1005
1005
1006 @property
1006 @property
1007 def user_global_ns(self):
1007 def user_global_ns(self):
1008 return self.user_module.__dict__
1008 return self.user_module.__dict__
1009
1009
1010 def prepare_user_module(self, user_module=None, user_ns=None):
1010 def prepare_user_module(self, user_module=None, user_ns=None):
1011 """Prepare the module and namespace in which user code will be run.
1011 """Prepare the module and namespace in which user code will be run.
1012
1012
1013 When IPython is started normally, both parameters are None: a new module
1013 When IPython is started normally, both parameters are None: a new module
1014 is created automatically, and its __dict__ used as the namespace.
1014 is created automatically, and its __dict__ used as the namespace.
1015
1015
1016 If only user_module is provided, its __dict__ is used as the namespace.
1016 If only user_module is provided, its __dict__ is used as the namespace.
1017 If only user_ns is provided, a dummy module is created, and user_ns
1017 If only user_ns is provided, a dummy module is created, and user_ns
1018 becomes the global namespace. If both are provided (as they may be
1018 becomes the global namespace. If both are provided (as they may be
1019 when embedding), user_ns is the local namespace, and user_module
1019 when embedding), user_ns is the local namespace, and user_module
1020 provides the global namespace.
1020 provides the global namespace.
1021
1021
1022 Parameters
1022 Parameters
1023 ----------
1023 ----------
1024 user_module : module, optional
1024 user_module : module, optional
1025 The current user module in which IPython is being run. If None,
1025 The current user module in which IPython is being run. If None,
1026 a clean module will be created.
1026 a clean module will be created.
1027 user_ns : dict, optional
1027 user_ns : dict, optional
1028 A namespace in which to run interactive commands.
1028 A namespace in which to run interactive commands.
1029
1029
1030 Returns
1030 Returns
1031 -------
1031 -------
1032 A tuple of user_module and user_ns, each properly initialised.
1032 A tuple of user_module and user_ns, each properly initialised.
1033 """
1033 """
1034 if user_module is None and user_ns is not None:
1034 if user_module is None and user_ns is not None:
1035 user_ns.setdefault("__name__", "__main__")
1035 user_ns.setdefault("__name__", "__main__")
1036 class DummyMod(object):
1036 class DummyMod(object):
1037 "A dummy module used for IPython's interactive namespace."
1037 "A dummy module used for IPython's interactive namespace."
1038 pass
1038 pass
1039 user_module = DummyMod()
1039 user_module = DummyMod()
1040 user_module.__dict__ = user_ns
1040 user_module.__dict__ = user_ns
1041
1041
1042 if user_module is None:
1042 if user_module is None:
1043 user_module = types.ModuleType("__main__",
1043 user_module = types.ModuleType("__main__",
1044 doc="Automatically created module for IPython interactive environment")
1044 doc="Automatically created module for IPython interactive environment")
1045
1045
1046 # We must ensure that __builtin__ (without the final 's') is always
1046 # We must ensure that __builtin__ (without the final 's') is always
1047 # available and pointing to the __builtin__ *module*. For more details:
1047 # available and pointing to the __builtin__ *module*. For more details:
1048 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1048 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1049 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1049 user_module.__dict__.setdefault('__builtin__', builtin_mod)
1050 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1050 user_module.__dict__.setdefault('__builtins__', builtin_mod)
1051
1051
1052 if user_ns is None:
1052 if user_ns is None:
1053 user_ns = user_module.__dict__
1053 user_ns = user_module.__dict__
1054
1054
1055 return user_module, user_ns
1055 return user_module, user_ns
1056
1056
1057 def init_sys_modules(self):
1057 def init_sys_modules(self):
1058 # We need to insert into sys.modules something that looks like a
1058 # We need to insert into sys.modules something that looks like a
1059 # module but which accesses the IPython namespace, for shelve and
1059 # module but which accesses the IPython namespace, for shelve and
1060 # pickle to work interactively. Normally they rely on getting
1060 # pickle to work interactively. Normally they rely on getting
1061 # everything out of __main__, but for embedding purposes each IPython
1061 # everything out of __main__, but for embedding purposes each IPython
1062 # instance has its own private namespace, so we can't go shoving
1062 # instance has its own private namespace, so we can't go shoving
1063 # everything into __main__.
1063 # everything into __main__.
1064
1064
1065 # note, however, that we should only do this for non-embedded
1065 # note, however, that we should only do this for non-embedded
1066 # ipythons, which really mimic the __main__.__dict__ with their own
1066 # ipythons, which really mimic the __main__.__dict__ with their own
1067 # namespace. Embedded instances, on the other hand, should not do
1067 # namespace. Embedded instances, on the other hand, should not do
1068 # this because they need to manage the user local/global namespaces
1068 # this because they need to manage the user local/global namespaces
1069 # only, but they live within a 'normal' __main__ (meaning, they
1069 # only, but they live within a 'normal' __main__ (meaning, they
1070 # shouldn't overtake the execution environment of the script they're
1070 # shouldn't overtake the execution environment of the script they're
1071 # embedded in).
1071 # embedded in).
1072
1072
1073 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1073 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1074 main_name = self.user_module.__name__
1074 main_name = self.user_module.__name__
1075 sys.modules[main_name] = self.user_module
1075 sys.modules[main_name] = self.user_module
1076
1076
1077 def init_user_ns(self):
1077 def init_user_ns(self):
1078 """Initialize all user-visible namespaces to their minimum defaults.
1078 """Initialize all user-visible namespaces to their minimum defaults.
1079
1079
1080 Certain history lists are also initialized here, as they effectively
1080 Certain history lists are also initialized here, as they effectively
1081 act as user namespaces.
1081 act as user namespaces.
1082
1082
1083 Notes
1083 Notes
1084 -----
1084 -----
1085 All data structures here are only filled in, they are NOT reset by this
1085 All data structures here are only filled in, they are NOT reset by this
1086 method. If they were not empty before, data will simply be added to
1086 method. If they were not empty before, data will simply be added to
1087 therm.
1087 therm.
1088 """
1088 """
1089 # This function works in two parts: first we put a few things in
1089 # This function works in two parts: first we put a few things in
1090 # user_ns, and we sync that contents into user_ns_hidden so that these
1090 # user_ns, and we sync that contents into user_ns_hidden so that these
1091 # initial variables aren't shown by %who. After the sync, we add the
1091 # initial variables aren't shown by %who. After the sync, we add the
1092 # rest of what we *do* want the user to see with %who even on a new
1092 # rest of what we *do* want the user to see with %who even on a new
1093 # session (probably nothing, so theye really only see their own stuff)
1093 # session (probably nothing, so theye really only see their own stuff)
1094
1094
1095 # The user dict must *always* have a __builtin__ reference to the
1095 # The user dict must *always* have a __builtin__ reference to the
1096 # Python standard __builtin__ namespace, which must be imported.
1096 # Python standard __builtin__ namespace, which must be imported.
1097 # This is so that certain operations in prompt evaluation can be
1097 # This is so that certain operations in prompt evaluation can be
1098 # reliably executed with builtins. Note that we can NOT use
1098 # reliably executed with builtins. Note that we can NOT use
1099 # __builtins__ (note the 's'), because that can either be a dict or a
1099 # __builtins__ (note the 's'), because that can either be a dict or a
1100 # module, and can even mutate at runtime, depending on the context
1100 # module, and can even mutate at runtime, depending on the context
1101 # (Python makes no guarantees on it). In contrast, __builtin__ is
1101 # (Python makes no guarantees on it). In contrast, __builtin__ is
1102 # always a module object, though it must be explicitly imported.
1102 # always a module object, though it must be explicitly imported.
1103
1103
1104 # For more details:
1104 # For more details:
1105 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1105 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1106 ns = dict()
1106 ns = dict()
1107
1107
1108 # Put 'help' in the user namespace
1108 # Put 'help' in the user namespace
1109 try:
1109 try:
1110 from site import _Helper
1110 from site import _Helper
1111 ns['help'] = _Helper()
1111 ns['help'] = _Helper()
1112 except ImportError:
1112 except ImportError:
1113 warn('help() not available - check site.py')
1113 warn('help() not available - check site.py')
1114
1114
1115 # make global variables for user access to the histories
1115 # make global variables for user access to the histories
1116 ns['_ih'] = self.history_manager.input_hist_parsed
1116 ns['_ih'] = self.history_manager.input_hist_parsed
1117 ns['_oh'] = self.history_manager.output_hist
1117 ns['_oh'] = self.history_manager.output_hist
1118 ns['_dh'] = self.history_manager.dir_hist
1118 ns['_dh'] = self.history_manager.dir_hist
1119
1119
1120 ns['_sh'] = shadowns
1120 ns['_sh'] = shadowns
1121
1121
1122 # user aliases to input and output histories. These shouldn't show up
1122 # user aliases to input and output histories. These shouldn't show up
1123 # in %who, as they can have very large reprs.
1123 # in %who, as they can have very large reprs.
1124 ns['In'] = self.history_manager.input_hist_parsed
1124 ns['In'] = self.history_manager.input_hist_parsed
1125 ns['Out'] = self.history_manager.output_hist
1125 ns['Out'] = self.history_manager.output_hist
1126
1126
1127 # Store myself as the public api!!!
1127 # Store myself as the public api!!!
1128 ns['get_ipython'] = self.get_ipython
1128 ns['get_ipython'] = self.get_ipython
1129
1129
1130 ns['exit'] = self.exiter
1130 ns['exit'] = self.exiter
1131 ns['quit'] = self.exiter
1131 ns['quit'] = self.exiter
1132
1132
1133 # Sync what we've added so far to user_ns_hidden so these aren't seen
1133 # Sync what we've added so far to user_ns_hidden so these aren't seen
1134 # by %who
1134 # by %who
1135 self.user_ns_hidden.update(ns)
1135 self.user_ns_hidden.update(ns)
1136
1136
1137 # Anything put into ns now would show up in %who. Think twice before
1137 # Anything put into ns now would show up in %who. Think twice before
1138 # putting anything here, as we really want %who to show the user their
1138 # putting anything here, as we really want %who to show the user their
1139 # stuff, not our variables.
1139 # stuff, not our variables.
1140
1140
1141 # Finally, update the real user's namespace
1141 # Finally, update the real user's namespace
1142 self.user_ns.update(ns)
1142 self.user_ns.update(ns)
1143
1143
1144 @property
1144 @property
1145 def all_ns_refs(self):
1145 def all_ns_refs(self):
1146 """Get a list of references to all the namespace dictionaries in which
1146 """Get a list of references to all the namespace dictionaries in which
1147 IPython might store a user-created object.
1147 IPython might store a user-created object.
1148
1148
1149 Note that this does not include the displayhook, which also caches
1149 Note that this does not include the displayhook, which also caches
1150 objects from the output."""
1150 objects from the output."""
1151 return [self.user_ns, self.user_global_ns,
1151 return [self.user_ns, self.user_global_ns,
1152 self._user_main_module.__dict__] + self._main_ns_cache.values()
1152 self._user_main_module.__dict__] + self._main_ns_cache.values()
1153
1153
1154 def reset(self, new_session=True):
1154 def reset(self, new_session=True):
1155 """Clear all internal namespaces, and attempt to release references to
1155 """Clear all internal namespaces, and attempt to release references to
1156 user objects.
1156 user objects.
1157
1157
1158 If new_session is True, a new history session will be opened.
1158 If new_session is True, a new history session will be opened.
1159 """
1159 """
1160 # Clear histories
1160 # Clear histories
1161 self.history_manager.reset(new_session)
1161 self.history_manager.reset(new_session)
1162 # Reset counter used to index all histories
1162 # Reset counter used to index all histories
1163 if new_session:
1163 if new_session:
1164 self.execution_count = 1
1164 self.execution_count = 1
1165
1165
1166 # Flush cached output items
1166 # Flush cached output items
1167 if self.displayhook.do_full_cache:
1167 if self.displayhook.do_full_cache:
1168 self.displayhook.flush()
1168 self.displayhook.flush()
1169
1169
1170 # The main execution namespaces must be cleared very carefully,
1170 # The main execution namespaces must be cleared very carefully,
1171 # skipping the deletion of the builtin-related keys, because doing so
1171 # skipping the deletion of the builtin-related keys, because doing so
1172 # would cause errors in many object's __del__ methods.
1172 # would cause errors in many object's __del__ methods.
1173 if self.user_ns is not self.user_global_ns:
1173 if self.user_ns is not self.user_global_ns:
1174 self.user_ns.clear()
1174 self.user_ns.clear()
1175 ns = self.user_global_ns
1175 ns = self.user_global_ns
1176 drop_keys = set(ns.keys())
1176 drop_keys = set(ns.keys())
1177 drop_keys.discard('__builtin__')
1177 drop_keys.discard('__builtin__')
1178 drop_keys.discard('__builtins__')
1178 drop_keys.discard('__builtins__')
1179 drop_keys.discard('__name__')
1179 drop_keys.discard('__name__')
1180 for k in drop_keys:
1180 for k in drop_keys:
1181 del ns[k]
1181 del ns[k]
1182
1182
1183 self.user_ns_hidden.clear()
1183 self.user_ns_hidden.clear()
1184
1184
1185 # Restore the user namespaces to minimal usability
1185 # Restore the user namespaces to minimal usability
1186 self.init_user_ns()
1186 self.init_user_ns()
1187
1187
1188 # Restore the default and user aliases
1188 # Restore the default and user aliases
1189 self.alias_manager.clear_aliases()
1189 self.alias_manager.clear_aliases()
1190 self.alias_manager.init_aliases()
1190 self.alias_manager.init_aliases()
1191
1191
1192 # Flush the private list of module references kept for script
1192 # Flush the private list of module references kept for script
1193 # execution protection
1193 # execution protection
1194 self.clear_main_mod_cache()
1194 self.clear_main_mod_cache()
1195
1195
1196 # Clear out the namespace from the last %run
1196 # Clear out the namespace from the last %run
1197 self.new_main_mod()
1197 self.new_main_mod()
1198
1198
1199 def del_var(self, varname, by_name=False):
1199 def del_var(self, varname, by_name=False):
1200 """Delete a variable from the various namespaces, so that, as
1200 """Delete a variable from the various namespaces, so that, as
1201 far as possible, we're not keeping any hidden references to it.
1201 far as possible, we're not keeping any hidden references to it.
1202
1202
1203 Parameters
1203 Parameters
1204 ----------
1204 ----------
1205 varname : str
1205 varname : str
1206 The name of the variable to delete.
1206 The name of the variable to delete.
1207 by_name : bool
1207 by_name : bool
1208 If True, delete variables with the given name in each
1208 If True, delete variables with the given name in each
1209 namespace. If False (default), find the variable in the user
1209 namespace. If False (default), find the variable in the user
1210 namespace, and delete references to it.
1210 namespace, and delete references to it.
1211 """
1211 """
1212 if varname in ('__builtin__', '__builtins__'):
1212 if varname in ('__builtin__', '__builtins__'):
1213 raise ValueError("Refusing to delete %s" % varname)
1213 raise ValueError("Refusing to delete %s" % varname)
1214
1214
1215 ns_refs = self.all_ns_refs
1215 ns_refs = self.all_ns_refs
1216
1216
1217 if by_name: # Delete by name
1217 if by_name: # Delete by name
1218 for ns in ns_refs:
1218 for ns in ns_refs:
1219 try:
1219 try:
1220 del ns[varname]
1220 del ns[varname]
1221 except KeyError:
1221 except KeyError:
1222 pass
1222 pass
1223 else: # Delete by object
1223 else: # Delete by object
1224 try:
1224 try:
1225 obj = self.user_ns[varname]
1225 obj = self.user_ns[varname]
1226 except KeyError:
1226 except KeyError:
1227 raise NameError("name '%s' is not defined" % varname)
1227 raise NameError("name '%s' is not defined" % varname)
1228 # Also check in output history
1228 # Also check in output history
1229 ns_refs.append(self.history_manager.output_hist)
1229 ns_refs.append(self.history_manager.output_hist)
1230 for ns in ns_refs:
1230 for ns in ns_refs:
1231 to_delete = [n for n, o in ns.iteritems() if o is obj]
1231 to_delete = [n for n, o in ns.iteritems() if o is obj]
1232 for name in to_delete:
1232 for name in to_delete:
1233 del ns[name]
1233 del ns[name]
1234
1234
1235 # displayhook keeps extra references, but not in a dictionary
1235 # displayhook keeps extra references, but not in a dictionary
1236 for name in ('_', '__', '___'):
1236 for name in ('_', '__', '___'):
1237 if getattr(self.displayhook, name) is obj:
1237 if getattr(self.displayhook, name) is obj:
1238 setattr(self.displayhook, name, None)
1238 setattr(self.displayhook, name, None)
1239
1239
1240 def reset_selective(self, regex=None):
1240 def reset_selective(self, regex=None):
1241 """Clear selective variables from internal namespaces based on a
1241 """Clear selective variables from internal namespaces based on a
1242 specified regular expression.
1242 specified regular expression.
1243
1243
1244 Parameters
1244 Parameters
1245 ----------
1245 ----------
1246 regex : string or compiled pattern, optional
1246 regex : string or compiled pattern, optional
1247 A regular expression pattern that will be used in searching
1247 A regular expression pattern that will be used in searching
1248 variable names in the users namespaces.
1248 variable names in the users namespaces.
1249 """
1249 """
1250 if regex is not None:
1250 if regex is not None:
1251 try:
1251 try:
1252 m = re.compile(regex)
1252 m = re.compile(regex)
1253 except TypeError:
1253 except TypeError:
1254 raise TypeError('regex must be a string or compiled pattern')
1254 raise TypeError('regex must be a string or compiled pattern')
1255 # Search for keys in each namespace that match the given regex
1255 # Search for keys in each namespace that match the given regex
1256 # If a match is found, delete the key/value pair.
1256 # If a match is found, delete the key/value pair.
1257 for ns in self.all_ns_refs:
1257 for ns in self.all_ns_refs:
1258 for var in ns:
1258 for var in ns:
1259 if m.search(var):
1259 if m.search(var):
1260 del ns[var]
1260 del ns[var]
1261
1261
1262 def push(self, variables, interactive=True):
1262 def push(self, variables, interactive=True):
1263 """Inject a group of variables into the IPython user namespace.
1263 """Inject a group of variables into the IPython user namespace.
1264
1264
1265 Parameters
1265 Parameters
1266 ----------
1266 ----------
1267 variables : dict, str or list/tuple of str
1267 variables : dict, str or list/tuple of str
1268 The variables to inject into the user's namespace. If a dict, a
1268 The variables to inject into the user's namespace. If a dict, a
1269 simple update is done. If a str, the string is assumed to have
1269 simple update is done. If a str, the string is assumed to have
1270 variable names separated by spaces. A list/tuple of str can also
1270 variable names separated by spaces. A list/tuple of str can also
1271 be used to give the variable names. If just the variable names are
1271 be used to give the variable names. If just the variable names are
1272 give (list/tuple/str) then the variable values looked up in the
1272 give (list/tuple/str) then the variable values looked up in the
1273 callers frame.
1273 callers frame.
1274 interactive : bool
1274 interactive : bool
1275 If True (default), the variables will be listed with the ``who``
1275 If True (default), the variables will be listed with the ``who``
1276 magic.
1276 magic.
1277 """
1277 """
1278 vdict = None
1278 vdict = None
1279
1279
1280 # We need a dict of name/value pairs to do namespace updates.
1280 # We need a dict of name/value pairs to do namespace updates.
1281 if isinstance(variables, dict):
1281 if isinstance(variables, dict):
1282 vdict = variables
1282 vdict = variables
1283 elif isinstance(variables, (basestring, list, tuple)):
1283 elif isinstance(variables, (basestring, list, tuple)):
1284 if isinstance(variables, basestring):
1284 if isinstance(variables, basestring):
1285 vlist = variables.split()
1285 vlist = variables.split()
1286 else:
1286 else:
1287 vlist = variables
1287 vlist = variables
1288 vdict = {}
1288 vdict = {}
1289 cf = sys._getframe(1)
1289 cf = sys._getframe(1)
1290 for name in vlist:
1290 for name in vlist:
1291 try:
1291 try:
1292 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1292 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1293 except:
1293 except:
1294 print ('Could not get variable %s from %s' %
1294 print ('Could not get variable %s from %s' %
1295 (name,cf.f_code.co_name))
1295 (name,cf.f_code.co_name))
1296 else:
1296 else:
1297 raise ValueError('variables must be a dict/str/list/tuple')
1297 raise ValueError('variables must be a dict/str/list/tuple')
1298
1298
1299 # Propagate variables to user namespace
1299 # Propagate variables to user namespace
1300 self.user_ns.update(vdict)
1300 self.user_ns.update(vdict)
1301
1301
1302 # And configure interactive visibility
1302 # And configure interactive visibility
1303 user_ns_hidden = self.user_ns_hidden
1303 user_ns_hidden = self.user_ns_hidden
1304 if interactive:
1304 if interactive:
1305 user_ns_hidden.difference_update(vdict)
1305 user_ns_hidden.difference_update(vdict)
1306 else:
1306 else:
1307 user_ns_hidden.update(vdict)
1307 user_ns_hidden.update(vdict)
1308
1308
1309 def drop_by_id(self, variables):
1309 def drop_by_id(self, variables):
1310 """Remove a dict of variables from the user namespace, if they are the
1310 """Remove a dict of variables from the user namespace, if they are the
1311 same as the values in the dictionary.
1311 same as the values in the dictionary.
1312
1312
1313 This is intended for use by extensions: variables that they've added can
1313 This is intended for use by extensions: variables that they've added can
1314 be taken back out if they are unloaded, without removing any that the
1314 be taken back out if they are unloaded, without removing any that the
1315 user has overwritten.
1315 user has overwritten.
1316
1316
1317 Parameters
1317 Parameters
1318 ----------
1318 ----------
1319 variables : dict
1319 variables : dict
1320 A dictionary mapping object names (as strings) to the objects.
1320 A dictionary mapping object names (as strings) to the objects.
1321 """
1321 """
1322 for name, obj in variables.iteritems():
1322 for name, obj in variables.iteritems():
1323 if name in self.user_ns and self.user_ns[name] is obj:
1323 if name in self.user_ns and self.user_ns[name] is obj:
1324 del self.user_ns[name]
1324 del self.user_ns[name]
1325 self.user_ns_hidden.discard(name)
1325 self.user_ns_hidden.discard(name)
1326
1326
1327 #-------------------------------------------------------------------------
1327 #-------------------------------------------------------------------------
1328 # Things related to object introspection
1328 # Things related to object introspection
1329 #-------------------------------------------------------------------------
1329 #-------------------------------------------------------------------------
1330
1330
1331 def _ofind(self, oname, namespaces=None):
1331 def _ofind(self, oname, namespaces=None):
1332 """Find an object in the available namespaces.
1332 """Find an object in the available namespaces.
1333
1333
1334 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1334 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1335
1335
1336 Has special code to detect magic functions.
1336 Has special code to detect magic functions.
1337 """
1337 """
1338 oname = oname.strip()
1338 oname = oname.strip()
1339 #print '1- oname: <%r>' % oname # dbg
1339 #print '1- oname: <%r>' % oname # dbg
1340 if not py3compat.isidentifier(oname.lstrip(ESC_MAGIC), dotted=True):
1340 if not py3compat.isidentifier(oname.lstrip(ESC_MAGIC), dotted=True):
1341 return dict(found=False)
1341 return dict(found=False)
1342
1342
1343 alias_ns = None
1343 alias_ns = None
1344 if namespaces is None:
1344 if namespaces is None:
1345 # Namespaces to search in:
1345 # Namespaces to search in:
1346 # Put them in a list. The order is important so that we
1346 # Put them in a list. The order is important so that we
1347 # find things in the same order that Python finds them.
1347 # find things in the same order that Python finds them.
1348 namespaces = [ ('Interactive', self.user_ns),
1348 namespaces = [ ('Interactive', self.user_ns),
1349 ('Interactive (global)', self.user_global_ns),
1349 ('Interactive (global)', self.user_global_ns),
1350 ('Python builtin', builtin_mod.__dict__),
1350 ('Python builtin', builtin_mod.__dict__),
1351 ('Alias', self.alias_manager.alias_table),
1351 ('Alias', self.alias_manager.alias_table),
1352 ]
1352 ]
1353 alias_ns = self.alias_manager.alias_table
1353 alias_ns = self.alias_manager.alias_table
1354
1354
1355 # initialize results to 'null'
1355 # initialize results to 'null'
1356 found = False; obj = None; ospace = None; ds = None;
1356 found = False; obj = None; ospace = None; ds = None;
1357 ismagic = False; isalias = False; parent = None
1357 ismagic = False; isalias = False; parent = None
1358
1358
1359 # We need to special-case 'print', which as of python2.6 registers as a
1359 # We need to special-case 'print', which as of python2.6 registers as a
1360 # function but should only be treated as one if print_function was
1360 # function but should only be treated as one if print_function was
1361 # loaded with a future import. In this case, just bail.
1361 # loaded with a future import. In this case, just bail.
1362 if (oname == 'print' and not py3compat.PY3 and not \
1362 if (oname == 'print' and not py3compat.PY3 and not \
1363 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1363 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1364 return {'found':found, 'obj':obj, 'namespace':ospace,
1364 return {'found':found, 'obj':obj, 'namespace':ospace,
1365 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1365 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1366
1366
1367 # Look for the given name by splitting it in parts. If the head is
1367 # Look for the given name by splitting it in parts. If the head is
1368 # found, then we look for all the remaining parts as members, and only
1368 # found, then we look for all the remaining parts as members, and only
1369 # declare success if we can find them all.
1369 # declare success if we can find them all.
1370 oname_parts = oname.split('.')
1370 oname_parts = oname.split('.')
1371 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1371 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1372 for nsname,ns in namespaces:
1372 for nsname,ns in namespaces:
1373 try:
1373 try:
1374 obj = ns[oname_head]
1374 obj = ns[oname_head]
1375 except KeyError:
1375 except KeyError:
1376 continue
1376 continue
1377 else:
1377 else:
1378 #print 'oname_rest:', oname_rest # dbg
1378 #print 'oname_rest:', oname_rest # dbg
1379 for part in oname_rest:
1379 for part in oname_rest:
1380 try:
1380 try:
1381 parent = obj
1381 parent = obj
1382 obj = getattr(obj,part)
1382 obj = getattr(obj,part)
1383 except:
1383 except:
1384 # Blanket except b/c some badly implemented objects
1384 # Blanket except b/c some badly implemented objects
1385 # allow __getattr__ to raise exceptions other than
1385 # allow __getattr__ to raise exceptions other than
1386 # AttributeError, which then crashes IPython.
1386 # AttributeError, which then crashes IPython.
1387 break
1387 break
1388 else:
1388 else:
1389 # If we finish the for loop (no break), we got all members
1389 # If we finish the for loop (no break), we got all members
1390 found = True
1390 found = True
1391 ospace = nsname
1391 ospace = nsname
1392 if ns == alias_ns:
1392 if ns == alias_ns:
1393 isalias = True
1393 isalias = True
1394 break # namespace loop
1394 break # namespace loop
1395
1395
1396 # Try to see if it's magic
1396 # Try to see if it's magic
1397 if not found:
1397 if not found:
1398 if oname.startswith(ESC_MAGIC):
1398 if oname.startswith(ESC_MAGIC):
1399 oname = oname[1:]
1399 oname = oname[1:]
1400 obj = self.find_magic(oname)
1400 obj = self.find_magic(oname)
1401 if obj is not None:
1401 if obj is not None:
1402 found = True
1402 found = True
1403 ospace = 'IPython internal'
1403 ospace = 'IPython internal'
1404 ismagic = True
1404 ismagic = True
1405
1405
1406 # Last try: special-case some literals like '', [], {}, etc:
1406 # Last try: special-case some literals like '', [], {}, etc:
1407 if not found and oname_head in ["''",'""','[]','{}','()']:
1407 if not found and oname_head in ["''",'""','[]','{}','()']:
1408 obj = eval(oname_head)
1408 obj = eval(oname_head)
1409 found = True
1409 found = True
1410 ospace = 'Interactive'
1410 ospace = 'Interactive'
1411
1411
1412 return {'found':found, 'obj':obj, 'namespace':ospace,
1412 return {'found':found, 'obj':obj, 'namespace':ospace,
1413 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1413 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1414
1414
1415 def _ofind_property(self, oname, info):
1415 def _ofind_property(self, oname, info):
1416 """Second part of object finding, to look for property details."""
1416 """Second part of object finding, to look for property details."""
1417 if info.found:
1417 if info.found:
1418 # Get the docstring of the class property if it exists.
1418 # Get the docstring of the class property if it exists.
1419 path = oname.split('.')
1419 path = oname.split('.')
1420 root = '.'.join(path[:-1])
1420 root = '.'.join(path[:-1])
1421 if info.parent is not None:
1421 if info.parent is not None:
1422 try:
1422 try:
1423 target = getattr(info.parent, '__class__')
1423 target = getattr(info.parent, '__class__')
1424 # The object belongs to a class instance.
1424 # The object belongs to a class instance.
1425 try:
1425 try:
1426 target = getattr(target, path[-1])
1426 target = getattr(target, path[-1])
1427 # The class defines the object.
1427 # The class defines the object.
1428 if isinstance(target, property):
1428 if isinstance(target, property):
1429 oname = root + '.__class__.' + path[-1]
1429 oname = root + '.__class__.' + path[-1]
1430 info = Struct(self._ofind(oname))
1430 info = Struct(self._ofind(oname))
1431 except AttributeError: pass
1431 except AttributeError: pass
1432 except AttributeError: pass
1432 except AttributeError: pass
1433
1433
1434 # We return either the new info or the unmodified input if the object
1434 # We return either the new info or the unmodified input if the object
1435 # hadn't been found
1435 # hadn't been found
1436 return info
1436 return info
1437
1437
1438 def _object_find(self, oname, namespaces=None):
1438 def _object_find(self, oname, namespaces=None):
1439 """Find an object and return a struct with info about it."""
1439 """Find an object and return a struct with info about it."""
1440 inf = Struct(self._ofind(oname, namespaces))
1440 inf = Struct(self._ofind(oname, namespaces))
1441 return Struct(self._ofind_property(oname, inf))
1441 return Struct(self._ofind_property(oname, inf))
1442
1442
1443 def _inspect(self, meth, oname, namespaces=None, **kw):
1443 def _inspect(self, meth, oname, namespaces=None, **kw):
1444 """Generic interface to the inspector system.
1444 """Generic interface to the inspector system.
1445
1445
1446 This function is meant to be called by pdef, pdoc & friends."""
1446 This function is meant to be called by pdef, pdoc & friends."""
1447 info = self._object_find(oname)
1447 info = self._object_find(oname)
1448 if info.found:
1448 if info.found:
1449 pmethod = getattr(self.inspector, meth)
1449 pmethod = getattr(self.inspector, meth)
1450 formatter = format_screen if info.ismagic else None
1450 formatter = format_screen if info.ismagic else None
1451 if meth == 'pdoc':
1451 if meth == 'pdoc':
1452 pmethod(info.obj, oname, formatter)
1452 pmethod(info.obj, oname, formatter)
1453 elif meth == 'pinfo':
1453 elif meth == 'pinfo':
1454 pmethod(info.obj, oname, formatter, info, **kw)
1454 pmethod(info.obj, oname, formatter, info, **kw)
1455 else:
1455 else:
1456 pmethod(info.obj, oname)
1456 pmethod(info.obj, oname)
1457 else:
1457 else:
1458 print 'Object `%s` not found.' % oname
1458 print 'Object `%s` not found.' % oname
1459 return 'not found' # so callers can take other action
1459 return 'not found' # so callers can take other action
1460
1460
1461 def object_inspect(self, oname, detail_level=0):
1461 def object_inspect(self, oname, detail_level=0):
1462 with self.builtin_trap:
1462 with self.builtin_trap:
1463 info = self._object_find(oname)
1463 info = self._object_find(oname)
1464 if info.found:
1464 if info.found:
1465 return self.inspector.info(info.obj, oname, info=info,
1465 return self.inspector.info(info.obj, oname, info=info,
1466 detail_level=detail_level
1466 detail_level=detail_level
1467 )
1467 )
1468 else:
1468 else:
1469 return oinspect.object_info(name=oname, found=False)
1469 return oinspect.object_info(name=oname, found=False)
1470
1470
1471 #-------------------------------------------------------------------------
1471 #-------------------------------------------------------------------------
1472 # Things related to history management
1472 # Things related to history management
1473 #-------------------------------------------------------------------------
1473 #-------------------------------------------------------------------------
1474
1474
1475 def init_history(self):
1475 def init_history(self):
1476 """Sets up the command history, and starts regular autosaves."""
1476 """Sets up the command history, and starts regular autosaves."""
1477 self.history_manager = HistoryManager(shell=self, config=self.config)
1477 self.history_manager = HistoryManager(shell=self, config=self.config)
1478 self.configurables.append(self.history_manager)
1478 self.configurables.append(self.history_manager)
1479
1479
1480 #-------------------------------------------------------------------------
1480 #-------------------------------------------------------------------------
1481 # Things related to exception handling and tracebacks (not debugging)
1481 # Things related to exception handling and tracebacks (not debugging)
1482 #-------------------------------------------------------------------------
1482 #-------------------------------------------------------------------------
1483
1483
1484 def init_traceback_handlers(self, custom_exceptions):
1484 def init_traceback_handlers(self, custom_exceptions):
1485 # Syntax error handler.
1485 # Syntax error handler.
1486 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1486 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1487
1487
1488 # The interactive one is initialized with an offset, meaning we always
1488 # The interactive one is initialized with an offset, meaning we always
1489 # want to remove the topmost item in the traceback, which is our own
1489 # want to remove the topmost item in the traceback, which is our own
1490 # internal code. Valid modes: ['Plain','Context','Verbose']
1490 # internal code. Valid modes: ['Plain','Context','Verbose']
1491 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1491 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1492 color_scheme='NoColor',
1492 color_scheme='NoColor',
1493 tb_offset = 1,
1493 tb_offset = 1,
1494 check_cache=self.compile.check_cache)
1494 check_cache=self.compile.check_cache)
1495
1495
1496 # The instance will store a pointer to the system-wide exception hook,
1496 # The instance will store a pointer to the system-wide exception hook,
1497 # so that runtime code (such as magics) can access it. This is because
1497 # so that runtime code (such as magics) can access it. This is because
1498 # during the read-eval loop, it may get temporarily overwritten.
1498 # during the read-eval loop, it may get temporarily overwritten.
1499 self.sys_excepthook = sys.excepthook
1499 self.sys_excepthook = sys.excepthook
1500
1500
1501 # and add any custom exception handlers the user may have specified
1501 # and add any custom exception handlers the user may have specified
1502 self.set_custom_exc(*custom_exceptions)
1502 self.set_custom_exc(*custom_exceptions)
1503
1503
1504 # Set the exception mode
1504 # Set the exception mode
1505 self.InteractiveTB.set_mode(mode=self.xmode)
1505 self.InteractiveTB.set_mode(mode=self.xmode)
1506
1506
1507 def set_custom_exc(self, exc_tuple, handler):
1507 def set_custom_exc(self, exc_tuple, handler):
1508 """set_custom_exc(exc_tuple,handler)
1508 """set_custom_exc(exc_tuple,handler)
1509
1509
1510 Set a custom exception handler, which will be called if any of the
1510 Set a custom exception handler, which will be called if any of the
1511 exceptions in exc_tuple occur in the mainloop (specifically, in the
1511 exceptions in exc_tuple occur in the mainloop (specifically, in the
1512 run_code() method).
1512 run_code() method).
1513
1513
1514 Parameters
1514 Parameters
1515 ----------
1515 ----------
1516
1516
1517 exc_tuple : tuple of exception classes
1517 exc_tuple : tuple of exception classes
1518 A *tuple* of exception classes, for which to call the defined
1518 A *tuple* of exception classes, for which to call the defined
1519 handler. It is very important that you use a tuple, and NOT A
1519 handler. It is very important that you use a tuple, and NOT A
1520 LIST here, because of the way Python's except statement works. If
1520 LIST here, because of the way Python's except statement works. If
1521 you only want to trap a single exception, use a singleton tuple::
1521 you only want to trap a single exception, use a singleton tuple::
1522
1522
1523 exc_tuple == (MyCustomException,)
1523 exc_tuple == (MyCustomException,)
1524
1524
1525 handler : callable
1525 handler : callable
1526 handler must have the following signature::
1526 handler must have the following signature::
1527
1527
1528 def my_handler(self, etype, value, tb, tb_offset=None):
1528 def my_handler(self, etype, value, tb, tb_offset=None):
1529 ...
1529 ...
1530 return structured_traceback
1530 return structured_traceback
1531
1531
1532 Your handler must return a structured traceback (a list of strings),
1532 Your handler must return a structured traceback (a list of strings),
1533 or None.
1533 or None.
1534
1534
1535 This will be made into an instance method (via types.MethodType)
1535 This will be made into an instance method (via types.MethodType)
1536 of IPython itself, and it will be called if any of the exceptions
1536 of IPython itself, and it will be called if any of the exceptions
1537 listed in the exc_tuple are caught. If the handler is None, an
1537 listed in the exc_tuple are caught. If the handler is None, an
1538 internal basic one is used, which just prints basic info.
1538 internal basic one is used, which just prints basic info.
1539
1539
1540 To protect IPython from crashes, if your handler ever raises an
1540 To protect IPython from crashes, if your handler ever raises an
1541 exception or returns an invalid result, it will be immediately
1541 exception or returns an invalid result, it will be immediately
1542 disabled.
1542 disabled.
1543
1543
1544 WARNING: by putting in your own exception handler into IPython's main
1544 WARNING: by putting in your own exception handler into IPython's main
1545 execution loop, you run a very good chance of nasty crashes. This
1545 execution loop, you run a very good chance of nasty crashes. This
1546 facility should only be used if you really know what you are doing."""
1546 facility should only be used if you really know what you are doing."""
1547
1547
1548 assert type(exc_tuple)==type(()) , \
1548 assert type(exc_tuple)==type(()) , \
1549 "The custom exceptions must be given AS A TUPLE."
1549 "The custom exceptions must be given AS A TUPLE."
1550
1550
1551 def dummy_handler(self,etype,value,tb,tb_offset=None):
1551 def dummy_handler(self,etype,value,tb,tb_offset=None):
1552 print '*** Simple custom exception handler ***'
1552 print '*** Simple custom exception handler ***'
1553 print 'Exception type :',etype
1553 print 'Exception type :',etype
1554 print 'Exception value:',value
1554 print 'Exception value:',value
1555 print 'Traceback :',tb
1555 print 'Traceback :',tb
1556 #print 'Source code :','\n'.join(self.buffer)
1556 #print 'Source code :','\n'.join(self.buffer)
1557
1557
1558 def validate_stb(stb):
1558 def validate_stb(stb):
1559 """validate structured traceback return type
1559 """validate structured traceback return type
1560
1560
1561 return type of CustomTB *should* be a list of strings, but allow
1561 return type of CustomTB *should* be a list of strings, but allow
1562 single strings or None, which are harmless.
1562 single strings or None, which are harmless.
1563
1563
1564 This function will *always* return a list of strings,
1564 This function will *always* return a list of strings,
1565 and will raise a TypeError if stb is inappropriate.
1565 and will raise a TypeError if stb is inappropriate.
1566 """
1566 """
1567 msg = "CustomTB must return list of strings, not %r" % stb
1567 msg = "CustomTB must return list of strings, not %r" % stb
1568 if stb is None:
1568 if stb is None:
1569 return []
1569 return []
1570 elif isinstance(stb, basestring):
1570 elif isinstance(stb, basestring):
1571 return [stb]
1571 return [stb]
1572 elif not isinstance(stb, list):
1572 elif not isinstance(stb, list):
1573 raise TypeError(msg)
1573 raise TypeError(msg)
1574 # it's a list
1574 # it's a list
1575 for line in stb:
1575 for line in stb:
1576 # check every element
1576 # check every element
1577 if not isinstance(line, basestring):
1577 if not isinstance(line, basestring):
1578 raise TypeError(msg)
1578 raise TypeError(msg)
1579 return stb
1579 return stb
1580
1580
1581 if handler is None:
1581 if handler is None:
1582 wrapped = dummy_handler
1582 wrapped = dummy_handler
1583 else:
1583 else:
1584 def wrapped(self,etype,value,tb,tb_offset=None):
1584 def wrapped(self,etype,value,tb,tb_offset=None):
1585 """wrap CustomTB handler, to protect IPython from user code
1585 """wrap CustomTB handler, to protect IPython from user code
1586
1586
1587 This makes it harder (but not impossible) for custom exception
1587 This makes it harder (but not impossible) for custom exception
1588 handlers to crash IPython.
1588 handlers to crash IPython.
1589 """
1589 """
1590 try:
1590 try:
1591 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1591 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1592 return validate_stb(stb)
1592 return validate_stb(stb)
1593 except:
1593 except:
1594 # clear custom handler immediately
1594 # clear custom handler immediately
1595 self.set_custom_exc((), None)
1595 self.set_custom_exc((), None)
1596 print >> io.stderr, "Custom TB Handler failed, unregistering"
1596 print >> io.stderr, "Custom TB Handler failed, unregistering"
1597 # show the exception in handler first
1597 # show the exception in handler first
1598 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1598 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1599 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1599 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1600 print >> io.stdout, "The original exception:"
1600 print >> io.stdout, "The original exception:"
1601 stb = self.InteractiveTB.structured_traceback(
1601 stb = self.InteractiveTB.structured_traceback(
1602 (etype,value,tb), tb_offset=tb_offset
1602 (etype,value,tb), tb_offset=tb_offset
1603 )
1603 )
1604 return stb
1604 return stb
1605
1605
1606 self.CustomTB = types.MethodType(wrapped,self)
1606 self.CustomTB = types.MethodType(wrapped,self)
1607 self.custom_exceptions = exc_tuple
1607 self.custom_exceptions = exc_tuple
1608
1608
1609 def excepthook(self, etype, value, tb):
1609 def excepthook(self, etype, value, tb):
1610 """One more defense for GUI apps that call sys.excepthook.
1610 """One more defense for GUI apps that call sys.excepthook.
1611
1611
1612 GUI frameworks like wxPython trap exceptions and call
1612 GUI frameworks like wxPython trap exceptions and call
1613 sys.excepthook themselves. I guess this is a feature that
1613 sys.excepthook themselves. I guess this is a feature that
1614 enables them to keep running after exceptions that would
1614 enables them to keep running after exceptions that would
1615 otherwise kill their mainloop. This is a bother for IPython
1615 otherwise kill their mainloop. This is a bother for IPython
1616 which excepts to catch all of the program exceptions with a try:
1616 which excepts to catch all of the program exceptions with a try:
1617 except: statement.
1617 except: statement.
1618
1618
1619 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1619 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1620 any app directly invokes sys.excepthook, it will look to the user like
1620 any app directly invokes sys.excepthook, it will look to the user like
1621 IPython crashed. In order to work around this, we can disable the
1621 IPython crashed. In order to work around this, we can disable the
1622 CrashHandler and replace it with this excepthook instead, which prints a
1622 CrashHandler and replace it with this excepthook instead, which prints a
1623 regular traceback using our InteractiveTB. In this fashion, apps which
1623 regular traceback using our InteractiveTB. In this fashion, apps which
1624 call sys.excepthook will generate a regular-looking exception from
1624 call sys.excepthook will generate a regular-looking exception from
1625 IPython, and the CrashHandler will only be triggered by real IPython
1625 IPython, and the CrashHandler will only be triggered by real IPython
1626 crashes.
1626 crashes.
1627
1627
1628 This hook should be used sparingly, only in places which are not likely
1628 This hook should be used sparingly, only in places which are not likely
1629 to be true IPython errors.
1629 to be true IPython errors.
1630 """
1630 """
1631 self.showtraceback((etype,value,tb),tb_offset=0)
1631 self.showtraceback((etype,value,tb),tb_offset=0)
1632
1632
1633 def _get_exc_info(self, exc_tuple=None):
1633 def _get_exc_info(self, exc_tuple=None):
1634 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1634 """get exc_info from a given tuple, sys.exc_info() or sys.last_type etc.
1635
1635
1636 Ensures sys.last_type,value,traceback hold the exc_info we found,
1636 Ensures sys.last_type,value,traceback hold the exc_info we found,
1637 from whichever source.
1637 from whichever source.
1638
1638
1639 raises ValueError if none of these contain any information
1639 raises ValueError if none of these contain any information
1640 """
1640 """
1641 if exc_tuple is None:
1641 if exc_tuple is None:
1642 etype, value, tb = sys.exc_info()
1642 etype, value, tb = sys.exc_info()
1643 else:
1643 else:
1644 etype, value, tb = exc_tuple
1644 etype, value, tb = exc_tuple
1645
1645
1646 if etype is None:
1646 if etype is None:
1647 if hasattr(sys, 'last_type'):
1647 if hasattr(sys, 'last_type'):
1648 etype, value, tb = sys.last_type, sys.last_value, \
1648 etype, value, tb = sys.last_type, sys.last_value, \
1649 sys.last_traceback
1649 sys.last_traceback
1650
1650
1651 if etype is None:
1651 if etype is None:
1652 raise ValueError("No exception to find")
1652 raise ValueError("No exception to find")
1653
1653
1654 # Now store the exception info in sys.last_type etc.
1654 # Now store the exception info in sys.last_type etc.
1655 # WARNING: these variables are somewhat deprecated and not
1655 # WARNING: these variables are somewhat deprecated and not
1656 # necessarily safe to use in a threaded environment, but tools
1656 # necessarily safe to use in a threaded environment, but tools
1657 # like pdb depend on their existence, so let's set them. If we
1657 # like pdb depend on their existence, so let's set them. If we
1658 # find problems in the field, we'll need to revisit their use.
1658 # find problems in the field, we'll need to revisit their use.
1659 sys.last_type = etype
1659 sys.last_type = etype
1660 sys.last_value = value
1660 sys.last_value = value
1661 sys.last_traceback = tb
1661 sys.last_traceback = tb
1662
1662
1663 return etype, value, tb
1663 return etype, value, tb
1664
1664
1665
1665
1666 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1666 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1667 exception_only=False):
1667 exception_only=False):
1668 """Display the exception that just occurred.
1668 """Display the exception that just occurred.
1669
1669
1670 If nothing is known about the exception, this is the method which
1670 If nothing is known about the exception, this is the method which
1671 should be used throughout the code for presenting user tracebacks,
1671 should be used throughout the code for presenting user tracebacks,
1672 rather than directly invoking the InteractiveTB object.
1672 rather than directly invoking the InteractiveTB object.
1673
1673
1674 A specific showsyntaxerror() also exists, but this method can take
1674 A specific showsyntaxerror() also exists, but this method can take
1675 care of calling it if needed, so unless you are explicitly catching a
1675 care of calling it if needed, so unless you are explicitly catching a
1676 SyntaxError exception, don't try to analyze the stack manually and
1676 SyntaxError exception, don't try to analyze the stack manually and
1677 simply call this method."""
1677 simply call this method."""
1678
1678
1679 try:
1679 try:
1680 try:
1680 try:
1681 etype, value, tb = self._get_exc_info(exc_tuple)
1681 etype, value, tb = self._get_exc_info(exc_tuple)
1682 except ValueError:
1682 except ValueError:
1683 self.write_err('No traceback available to show.\n')
1683 self.write_err('No traceback available to show.\n')
1684 return
1684 return
1685
1685
1686 if etype is SyntaxError:
1686 if etype is SyntaxError:
1687 # Though this won't be called by syntax errors in the input
1687 # Though this won't be called by syntax errors in the input
1688 # line, there may be SyntaxError cases with imported code.
1688 # line, there may be SyntaxError cases with imported code.
1689 self.showsyntaxerror(filename)
1689 self.showsyntaxerror(filename)
1690 elif etype is UsageError:
1690 elif etype is UsageError:
1691 self.write_err("UsageError: %s" % value)
1691 self.write_err("UsageError: %s" % value)
1692 else:
1692 else:
1693 if etype in self.custom_exceptions:
1693 if etype in self.custom_exceptions:
1694 stb = self.CustomTB(etype, value, tb, tb_offset)
1694 stb = self.CustomTB(etype, value, tb, tb_offset)
1695 else:
1695 else:
1696 if exception_only:
1696 if exception_only:
1697 stb = ['An exception has occurred, use %tb to see '
1697 stb = ['An exception has occurred, use %tb to see '
1698 'the full traceback.\n']
1698 'the full traceback.\n']
1699 stb.extend(self.InteractiveTB.get_exception_only(etype,
1699 stb.extend(self.InteractiveTB.get_exception_only(etype,
1700 value))
1700 value))
1701 else:
1701 else:
1702 stb = self.InteractiveTB.structured_traceback(etype,
1702 stb = self.InteractiveTB.structured_traceback(etype,
1703 value, tb, tb_offset=tb_offset)
1703 value, tb, tb_offset=tb_offset)
1704
1704
1705 self._showtraceback(etype, value, stb)
1705 self._showtraceback(etype, value, stb)
1706 if self.call_pdb:
1706 if self.call_pdb:
1707 # drop into debugger
1707 # drop into debugger
1708 self.debugger(force=True)
1708 self.debugger(force=True)
1709 return
1709 return
1710
1710
1711 # Actually show the traceback
1711 # Actually show the traceback
1712 self._showtraceback(etype, value, stb)
1712 self._showtraceback(etype, value, stb)
1713
1713
1714 except KeyboardInterrupt:
1714 except KeyboardInterrupt:
1715 self.write_err("\nKeyboardInterrupt\n")
1715 self.write_err("\nKeyboardInterrupt\n")
1716
1716
1717 def _showtraceback(self, etype, evalue, stb):
1717 def _showtraceback(self, etype, evalue, stb):
1718 """Actually show a traceback.
1718 """Actually show a traceback.
1719
1719
1720 Subclasses may override this method to put the traceback on a different
1720 Subclasses may override this method to put the traceback on a different
1721 place, like a side channel.
1721 place, like a side channel.
1722 """
1722 """
1723 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1723 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1724
1724
1725 def showsyntaxerror(self, filename=None):
1725 def showsyntaxerror(self, filename=None):
1726 """Display the syntax error that just occurred.
1726 """Display the syntax error that just occurred.
1727
1727
1728 This doesn't display a stack trace because there isn't one.
1728 This doesn't display a stack trace because there isn't one.
1729
1729
1730 If a filename is given, it is stuffed in the exception instead
1730 If a filename is given, it is stuffed in the exception instead
1731 of what was there before (because Python's parser always uses
1731 of what was there before (because Python's parser always uses
1732 "<string>" when reading from a string).
1732 "<string>" when reading from a string).
1733 """
1733 """
1734 etype, value, last_traceback = self._get_exc_info()
1734 etype, value, last_traceback = self._get_exc_info()
1735
1735
1736 if filename and etype is SyntaxError:
1736 if filename and etype is SyntaxError:
1737 try:
1737 try:
1738 value.filename = filename
1738 value.filename = filename
1739 except:
1739 except:
1740 # Not the format we expect; leave it alone
1740 # Not the format we expect; leave it alone
1741 pass
1741 pass
1742
1742
1743 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1743 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1744 self._showtraceback(etype, value, stb)
1744 self._showtraceback(etype, value, stb)
1745
1745
1746 # This is overridden in TerminalInteractiveShell to show a message about
1746 # This is overridden in TerminalInteractiveShell to show a message about
1747 # the %paste magic.
1747 # the %paste magic.
1748 def showindentationerror(self):
1748 def showindentationerror(self):
1749 """Called by run_cell when there's an IndentationError in code entered
1749 """Called by run_cell when there's an IndentationError in code entered
1750 at the prompt.
1750 at the prompt.
1751
1751
1752 This is overridden in TerminalInteractiveShell to show a message about
1752 This is overridden in TerminalInteractiveShell to show a message about
1753 the %paste magic."""
1753 the %paste magic."""
1754 self.showsyntaxerror()
1754 self.showsyntaxerror()
1755
1755
1756 #-------------------------------------------------------------------------
1756 #-------------------------------------------------------------------------
1757 # Things related to readline
1757 # Things related to readline
1758 #-------------------------------------------------------------------------
1758 #-------------------------------------------------------------------------
1759
1759
1760 def init_readline(self):
1760 def init_readline(self):
1761 """Command history completion/saving/reloading."""
1761 """Command history completion/saving/reloading."""
1762
1762
1763 if self.readline_use:
1763 if self.readline_use:
1764 import IPython.utils.rlineimpl as readline
1764 import IPython.utils.rlineimpl as readline
1765
1765
1766 self.rl_next_input = None
1766 self.rl_next_input = None
1767 self.rl_do_indent = False
1767 self.rl_do_indent = False
1768
1768
1769 if not self.readline_use or not readline.have_readline:
1769 if not self.readline_use or not readline.have_readline:
1770 self.has_readline = False
1770 self.has_readline = False
1771 self.readline = None
1771 self.readline = None
1772 # Set a number of methods that depend on readline to be no-op
1772 # Set a number of methods that depend on readline to be no-op
1773 self.readline_no_record = no_op_context
1773 self.readline_no_record = no_op_context
1774 self.set_readline_completer = no_op
1774 self.set_readline_completer = no_op
1775 self.set_custom_completer = no_op
1775 self.set_custom_completer = no_op
1776 self.set_completer_frame = no_op
1776 self.set_completer_frame = no_op
1777 if self.readline_use:
1777 if self.readline_use:
1778 warn('Readline services not available or not loaded.')
1778 warn('Readline services not available or not loaded.')
1779 else:
1779 else:
1780 self.has_readline = True
1780 self.has_readline = True
1781 self.readline = readline
1781 self.readline = readline
1782 sys.modules['readline'] = readline
1782 sys.modules['readline'] = readline
1783
1783
1784 # Platform-specific configuration
1784 # Platform-specific configuration
1785 if os.name == 'nt':
1785 if os.name == 'nt':
1786 # FIXME - check with Frederick to see if we can harmonize
1786 # FIXME - check with Frederick to see if we can harmonize
1787 # naming conventions with pyreadline to avoid this
1787 # naming conventions with pyreadline to avoid this
1788 # platform-dependent check
1788 # platform-dependent check
1789 self.readline_startup_hook = readline.set_pre_input_hook
1789 self.readline_startup_hook = readline.set_pre_input_hook
1790 else:
1790 else:
1791 self.readline_startup_hook = readline.set_startup_hook
1791 self.readline_startup_hook = readline.set_startup_hook
1792
1792
1793 # Load user's initrc file (readline config)
1793 # Load user's initrc file (readline config)
1794 # Or if libedit is used, load editrc.
1794 # Or if libedit is used, load editrc.
1795 inputrc_name = os.environ.get('INPUTRC')
1795 inputrc_name = os.environ.get('INPUTRC')
1796 if inputrc_name is None:
1796 if inputrc_name is None:
1797 inputrc_name = '.inputrc'
1797 inputrc_name = '.inputrc'
1798 if readline.uses_libedit:
1798 if readline.uses_libedit:
1799 inputrc_name = '.editrc'
1799 inputrc_name = '.editrc'
1800 inputrc_name = os.path.join(self.home_dir, inputrc_name)
1800 inputrc_name = os.path.join(self.home_dir, inputrc_name)
1801 if os.path.isfile(inputrc_name):
1801 if os.path.isfile(inputrc_name):
1802 try:
1802 try:
1803 readline.read_init_file(inputrc_name)
1803 readline.read_init_file(inputrc_name)
1804 except:
1804 except:
1805 warn('Problems reading readline initialization file <%s>'
1805 warn('Problems reading readline initialization file <%s>'
1806 % inputrc_name)
1806 % inputrc_name)
1807
1807
1808 # Configure readline according to user's prefs
1808 # Configure readline according to user's prefs
1809 # This is only done if GNU readline is being used. If libedit
1809 # This is only done if GNU readline is being used. If libedit
1810 # is being used (as on Leopard) the readline config is
1810 # is being used (as on Leopard) the readline config is
1811 # not run as the syntax for libedit is different.
1811 # not run as the syntax for libedit is different.
1812 if not readline.uses_libedit:
1812 if not readline.uses_libedit:
1813 for rlcommand in self.readline_parse_and_bind:
1813 for rlcommand in self.readline_parse_and_bind:
1814 #print "loading rl:",rlcommand # dbg
1814 #print "loading rl:",rlcommand # dbg
1815 readline.parse_and_bind(rlcommand)
1815 readline.parse_and_bind(rlcommand)
1816
1816
1817 # Remove some chars from the delimiters list. If we encounter
1817 # Remove some chars from the delimiters list. If we encounter
1818 # unicode chars, discard them.
1818 # unicode chars, discard them.
1819 delims = readline.get_completer_delims()
1819 delims = readline.get_completer_delims()
1820 if not py3compat.PY3:
1820 if not py3compat.PY3:
1821 delims = delims.encode("ascii", "ignore")
1821 delims = delims.encode("ascii", "ignore")
1822 for d in self.readline_remove_delims:
1822 for d in self.readline_remove_delims:
1823 delims = delims.replace(d, "")
1823 delims = delims.replace(d, "")
1824 delims = delims.replace(ESC_MAGIC, '')
1824 delims = delims.replace(ESC_MAGIC, '')
1825 readline.set_completer_delims(delims)
1825 readline.set_completer_delims(delims)
1826 # otherwise we end up with a monster history after a while:
1826 # otherwise we end up with a monster history after a while:
1827 readline.set_history_length(self.history_length)
1827 readline.set_history_length(self.history_length)
1828
1828
1829 self.refill_readline_hist()
1829 self.refill_readline_hist()
1830 self.readline_no_record = ReadlineNoRecord(self)
1830 self.readline_no_record = ReadlineNoRecord(self)
1831
1831
1832 # Configure auto-indent for all platforms
1832 # Configure auto-indent for all platforms
1833 self.set_autoindent(self.autoindent)
1833 self.set_autoindent(self.autoindent)
1834
1834
1835 def refill_readline_hist(self):
1835 def refill_readline_hist(self):
1836 # Load the last 1000 lines from history
1836 # Load the last 1000 lines from history
1837 self.readline.clear_history()
1837 self.readline.clear_history()
1838 stdin_encoding = sys.stdin.encoding or "utf-8"
1838 stdin_encoding = sys.stdin.encoding or "utf-8"
1839 last_cell = u""
1839 last_cell = u""
1840 for _, _, cell in self.history_manager.get_tail(1000,
1840 for _, _, cell in self.history_manager.get_tail(1000,
1841 include_latest=True):
1841 include_latest=True):
1842 # Ignore blank lines and consecutive duplicates
1842 # Ignore blank lines and consecutive duplicates
1843 cell = cell.rstrip()
1843 cell = cell.rstrip()
1844 if cell and (cell != last_cell):
1844 if cell and (cell != last_cell):
1845 if self.multiline_history:
1845 if self.multiline_history:
1846 self.readline.add_history(py3compat.unicode_to_str(cell,
1846 self.readline.add_history(py3compat.unicode_to_str(cell,
1847 stdin_encoding))
1847 stdin_encoding))
1848 else:
1848 else:
1849 for line in cell.splitlines():
1849 for line in cell.splitlines():
1850 self.readline.add_history(py3compat.unicode_to_str(line,
1850 self.readline.add_history(py3compat.unicode_to_str(line,
1851 stdin_encoding))
1851 stdin_encoding))
1852 last_cell = cell
1852 last_cell = cell
1853
1853
1854 def set_next_input(self, s):
1854 def set_next_input(self, s):
1855 """ Sets the 'default' input string for the next command line.
1855 """ Sets the 'default' input string for the next command line.
1856
1856
1857 Requires readline.
1857 Requires readline.
1858
1858
1859 Example:
1859 Example:
1860
1860
1861 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1861 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1862 [D:\ipython]|2> Hello Word_ # cursor is here
1862 [D:\ipython]|2> Hello Word_ # cursor is here
1863 """
1863 """
1864 self.rl_next_input = py3compat.cast_bytes_py2(s)
1864 self.rl_next_input = py3compat.cast_bytes_py2(s)
1865
1865
1866 # Maybe move this to the terminal subclass?
1866 # Maybe move this to the terminal subclass?
1867 def pre_readline(self):
1867 def pre_readline(self):
1868 """readline hook to be used at the start of each line.
1868 """readline hook to be used at the start of each line.
1869
1869
1870 Currently it handles auto-indent only."""
1870 Currently it handles auto-indent only."""
1871
1871
1872 if self.rl_do_indent:
1872 if self.rl_do_indent:
1873 self.readline.insert_text(self._indent_current_str())
1873 self.readline.insert_text(self._indent_current_str())
1874 if self.rl_next_input is not None:
1874 if self.rl_next_input is not None:
1875 self.readline.insert_text(self.rl_next_input)
1875 self.readline.insert_text(self.rl_next_input)
1876 self.rl_next_input = None
1876 self.rl_next_input = None
1877
1877
1878 def _indent_current_str(self):
1878 def _indent_current_str(self):
1879 """return the current level of indentation as a string"""
1879 """return the current level of indentation as a string"""
1880 return self.input_splitter.indent_spaces * ' '
1880 return self.input_splitter.indent_spaces * ' '
1881
1881
1882 #-------------------------------------------------------------------------
1882 #-------------------------------------------------------------------------
1883 # Things related to text completion
1883 # Things related to text completion
1884 #-------------------------------------------------------------------------
1884 #-------------------------------------------------------------------------
1885
1885
1886 def init_completer(self):
1886 def init_completer(self):
1887 """Initialize the completion machinery.
1887 """Initialize the completion machinery.
1888
1888
1889 This creates completion machinery that can be used by client code,
1889 This creates completion machinery that can be used by client code,
1890 either interactively in-process (typically triggered by the readline
1890 either interactively in-process (typically triggered by the readline
1891 library), programatically (such as in test suites) or out-of-prcess
1891 library), programatically (such as in test suites) or out-of-prcess
1892 (typically over the network by remote frontends).
1892 (typically over the network by remote frontends).
1893 """
1893 """
1894 from IPython.core.completer import IPCompleter
1894 from IPython.core.completer import IPCompleter
1895 from IPython.core.completerlib import (module_completer,
1895 from IPython.core.completerlib import (module_completer,
1896 magic_run_completer, cd_completer, reset_completer)
1896 magic_run_completer, cd_completer, reset_completer)
1897
1897
1898 self.Completer = IPCompleter(shell=self,
1898 self.Completer = IPCompleter(shell=self,
1899 namespace=self.user_ns,
1899 namespace=self.user_ns,
1900 global_namespace=self.user_global_ns,
1900 global_namespace=self.user_global_ns,
1901 alias_table=self.alias_manager.alias_table,
1901 alias_table=self.alias_manager.alias_table,
1902 use_readline=self.has_readline,
1902 use_readline=self.has_readline,
1903 config=self.config,
1903 config=self.config,
1904 )
1904 )
1905 self.configurables.append(self.Completer)
1905 self.configurables.append(self.Completer)
1906
1906
1907 # Add custom completers to the basic ones built into IPCompleter
1907 # Add custom completers to the basic ones built into IPCompleter
1908 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1908 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1909 self.strdispatchers['complete_command'] = sdisp
1909 self.strdispatchers['complete_command'] = sdisp
1910 self.Completer.custom_completers = sdisp
1910 self.Completer.custom_completers = sdisp
1911
1911
1912 self.set_hook('complete_command', module_completer, str_key = 'import')
1912 self.set_hook('complete_command', module_completer, str_key = 'import')
1913 self.set_hook('complete_command', module_completer, str_key = 'from')
1913 self.set_hook('complete_command', module_completer, str_key = 'from')
1914 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1914 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1915 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1915 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1916 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1916 self.set_hook('complete_command', reset_completer, str_key = '%reset')
1917
1917
1918 # Only configure readline if we truly are using readline. IPython can
1918 # Only configure readline if we truly are using readline. IPython can
1919 # do tab-completion over the network, in GUIs, etc, where readline
1919 # do tab-completion over the network, in GUIs, etc, where readline
1920 # itself may be absent
1920 # itself may be absent
1921 if self.has_readline:
1921 if self.has_readline:
1922 self.set_readline_completer()
1922 self.set_readline_completer()
1923
1923
1924 def complete(self, text, line=None, cursor_pos=None):
1924 def complete(self, text, line=None, cursor_pos=None):
1925 """Return the completed text and a list of completions.
1925 """Return the completed text and a list of completions.
1926
1926
1927 Parameters
1927 Parameters
1928 ----------
1928 ----------
1929
1929
1930 text : string
1930 text : string
1931 A string of text to be completed on. It can be given as empty and
1931 A string of text to be completed on. It can be given as empty and
1932 instead a line/position pair are given. In this case, the
1932 instead a line/position pair are given. In this case, the
1933 completer itself will split the line like readline does.
1933 completer itself will split the line like readline does.
1934
1934
1935 line : string, optional
1935 line : string, optional
1936 The complete line that text is part of.
1936 The complete line that text is part of.
1937
1937
1938 cursor_pos : int, optional
1938 cursor_pos : int, optional
1939 The position of the cursor on the input line.
1939 The position of the cursor on the input line.
1940
1940
1941 Returns
1941 Returns
1942 -------
1942 -------
1943 text : string
1943 text : string
1944 The actual text that was completed.
1944 The actual text that was completed.
1945
1945
1946 matches : list
1946 matches : list
1947 A sorted list with all possible completions.
1947 A sorted list with all possible completions.
1948
1948
1949 The optional arguments allow the completion to take more context into
1949 The optional arguments allow the completion to take more context into
1950 account, and are part of the low-level completion API.
1950 account, and are part of the low-level completion API.
1951
1951
1952 This is a wrapper around the completion mechanism, similar to what
1952 This is a wrapper around the completion mechanism, similar to what
1953 readline does at the command line when the TAB key is hit. By
1953 readline does at the command line when the TAB key is hit. By
1954 exposing it as a method, it can be used by other non-readline
1954 exposing it as a method, it can be used by other non-readline
1955 environments (such as GUIs) for text completion.
1955 environments (such as GUIs) for text completion.
1956
1956
1957 Simple usage example:
1957 Simple usage example:
1958
1958
1959 In [1]: x = 'hello'
1959 In [1]: x = 'hello'
1960
1960
1961 In [2]: _ip.complete('x.l')
1961 In [2]: _ip.complete('x.l')
1962 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1962 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1963 """
1963 """
1964
1964
1965 # Inject names into __builtin__ so we can complete on the added names.
1965 # Inject names into __builtin__ so we can complete on the added names.
1966 with self.builtin_trap:
1966 with self.builtin_trap:
1967 return self.Completer.complete(text, line, cursor_pos)
1967 return self.Completer.complete(text, line, cursor_pos)
1968
1968
1969 def set_custom_completer(self, completer, pos=0):
1969 def set_custom_completer(self, completer, pos=0):
1970 """Adds a new custom completer function.
1970 """Adds a new custom completer function.
1971
1971
1972 The position argument (defaults to 0) is the index in the completers
1972 The position argument (defaults to 0) is the index in the completers
1973 list where you want the completer to be inserted."""
1973 list where you want the completer to be inserted."""
1974
1974
1975 newcomp = types.MethodType(completer,self.Completer)
1975 newcomp = types.MethodType(completer,self.Completer)
1976 self.Completer.matchers.insert(pos,newcomp)
1976 self.Completer.matchers.insert(pos,newcomp)
1977
1977
1978 def set_readline_completer(self):
1978 def set_readline_completer(self):
1979 """Reset readline's completer to be our own."""
1979 """Reset readline's completer to be our own."""
1980 self.readline.set_completer(self.Completer.rlcomplete)
1980 self.readline.set_completer(self.Completer.rlcomplete)
1981
1981
1982 def set_completer_frame(self, frame=None):
1982 def set_completer_frame(self, frame=None):
1983 """Set the frame of the completer."""
1983 """Set the frame of the completer."""
1984 if frame:
1984 if frame:
1985 self.Completer.namespace = frame.f_locals
1985 self.Completer.namespace = frame.f_locals
1986 self.Completer.global_namespace = frame.f_globals
1986 self.Completer.global_namespace = frame.f_globals
1987 else:
1987 else:
1988 self.Completer.namespace = self.user_ns
1988 self.Completer.namespace = self.user_ns
1989 self.Completer.global_namespace = self.user_global_ns
1989 self.Completer.global_namespace = self.user_global_ns
1990
1990
1991 #-------------------------------------------------------------------------
1991 #-------------------------------------------------------------------------
1992 # Things related to magics
1992 # Things related to magics
1993 #-------------------------------------------------------------------------
1993 #-------------------------------------------------------------------------
1994
1994
1995 def init_magics(self):
1995 def init_magics(self):
1996 from IPython.core import magic_functions as mf
1996 from IPython.core import magic_functions as mf
1997 self.magics_manager = magic.MagicsManager(shell=self,
1997 self.magics_manager = magic.MagicsManager(shell=self,
1998 confg=self.config,
1998 confg=self.config,
1999 user_magics=mf.UserMagics(self))
1999 user_magics=mf.UserMagics(self))
2000 self.configurables.append(self.magics_manager)
2000 self.configurables.append(self.magics_manager)
2001
2001
2002 self.magics_manager.register(mf.BasicMagics, mf.CodeMagics,
2002 all_m = [t(self) for t in [mf.BasicMagics, mf.CodeMagics,
2003 mf.ConfigMagics, mf.NamespaceMagics, mf.ExecutionMagics,
2003 mf.ConfigMagics, mf.NamespaceMagics, mf.ExecutionMagics,
2004 mf.AutoMagics, mf.OSMagics, mf.LoggingMagics, mf.ExtensionsMagics,
2004 mf.AutoMagics, mf.OSMagics, mf.LoggingMagics, mf.ExtensionsMagics,
2005 mf.PylabMagics, mf.DeprecatedMagics)
2005 mf.PylabMagics, mf.DeprecatedMagics] ]
2006 self.all_m = all_m
2007 self.magics_manager.register(*all_m)
2006
2008
2007 # FIXME: Move the color initialization to the DisplayHook, which
2009 # FIXME: Move the color initialization to the DisplayHook, which
2008 # should be split into a prompt manager and displayhook. We probably
2010 # should be split into a prompt manager and displayhook. We probably
2009 # even need a centralize colors management object.
2011 # even need a centralize colors management object.
2010 self.magic('colors %s' % self.colors)
2012 #self.magic('colors %s' % self.colors)
2011 # History was moved to a separate module
2013 # History was moved to a separate module
2012 from IPython.core import history
2014 from IPython.core import history
2013 history.init_ipython(self)
2015 history.init_ipython(self)
2014
2016
2015 def magic(self, arg_s, next_input=None):
2017 def magic(self, arg_s, next_input=None):
2016 """Call a magic function by name.
2018 """Call a magic function by name.
2017
2019
2018 Input: a string containing the name of the magic function to call and
2020 Input: a string containing the name of the magic function to call and
2019 any additional arguments to be passed to the magic.
2021 any additional arguments to be passed to the magic.
2020
2022
2021 magic('name -opt foo bar') is equivalent to typing at the ipython
2023 magic('name -opt foo bar') is equivalent to typing at the ipython
2022 prompt:
2024 prompt:
2023
2025
2024 In[1]: %name -opt foo bar
2026 In[1]: %name -opt foo bar
2025
2027
2026 To call a magic without arguments, simply use magic('name').
2028 To call a magic without arguments, simply use magic('name').
2027
2029
2028 This provides a proper Python function to call IPython's magics in any
2030 This provides a proper Python function to call IPython's magics in any
2029 valid Python code you can type at the interpreter, including loops and
2031 valid Python code you can type at the interpreter, including loops and
2030 compound statements.
2032 compound statements.
2031 """
2033 """
2032 # Allow setting the next input - this is used if the user does `a=abs?`.
2034 # Allow setting the next input - this is used if the user does `a=abs?`.
2033 # We do this first so that magic functions can override it.
2035 # We do this first so that magic functions can override it.
2034 if next_input:
2036 if next_input:
2035 self.set_next_input(next_input)
2037 self.set_next_input(next_input)
2036
2038
2037 magic_name, _, magic_arg_s = arg_s.partition(' ')
2039 magic_name, _, magic_arg_s = arg_s.partition(' ')
2038 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2040 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
2039
2041
2040 fn = self.find_magic(magic_name)
2042 fn = self.find_magic(magic_name)
2041 if fn is None:
2043 if fn is None:
2042 error("Magic function `%s` not found." % magic_name)
2044 error("Magic function `%s` not found." % magic_name)
2043 else:
2045 else:
2044 magic_arg_s = self.var_expand(magic_arg_s, 1)
2046 magic_arg_s = self.var_expand(magic_arg_s, 1)
2045 # Put magic args in a list so we can call with f(*a) syntax
2047 # Put magic args in a list so we can call with f(*a) syntax
2046 args = [magic_arg_s]
2048 args = [magic_arg_s]
2047 # Grab local namespace if we need it:
2049 # Grab local namespace if we need it:
2048 if getattr(fn, "needs_local_scope", False):
2050 if getattr(fn, "needs_local_scope", False):
2049 args.append(sys._getframe(1).f_locals)
2051 args.append(sys._getframe(1).f_locals)
2050 with self.builtin_trap:
2052 with self.builtin_trap:
2051 result = fn(*args)
2053 result = fn(*args)
2052 return result
2054 return result
2053
2055
2054 def define_magic(self, magic_name, func):
2056 def define_magic(self, magic_name, func):
2055 """Expose own function as magic function for ipython
2057 """Expose own function as magic function for ipython
2056
2058
2057 Example::
2059 Example::
2058
2060
2059 def foo_impl(self, parameter_s=''):
2061 def foo_impl(self, parameter_s=''):
2060 'My very own magic!. (Use docstrings, IPython reads them).'
2062 'My very own magic!. (Use docstrings, IPython reads them).'
2061 print 'Magic function. Passed parameter is between < >:'
2063 print 'Magic function. Passed parameter is between < >:'
2062 print '<%s>' % parameter_s
2064 print '<%s>' % parameter_s
2063 print 'The self object is:', self
2065 print 'The self object is:', self
2064
2066
2065 ip.define_magic('foo', foo_impl)
2067 ip.define_magic('foo', foo_impl)
2066 """
2068 """
2067 return self.magics_manager
2069 return self.magics_manager
2068 im = types.MethodType(func, self._magic)
2070 im = types.MethodType(func, self._magic)
2069 old = self.find_magic(magic_name)
2071 old = self.find_magic(magic_name)
2070 setattr(self._magic, 'magic_' + magic_name, im)
2072 setattr(self._magic, 'magic_' + magic_name, im)
2071 return old
2073 return old
2072
2074
2073 def find_line_magic(self, magic_name):
2075 def find_line_magic(self, magic_name):
2074 """Find and return a line magic by name."""
2076 """Find and return a line magic by name."""
2075 return self.magics_manager.magics['line'].get(magic_name)
2077 return self.magics_manager.magics['line'].get(magic_name)
2076
2078
2077 def find_cell_magic(self, magic_name):
2079 def find_cell_magic(self, magic_name):
2078 """Find and return a cell magic by name."""
2080 """Find and return a cell magic by name."""
2079 return self.magics_manager.magics['cell'].get(magic_name)
2081 return self.magics_manager.magics['cell'].get(magic_name)
2080
2082
2081 def find_magic(self, magic_name, magic_type='line'):
2083 def find_magic(self, magic_name, magic_type='line'):
2082 """Find and return a magic of the given type by name."""
2084 """Find and return a magic of the given type by name."""
2083 return self.magics_manager.magics[magic_type].get(magic_name)
2085 return self.magics_manager.magics[magic_type].get(magic_name)
2084
2086
2085 #-------------------------------------------------------------------------
2087 #-------------------------------------------------------------------------
2086 # Things related to macros
2088 # Things related to macros
2087 #-------------------------------------------------------------------------
2089 #-------------------------------------------------------------------------
2088
2090
2089 def define_macro(self, name, themacro):
2091 def define_macro(self, name, themacro):
2090 """Define a new macro
2092 """Define a new macro
2091
2093
2092 Parameters
2094 Parameters
2093 ----------
2095 ----------
2094 name : str
2096 name : str
2095 The name of the macro.
2097 The name of the macro.
2096 themacro : str or Macro
2098 themacro : str or Macro
2097 The action to do upon invoking the macro. If a string, a new
2099 The action to do upon invoking the macro. If a string, a new
2098 Macro object is created by passing the string to it.
2100 Macro object is created by passing the string to it.
2099 """
2101 """
2100
2102
2101 from IPython.core import macro
2103 from IPython.core import macro
2102
2104
2103 if isinstance(themacro, basestring):
2105 if isinstance(themacro, basestring):
2104 themacro = macro.Macro(themacro)
2106 themacro = macro.Macro(themacro)
2105 if not isinstance(themacro, macro.Macro):
2107 if not isinstance(themacro, macro.Macro):
2106 raise ValueError('A macro must be a string or a Macro instance.')
2108 raise ValueError('A macro must be a string or a Macro instance.')
2107 self.user_ns[name] = themacro
2109 self.user_ns[name] = themacro
2108
2110
2109 #-------------------------------------------------------------------------
2111 #-------------------------------------------------------------------------
2110 # Things related to the running of system commands
2112 # Things related to the running of system commands
2111 #-------------------------------------------------------------------------
2113 #-------------------------------------------------------------------------
2112
2114
2113 def system_piped(self, cmd):
2115 def system_piped(self, cmd):
2114 """Call the given cmd in a subprocess, piping stdout/err
2116 """Call the given cmd in a subprocess, piping stdout/err
2115
2117
2116 Parameters
2118 Parameters
2117 ----------
2119 ----------
2118 cmd : str
2120 cmd : str
2119 Command to execute (can not end in '&', as background processes are
2121 Command to execute (can not end in '&', as background processes are
2120 not supported. Should not be a command that expects input
2122 not supported. Should not be a command that expects input
2121 other than simple text.
2123 other than simple text.
2122 """
2124 """
2123 if cmd.rstrip().endswith('&'):
2125 if cmd.rstrip().endswith('&'):
2124 # this is *far* from a rigorous test
2126 # this is *far* from a rigorous test
2125 # We do not support backgrounding processes because we either use
2127 # We do not support backgrounding processes because we either use
2126 # pexpect or pipes to read from. Users can always just call
2128 # pexpect or pipes to read from. Users can always just call
2127 # os.system() or use ip.system=ip.system_raw
2129 # os.system() or use ip.system=ip.system_raw
2128 # if they really want a background process.
2130 # if they really want a background process.
2129 raise OSError("Background processes not supported.")
2131 raise OSError("Background processes not supported.")
2130
2132
2131 # we explicitly do NOT return the subprocess status code, because
2133 # we explicitly do NOT return the subprocess status code, because
2132 # a non-None value would trigger :func:`sys.displayhook` calls.
2134 # a non-None value would trigger :func:`sys.displayhook` calls.
2133 # Instead, we store the exit_code in user_ns.
2135 # Instead, we store the exit_code in user_ns.
2134 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=2))
2136 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=2))
2135
2137
2136 def system_raw(self, cmd):
2138 def system_raw(self, cmd):
2137 """Call the given cmd in a subprocess using os.system
2139 """Call the given cmd in a subprocess using os.system
2138
2140
2139 Parameters
2141 Parameters
2140 ----------
2142 ----------
2141 cmd : str
2143 cmd : str
2142 Command to execute.
2144 Command to execute.
2143 """
2145 """
2144 cmd = self.var_expand(cmd, depth=2)
2146 cmd = self.var_expand(cmd, depth=2)
2145 # protect os.system from UNC paths on Windows, which it can't handle:
2147 # protect os.system from UNC paths on Windows, which it can't handle:
2146 if sys.platform == 'win32':
2148 if sys.platform == 'win32':
2147 from IPython.utils._process_win32 import AvoidUNCPath
2149 from IPython.utils._process_win32 import AvoidUNCPath
2148 with AvoidUNCPath() as path:
2150 with AvoidUNCPath() as path:
2149 if path is not None:
2151 if path is not None:
2150 cmd = '"pushd %s &&"%s' % (path, cmd)
2152 cmd = '"pushd %s &&"%s' % (path, cmd)
2151 cmd = py3compat.unicode_to_str(cmd)
2153 cmd = py3compat.unicode_to_str(cmd)
2152 ec = os.system(cmd)
2154 ec = os.system(cmd)
2153 else:
2155 else:
2154 cmd = py3compat.unicode_to_str(cmd)
2156 cmd = py3compat.unicode_to_str(cmd)
2155 ec = os.system(cmd)
2157 ec = os.system(cmd)
2156
2158
2157 # We explicitly do NOT return the subprocess status code, because
2159 # We explicitly do NOT return the subprocess status code, because
2158 # a non-None value would trigger :func:`sys.displayhook` calls.
2160 # a non-None value would trigger :func:`sys.displayhook` calls.
2159 # Instead, we store the exit_code in user_ns.
2161 # Instead, we store the exit_code in user_ns.
2160 self.user_ns['_exit_code'] = ec
2162 self.user_ns['_exit_code'] = ec
2161
2163
2162 # use piped system by default, because it is better behaved
2164 # use piped system by default, because it is better behaved
2163 system = system_piped
2165 system = system_piped
2164
2166
2165 def getoutput(self, cmd, split=True):
2167 def getoutput(self, cmd, split=True):
2166 """Get output (possibly including stderr) from a subprocess.
2168 """Get output (possibly including stderr) from a subprocess.
2167
2169
2168 Parameters
2170 Parameters
2169 ----------
2171 ----------
2170 cmd : str
2172 cmd : str
2171 Command to execute (can not end in '&', as background processes are
2173 Command to execute (can not end in '&', as background processes are
2172 not supported.
2174 not supported.
2173 split : bool, optional
2175 split : bool, optional
2174
2176
2175 If True, split the output into an IPython SList. Otherwise, an
2177 If True, split the output into an IPython SList. Otherwise, an
2176 IPython LSString is returned. These are objects similar to normal
2178 IPython LSString is returned. These are objects similar to normal
2177 lists and strings, with a few convenience attributes for easier
2179 lists and strings, with a few convenience attributes for easier
2178 manipulation of line-based output. You can use '?' on them for
2180 manipulation of line-based output. You can use '?' on them for
2179 details.
2181 details.
2180 """
2182 """
2181 if cmd.rstrip().endswith('&'):
2183 if cmd.rstrip().endswith('&'):
2182 # this is *far* from a rigorous test
2184 # this is *far* from a rigorous test
2183 raise OSError("Background processes not supported.")
2185 raise OSError("Background processes not supported.")
2184 out = getoutput(self.var_expand(cmd, depth=2))
2186 out = getoutput(self.var_expand(cmd, depth=2))
2185 if split:
2187 if split:
2186 out = SList(out.splitlines())
2188 out = SList(out.splitlines())
2187 else:
2189 else:
2188 out = LSString(out)
2190 out = LSString(out)
2189 return out
2191 return out
2190
2192
2191 #-------------------------------------------------------------------------
2193 #-------------------------------------------------------------------------
2192 # Things related to aliases
2194 # Things related to aliases
2193 #-------------------------------------------------------------------------
2195 #-------------------------------------------------------------------------
2194
2196
2195 def init_alias(self):
2197 def init_alias(self):
2196 self.alias_manager = AliasManager(shell=self, config=self.config)
2198 self.alias_manager = AliasManager(shell=self, config=self.config)
2197 self.configurables.append(self.alias_manager)
2199 self.configurables.append(self.alias_manager)
2198 self.ns_table['alias'] = self.alias_manager.alias_table,
2200 self.ns_table['alias'] = self.alias_manager.alias_table,
2199
2201
2200 #-------------------------------------------------------------------------
2202 #-------------------------------------------------------------------------
2201 # Things related to extensions and plugins
2203 # Things related to extensions and plugins
2202 #-------------------------------------------------------------------------
2204 #-------------------------------------------------------------------------
2203
2205
2204 def init_extension_manager(self):
2206 def init_extension_manager(self):
2205 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2207 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2206 self.configurables.append(self.extension_manager)
2208 self.configurables.append(self.extension_manager)
2207
2209
2208 def init_plugin_manager(self):
2210 def init_plugin_manager(self):
2209 self.plugin_manager = PluginManager(config=self.config)
2211 self.plugin_manager = PluginManager(config=self.config)
2210 self.configurables.append(self.plugin_manager)
2212 self.configurables.append(self.plugin_manager)
2211
2213
2212
2214
2213 #-------------------------------------------------------------------------
2215 #-------------------------------------------------------------------------
2214 # Things related to payloads
2216 # Things related to payloads
2215 #-------------------------------------------------------------------------
2217 #-------------------------------------------------------------------------
2216
2218
2217 def init_payload(self):
2219 def init_payload(self):
2218 self.payload_manager = PayloadManager(config=self.config)
2220 self.payload_manager = PayloadManager(config=self.config)
2219 self.configurables.append(self.payload_manager)
2221 self.configurables.append(self.payload_manager)
2220
2222
2221 #-------------------------------------------------------------------------
2223 #-------------------------------------------------------------------------
2222 # Things related to the prefilter
2224 # Things related to the prefilter
2223 #-------------------------------------------------------------------------
2225 #-------------------------------------------------------------------------
2224
2226
2225 def init_prefilter(self):
2227 def init_prefilter(self):
2226 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2228 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2227 self.configurables.append(self.prefilter_manager)
2229 self.configurables.append(self.prefilter_manager)
2228 # Ultimately this will be refactored in the new interpreter code, but
2230 # Ultimately this will be refactored in the new interpreter code, but
2229 # for now, we should expose the main prefilter method (there's legacy
2231 # for now, we should expose the main prefilter method (there's legacy
2230 # code out there that may rely on this).
2232 # code out there that may rely on this).
2231 self.prefilter = self.prefilter_manager.prefilter_lines
2233 self.prefilter = self.prefilter_manager.prefilter_lines
2232
2234
2233 def auto_rewrite_input(self, cmd):
2235 def auto_rewrite_input(self, cmd):
2234 """Print to the screen the rewritten form of the user's command.
2236 """Print to the screen the rewritten form of the user's command.
2235
2237
2236 This shows visual feedback by rewriting input lines that cause
2238 This shows visual feedback by rewriting input lines that cause
2237 automatic calling to kick in, like::
2239 automatic calling to kick in, like::
2238
2240
2239 /f x
2241 /f x
2240
2242
2241 into::
2243 into::
2242
2244
2243 ------> f(x)
2245 ------> f(x)
2244
2246
2245 after the user's input prompt. This helps the user understand that the
2247 after the user's input prompt. This helps the user understand that the
2246 input line was transformed automatically by IPython.
2248 input line was transformed automatically by IPython.
2247 """
2249 """
2248 if not self.show_rewritten_input:
2250 if not self.show_rewritten_input:
2249 return
2251 return
2250
2252
2251 rw = self.prompt_manager.render('rewrite') + cmd
2253 rw = self.prompt_manager.render('rewrite') + cmd
2252
2254
2253 try:
2255 try:
2254 # plain ascii works better w/ pyreadline, on some machines, so
2256 # plain ascii works better w/ pyreadline, on some machines, so
2255 # we use it and only print uncolored rewrite if we have unicode
2257 # we use it and only print uncolored rewrite if we have unicode
2256 rw = str(rw)
2258 rw = str(rw)
2257 print >> io.stdout, rw
2259 print >> io.stdout, rw
2258 except UnicodeEncodeError:
2260 except UnicodeEncodeError:
2259 print "------> " + cmd
2261 print "------> " + cmd
2260
2262
2261 #-------------------------------------------------------------------------
2263 #-------------------------------------------------------------------------
2262 # Things related to extracting values/expressions from kernel and user_ns
2264 # Things related to extracting values/expressions from kernel and user_ns
2263 #-------------------------------------------------------------------------
2265 #-------------------------------------------------------------------------
2264
2266
2265 def _simple_error(self):
2267 def _simple_error(self):
2266 etype, value = sys.exc_info()[:2]
2268 etype, value = sys.exc_info()[:2]
2267 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2269 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2268
2270
2269 def user_variables(self, names):
2271 def user_variables(self, names):
2270 """Get a list of variable names from the user's namespace.
2272 """Get a list of variable names from the user's namespace.
2271
2273
2272 Parameters
2274 Parameters
2273 ----------
2275 ----------
2274 names : list of strings
2276 names : list of strings
2275 A list of names of variables to be read from the user namespace.
2277 A list of names of variables to be read from the user namespace.
2276
2278
2277 Returns
2279 Returns
2278 -------
2280 -------
2279 A dict, keyed by the input names and with the repr() of each value.
2281 A dict, keyed by the input names and with the repr() of each value.
2280 """
2282 """
2281 out = {}
2283 out = {}
2282 user_ns = self.user_ns
2284 user_ns = self.user_ns
2283 for varname in names:
2285 for varname in names:
2284 try:
2286 try:
2285 value = repr(user_ns[varname])
2287 value = repr(user_ns[varname])
2286 except:
2288 except:
2287 value = self._simple_error()
2289 value = self._simple_error()
2288 out[varname] = value
2290 out[varname] = value
2289 return out
2291 return out
2290
2292
2291 def user_expressions(self, expressions):
2293 def user_expressions(self, expressions):
2292 """Evaluate a dict of expressions in the user's namespace.
2294 """Evaluate a dict of expressions in the user's namespace.
2293
2295
2294 Parameters
2296 Parameters
2295 ----------
2297 ----------
2296 expressions : dict
2298 expressions : dict
2297 A dict with string keys and string values. The expression values
2299 A dict with string keys and string values. The expression values
2298 should be valid Python expressions, each of which will be evaluated
2300 should be valid Python expressions, each of which will be evaluated
2299 in the user namespace.
2301 in the user namespace.
2300
2302
2301 Returns
2303 Returns
2302 -------
2304 -------
2303 A dict, keyed like the input expressions dict, with the repr() of each
2305 A dict, keyed like the input expressions dict, with the repr() of each
2304 value.
2306 value.
2305 """
2307 """
2306 out = {}
2308 out = {}
2307 user_ns = self.user_ns
2309 user_ns = self.user_ns
2308 global_ns = self.user_global_ns
2310 global_ns = self.user_global_ns
2309 for key, expr in expressions.iteritems():
2311 for key, expr in expressions.iteritems():
2310 try:
2312 try:
2311 value = repr(eval(expr, global_ns, user_ns))
2313 value = repr(eval(expr, global_ns, user_ns))
2312 except:
2314 except:
2313 value = self._simple_error()
2315 value = self._simple_error()
2314 out[key] = value
2316 out[key] = value
2315 return out
2317 return out
2316
2318
2317 #-------------------------------------------------------------------------
2319 #-------------------------------------------------------------------------
2318 # Things related to the running of code
2320 # Things related to the running of code
2319 #-------------------------------------------------------------------------
2321 #-------------------------------------------------------------------------
2320
2322
2321 def ex(self, cmd):
2323 def ex(self, cmd):
2322 """Execute a normal python statement in user namespace."""
2324 """Execute a normal python statement in user namespace."""
2323 with self.builtin_trap:
2325 with self.builtin_trap:
2324 exec cmd in self.user_global_ns, self.user_ns
2326 exec cmd in self.user_global_ns, self.user_ns
2325
2327
2326 def ev(self, expr):
2328 def ev(self, expr):
2327 """Evaluate python expression expr in user namespace.
2329 """Evaluate python expression expr in user namespace.
2328
2330
2329 Returns the result of evaluation
2331 Returns the result of evaluation
2330 """
2332 """
2331 with self.builtin_trap:
2333 with self.builtin_trap:
2332 return eval(expr, self.user_global_ns, self.user_ns)
2334 return eval(expr, self.user_global_ns, self.user_ns)
2333
2335
2334 def safe_execfile(self, fname, *where, **kw):
2336 def safe_execfile(self, fname, *where, **kw):
2335 """A safe version of the builtin execfile().
2337 """A safe version of the builtin execfile().
2336
2338
2337 This version will never throw an exception, but instead print
2339 This version will never throw an exception, but instead print
2338 helpful error messages to the screen. This only works on pure
2340 helpful error messages to the screen. This only works on pure
2339 Python files with the .py extension.
2341 Python files with the .py extension.
2340
2342
2341 Parameters
2343 Parameters
2342 ----------
2344 ----------
2343 fname : string
2345 fname : string
2344 The name of the file to be executed.
2346 The name of the file to be executed.
2345 where : tuple
2347 where : tuple
2346 One or two namespaces, passed to execfile() as (globals,locals).
2348 One or two namespaces, passed to execfile() as (globals,locals).
2347 If only one is given, it is passed as both.
2349 If only one is given, it is passed as both.
2348 exit_ignore : bool (False)
2350 exit_ignore : bool (False)
2349 If True, then silence SystemExit for non-zero status (it is always
2351 If True, then silence SystemExit for non-zero status (it is always
2350 silenced for zero status, as it is so common).
2352 silenced for zero status, as it is so common).
2351 raise_exceptions : bool (False)
2353 raise_exceptions : bool (False)
2352 If True raise exceptions everywhere. Meant for testing.
2354 If True raise exceptions everywhere. Meant for testing.
2353
2355
2354 """
2356 """
2355 kw.setdefault('exit_ignore', False)
2357 kw.setdefault('exit_ignore', False)
2356 kw.setdefault('raise_exceptions', False)
2358 kw.setdefault('raise_exceptions', False)
2357
2359
2358 fname = os.path.abspath(os.path.expanduser(fname))
2360 fname = os.path.abspath(os.path.expanduser(fname))
2359
2361
2360 # Make sure we can open the file
2362 # Make sure we can open the file
2361 try:
2363 try:
2362 with open(fname) as thefile:
2364 with open(fname) as thefile:
2363 pass
2365 pass
2364 except:
2366 except:
2365 warn('Could not open file <%s> for safe execution.' % fname)
2367 warn('Could not open file <%s> for safe execution.' % fname)
2366 return
2368 return
2367
2369
2368 # Find things also in current directory. This is needed to mimic the
2370 # Find things also in current directory. This is needed to mimic the
2369 # behavior of running a script from the system command line, where
2371 # behavior of running a script from the system command line, where
2370 # Python inserts the script's directory into sys.path
2372 # Python inserts the script's directory into sys.path
2371 dname = os.path.dirname(fname)
2373 dname = os.path.dirname(fname)
2372
2374
2373 with prepended_to_syspath(dname):
2375 with prepended_to_syspath(dname):
2374 try:
2376 try:
2375 py3compat.execfile(fname,*where)
2377 py3compat.execfile(fname,*where)
2376 except SystemExit, status:
2378 except SystemExit, status:
2377 # If the call was made with 0 or None exit status (sys.exit(0)
2379 # If the call was made with 0 or None exit status (sys.exit(0)
2378 # or sys.exit() ), don't bother showing a traceback, as both of
2380 # or sys.exit() ), don't bother showing a traceback, as both of
2379 # these are considered normal by the OS:
2381 # these are considered normal by the OS:
2380 # > python -c'import sys;sys.exit(0)'; echo $?
2382 # > python -c'import sys;sys.exit(0)'; echo $?
2381 # 0
2383 # 0
2382 # > python -c'import sys;sys.exit()'; echo $?
2384 # > python -c'import sys;sys.exit()'; echo $?
2383 # 0
2385 # 0
2384 # For other exit status, we show the exception unless
2386 # For other exit status, we show the exception unless
2385 # explicitly silenced, but only in short form.
2387 # explicitly silenced, but only in short form.
2386 if kw['raise_exceptions']:
2388 if kw['raise_exceptions']:
2387 raise
2389 raise
2388 if status.code not in (0, None) and not kw['exit_ignore']:
2390 if status.code not in (0, None) and not kw['exit_ignore']:
2389 self.showtraceback(exception_only=True)
2391 self.showtraceback(exception_only=True)
2390 except:
2392 except:
2391 if kw['raise_exceptions']:
2393 if kw['raise_exceptions']:
2392 raise
2394 raise
2393 self.showtraceback()
2395 self.showtraceback()
2394
2396
2395 def safe_execfile_ipy(self, fname):
2397 def safe_execfile_ipy(self, fname):
2396 """Like safe_execfile, but for .ipy files with IPython syntax.
2398 """Like safe_execfile, but for .ipy files with IPython syntax.
2397
2399
2398 Parameters
2400 Parameters
2399 ----------
2401 ----------
2400 fname : str
2402 fname : str
2401 The name of the file to execute. The filename must have a
2403 The name of the file to execute. The filename must have a
2402 .ipy extension.
2404 .ipy extension.
2403 """
2405 """
2404 fname = os.path.abspath(os.path.expanduser(fname))
2406 fname = os.path.abspath(os.path.expanduser(fname))
2405
2407
2406 # Make sure we can open the file
2408 # Make sure we can open the file
2407 try:
2409 try:
2408 with open(fname) as thefile:
2410 with open(fname) as thefile:
2409 pass
2411 pass
2410 except:
2412 except:
2411 warn('Could not open file <%s> for safe execution.' % fname)
2413 warn('Could not open file <%s> for safe execution.' % fname)
2412 return
2414 return
2413
2415
2414 # Find things also in current directory. This is needed to mimic the
2416 # Find things also in current directory. This is needed to mimic the
2415 # behavior of running a script from the system command line, where
2417 # behavior of running a script from the system command line, where
2416 # Python inserts the script's directory into sys.path
2418 # Python inserts the script's directory into sys.path
2417 dname = os.path.dirname(fname)
2419 dname = os.path.dirname(fname)
2418
2420
2419 with prepended_to_syspath(dname):
2421 with prepended_to_syspath(dname):
2420 try:
2422 try:
2421 with open(fname) as thefile:
2423 with open(fname) as thefile:
2422 # self.run_cell currently captures all exceptions
2424 # self.run_cell currently captures all exceptions
2423 # raised in user code. It would be nice if there were
2425 # raised in user code. It would be nice if there were
2424 # versions of runlines, execfile that did raise, so
2426 # versions of runlines, execfile that did raise, so
2425 # we could catch the errors.
2427 # we could catch the errors.
2426 self.run_cell(thefile.read(), store_history=False)
2428 self.run_cell(thefile.read(), store_history=False)
2427 except:
2429 except:
2428 self.showtraceback()
2430 self.showtraceback()
2429 warn('Unknown failure executing file: <%s>' % fname)
2431 warn('Unknown failure executing file: <%s>' % fname)
2430
2432
2431 def safe_run_module(self, mod_name, where):
2433 def safe_run_module(self, mod_name, where):
2432 """A safe version of runpy.run_module().
2434 """A safe version of runpy.run_module().
2433
2435
2434 This version will never throw an exception, but instead print
2436 This version will never throw an exception, but instead print
2435 helpful error messages to the screen.
2437 helpful error messages to the screen.
2436
2438
2437 Parameters
2439 Parameters
2438 ----------
2440 ----------
2439 mod_name : string
2441 mod_name : string
2440 The name of the module to be executed.
2442 The name of the module to be executed.
2441 where : dict
2443 where : dict
2442 The globals namespace.
2444 The globals namespace.
2443 """
2445 """
2444 try:
2446 try:
2445 where.update(
2447 where.update(
2446 runpy.run_module(str(mod_name), run_name="__main__",
2448 runpy.run_module(str(mod_name), run_name="__main__",
2447 alter_sys=True)
2449 alter_sys=True)
2448 )
2450 )
2449 except:
2451 except:
2450 self.showtraceback()
2452 self.showtraceback()
2451 warn('Unknown failure executing module: <%s>' % mod_name)
2453 warn('Unknown failure executing module: <%s>' % mod_name)
2452
2454
2453 def run_cell(self, raw_cell, store_history=False, silent=False):
2455 def run_cell(self, raw_cell, store_history=False, silent=False):
2454 """Run a complete IPython cell.
2456 """Run a complete IPython cell.
2455
2457
2456 Parameters
2458 Parameters
2457 ----------
2459 ----------
2458 raw_cell : str
2460 raw_cell : str
2459 The code (including IPython code such as %magic functions) to run.
2461 The code (including IPython code such as %magic functions) to run.
2460 store_history : bool
2462 store_history : bool
2461 If True, the raw and translated cell will be stored in IPython's
2463 If True, the raw and translated cell will be stored in IPython's
2462 history. For user code calling back into IPython's machinery, this
2464 history. For user code calling back into IPython's machinery, this
2463 should be set to False.
2465 should be set to False.
2464 silent : bool
2466 silent : bool
2465 If True, avoid side-effets, such as implicit displayhooks, history,
2467 If True, avoid side-effets, such as implicit displayhooks, history,
2466 and logging. silent=True forces store_history=False.
2468 and logging. silent=True forces store_history=False.
2467 """
2469 """
2468 if (not raw_cell) or raw_cell.isspace():
2470 if (not raw_cell) or raw_cell.isspace():
2469 return
2471 return
2470
2472
2471 if silent:
2473 if silent:
2472 store_history = False
2474 store_history = False
2473
2475
2474 for line in raw_cell.splitlines():
2476 for line in raw_cell.splitlines():
2475 self.input_splitter.push(line)
2477 self.input_splitter.push(line)
2476 cell = self.input_splitter.source_reset()
2478 cell = self.input_splitter.source_reset()
2477
2479
2478 with self.builtin_trap:
2480 with self.builtin_trap:
2479 prefilter_failed = False
2481 prefilter_failed = False
2480 if len(cell.splitlines()) == 1:
2482 if len(cell.splitlines()) == 1:
2481 try:
2483 try:
2482 # use prefilter_lines to handle trailing newlines
2484 # use prefilter_lines to handle trailing newlines
2483 # restore trailing newline for ast.parse
2485 # restore trailing newline for ast.parse
2484 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2486 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2485 except AliasError as e:
2487 except AliasError as e:
2486 error(e)
2488 error(e)
2487 prefilter_failed = True
2489 prefilter_failed = True
2488 except Exception:
2490 except Exception:
2489 # don't allow prefilter errors to crash IPython
2491 # don't allow prefilter errors to crash IPython
2490 self.showtraceback()
2492 self.showtraceback()
2491 prefilter_failed = True
2493 prefilter_failed = True
2492
2494
2493 # Store raw and processed history
2495 # Store raw and processed history
2494 if store_history:
2496 if store_history:
2495 self.history_manager.store_inputs(self.execution_count,
2497 self.history_manager.store_inputs(self.execution_count,
2496 cell, raw_cell)
2498 cell, raw_cell)
2497 if not silent:
2499 if not silent:
2498 self.logger.log(cell, raw_cell)
2500 self.logger.log(cell, raw_cell)
2499
2501
2500 if not prefilter_failed:
2502 if not prefilter_failed:
2501 # don't run if prefilter failed
2503 # don't run if prefilter failed
2502 cell_name = self.compile.cache(cell, self.execution_count)
2504 cell_name = self.compile.cache(cell, self.execution_count)
2503
2505
2504 with self.display_trap:
2506 with self.display_trap:
2505 try:
2507 try:
2506 code_ast = self.compile.ast_parse(cell, filename=cell_name)
2508 code_ast = self.compile.ast_parse(cell, filename=cell_name)
2507 except IndentationError:
2509 except IndentationError:
2508 self.showindentationerror()
2510 self.showindentationerror()
2509 if store_history:
2511 if store_history:
2510 self.execution_count += 1
2512 self.execution_count += 1
2511 return None
2513 return None
2512 except (OverflowError, SyntaxError, ValueError, TypeError,
2514 except (OverflowError, SyntaxError, ValueError, TypeError,
2513 MemoryError):
2515 MemoryError):
2514 self.showsyntaxerror()
2516 self.showsyntaxerror()
2515 if store_history:
2517 if store_history:
2516 self.execution_count += 1
2518 self.execution_count += 1
2517 return None
2519 return None
2518
2520
2519 interactivity = "none" if silent else "last_expr"
2521 interactivity = "none" if silent else "last_expr"
2520 self.run_ast_nodes(code_ast.body, cell_name,
2522 self.run_ast_nodes(code_ast.body, cell_name,
2521 interactivity=interactivity)
2523 interactivity=interactivity)
2522
2524
2523 # Execute any registered post-execution functions.
2525 # Execute any registered post-execution functions.
2524 # unless we are silent
2526 # unless we are silent
2525 post_exec = [] if silent else self._post_execute.iteritems()
2527 post_exec = [] if silent else self._post_execute.iteritems()
2526
2528
2527 for func, status in post_exec:
2529 for func, status in post_exec:
2528 if self.disable_failing_post_execute and not status:
2530 if self.disable_failing_post_execute and not status:
2529 continue
2531 continue
2530 try:
2532 try:
2531 func()
2533 func()
2532 except KeyboardInterrupt:
2534 except KeyboardInterrupt:
2533 print >> io.stderr, "\nKeyboardInterrupt"
2535 print >> io.stderr, "\nKeyboardInterrupt"
2534 except Exception:
2536 except Exception:
2535 # register as failing:
2537 # register as failing:
2536 self._post_execute[func] = False
2538 self._post_execute[func] = False
2537 self.showtraceback()
2539 self.showtraceback()
2538 print >> io.stderr, '\n'.join([
2540 print >> io.stderr, '\n'.join([
2539 "post-execution function %r produced an error." % func,
2541 "post-execution function %r produced an error." % func,
2540 "If this problem persists, you can disable failing post-exec functions with:",
2542 "If this problem persists, you can disable failing post-exec functions with:",
2541 "",
2543 "",
2542 " get_ipython().disable_failing_post_execute = True"
2544 " get_ipython().disable_failing_post_execute = True"
2543 ])
2545 ])
2544
2546
2545 if store_history:
2547 if store_history:
2546 # Write output to the database. Does nothing unless
2548 # Write output to the database. Does nothing unless
2547 # history output logging is enabled.
2549 # history output logging is enabled.
2548 self.history_manager.store_output(self.execution_count)
2550 self.history_manager.store_output(self.execution_count)
2549 # Each cell is a *single* input, regardless of how many lines it has
2551 # Each cell is a *single* input, regardless of how many lines it has
2550 self.execution_count += 1
2552 self.execution_count += 1
2551
2553
2552 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2554 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2553 """Run a sequence of AST nodes. The execution mode depends on the
2555 """Run a sequence of AST nodes. The execution mode depends on the
2554 interactivity parameter.
2556 interactivity parameter.
2555
2557
2556 Parameters
2558 Parameters
2557 ----------
2559 ----------
2558 nodelist : list
2560 nodelist : list
2559 A sequence of AST nodes to run.
2561 A sequence of AST nodes to run.
2560 cell_name : str
2562 cell_name : str
2561 Will be passed to the compiler as the filename of the cell. Typically
2563 Will be passed to the compiler as the filename of the cell. Typically
2562 the value returned by ip.compile.cache(cell).
2564 the value returned by ip.compile.cache(cell).
2563 interactivity : str
2565 interactivity : str
2564 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2566 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2565 run interactively (displaying output from expressions). 'last_expr'
2567 run interactively (displaying output from expressions). 'last_expr'
2566 will run the last node interactively only if it is an expression (i.e.
2568 will run the last node interactively only if it is an expression (i.e.
2567 expressions in loops or other blocks are not displayed. Other values
2569 expressions in loops or other blocks are not displayed. Other values
2568 for this parameter will raise a ValueError.
2570 for this parameter will raise a ValueError.
2569 """
2571 """
2570 if not nodelist:
2572 if not nodelist:
2571 return
2573 return
2572
2574
2573 if interactivity == 'last_expr':
2575 if interactivity == 'last_expr':
2574 if isinstance(nodelist[-1], ast.Expr):
2576 if isinstance(nodelist[-1], ast.Expr):
2575 interactivity = "last"
2577 interactivity = "last"
2576 else:
2578 else:
2577 interactivity = "none"
2579 interactivity = "none"
2578
2580
2579 if interactivity == 'none':
2581 if interactivity == 'none':
2580 to_run_exec, to_run_interactive = nodelist, []
2582 to_run_exec, to_run_interactive = nodelist, []
2581 elif interactivity == 'last':
2583 elif interactivity == 'last':
2582 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2584 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2583 elif interactivity == 'all':
2585 elif interactivity == 'all':
2584 to_run_exec, to_run_interactive = [], nodelist
2586 to_run_exec, to_run_interactive = [], nodelist
2585 else:
2587 else:
2586 raise ValueError("Interactivity was %r" % interactivity)
2588 raise ValueError("Interactivity was %r" % interactivity)
2587
2589
2588 exec_count = self.execution_count
2590 exec_count = self.execution_count
2589
2591
2590 try:
2592 try:
2591 for i, node in enumerate(to_run_exec):
2593 for i, node in enumerate(to_run_exec):
2592 mod = ast.Module([node])
2594 mod = ast.Module([node])
2593 code = self.compile(mod, cell_name, "exec")
2595 code = self.compile(mod, cell_name, "exec")
2594 if self.run_code(code):
2596 if self.run_code(code):
2595 return True
2597 return True
2596
2598
2597 for i, node in enumerate(to_run_interactive):
2599 for i, node in enumerate(to_run_interactive):
2598 mod = ast.Interactive([node])
2600 mod = ast.Interactive([node])
2599 code = self.compile(mod, cell_name, "single")
2601 code = self.compile(mod, cell_name, "single")
2600 if self.run_code(code):
2602 if self.run_code(code):
2601 return True
2603 return True
2602
2604
2603 # Flush softspace
2605 # Flush softspace
2604 if softspace(sys.stdout, 0):
2606 if softspace(sys.stdout, 0):
2605 print
2607 print
2606
2608
2607 except:
2609 except:
2608 # It's possible to have exceptions raised here, typically by
2610 # It's possible to have exceptions raised here, typically by
2609 # compilation of odd code (such as a naked 'return' outside a
2611 # compilation of odd code (such as a naked 'return' outside a
2610 # function) that did parse but isn't valid. Typically the exception
2612 # function) that did parse but isn't valid. Typically the exception
2611 # is a SyntaxError, but it's safest just to catch anything and show
2613 # is a SyntaxError, but it's safest just to catch anything and show
2612 # the user a traceback.
2614 # the user a traceback.
2613
2615
2614 # We do only one try/except outside the loop to minimize the impact
2616 # We do only one try/except outside the loop to minimize the impact
2615 # on runtime, and also because if any node in the node list is
2617 # on runtime, and also because if any node in the node list is
2616 # broken, we should stop execution completely.
2618 # broken, we should stop execution completely.
2617 self.showtraceback()
2619 self.showtraceback()
2618
2620
2619 return False
2621 return False
2620
2622
2621 def run_code(self, code_obj):
2623 def run_code(self, code_obj):
2622 """Execute a code object.
2624 """Execute a code object.
2623
2625
2624 When an exception occurs, self.showtraceback() is called to display a
2626 When an exception occurs, self.showtraceback() is called to display a
2625 traceback.
2627 traceback.
2626
2628
2627 Parameters
2629 Parameters
2628 ----------
2630 ----------
2629 code_obj : code object
2631 code_obj : code object
2630 A compiled code object, to be executed
2632 A compiled code object, to be executed
2631
2633
2632 Returns
2634 Returns
2633 -------
2635 -------
2634 False : successful execution.
2636 False : successful execution.
2635 True : an error occurred.
2637 True : an error occurred.
2636 """
2638 """
2637
2639
2638 # Set our own excepthook in case the user code tries to call it
2640 # Set our own excepthook in case the user code tries to call it
2639 # directly, so that the IPython crash handler doesn't get triggered
2641 # directly, so that the IPython crash handler doesn't get triggered
2640 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2642 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2641
2643
2642 # we save the original sys.excepthook in the instance, in case config
2644 # we save the original sys.excepthook in the instance, in case config
2643 # code (such as magics) needs access to it.
2645 # code (such as magics) needs access to it.
2644 self.sys_excepthook = old_excepthook
2646 self.sys_excepthook = old_excepthook
2645 outflag = 1 # happens in more places, so it's easier as default
2647 outflag = 1 # happens in more places, so it's easier as default
2646 try:
2648 try:
2647 try:
2649 try:
2648 self.hooks.pre_run_code_hook()
2650 self.hooks.pre_run_code_hook()
2649 #rprint('Running code', repr(code_obj)) # dbg
2651 #rprint('Running code', repr(code_obj)) # dbg
2650 exec code_obj in self.user_global_ns, self.user_ns
2652 exec code_obj in self.user_global_ns, self.user_ns
2651 finally:
2653 finally:
2652 # Reset our crash handler in place
2654 # Reset our crash handler in place
2653 sys.excepthook = old_excepthook
2655 sys.excepthook = old_excepthook
2654 except SystemExit:
2656 except SystemExit:
2655 self.showtraceback(exception_only=True)
2657 self.showtraceback(exception_only=True)
2656 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2658 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2657 except self.custom_exceptions:
2659 except self.custom_exceptions:
2658 etype,value,tb = sys.exc_info()
2660 etype,value,tb = sys.exc_info()
2659 self.CustomTB(etype,value,tb)
2661 self.CustomTB(etype,value,tb)
2660 except:
2662 except:
2661 self.showtraceback()
2663 self.showtraceback()
2662 else:
2664 else:
2663 outflag = 0
2665 outflag = 0
2664 return outflag
2666 return outflag
2665
2667
2666 # For backwards compatibility
2668 # For backwards compatibility
2667 runcode = run_code
2669 runcode = run_code
2668
2670
2669 #-------------------------------------------------------------------------
2671 #-------------------------------------------------------------------------
2670 # Things related to GUI support and pylab
2672 # Things related to GUI support and pylab
2671 #-------------------------------------------------------------------------
2673 #-------------------------------------------------------------------------
2672
2674
2673 def enable_gui(self, gui=None):
2675 def enable_gui(self, gui=None):
2674 raise NotImplementedError('Implement enable_gui in a subclass')
2676 raise NotImplementedError('Implement enable_gui in a subclass')
2675
2677
2676 def enable_pylab(self, gui=None, import_all=True):
2678 def enable_pylab(self, gui=None, import_all=True):
2677 """Activate pylab support at runtime.
2679 """Activate pylab support at runtime.
2678
2680
2679 This turns on support for matplotlib, preloads into the interactive
2681 This turns on support for matplotlib, preloads into the interactive
2680 namespace all of numpy and pylab, and configures IPython to correctly
2682 namespace all of numpy and pylab, and configures IPython to correctly
2681 interact with the GUI event loop. The GUI backend to be used can be
2683 interact with the GUI event loop. The GUI backend to be used can be
2682 optionally selected with the optional :param:`gui` argument.
2684 optionally selected with the optional :param:`gui` argument.
2683
2685
2684 Parameters
2686 Parameters
2685 ----------
2687 ----------
2686 gui : optional, string
2688 gui : optional, string
2687
2689
2688 If given, dictates the choice of matplotlib GUI backend to use
2690 If given, dictates the choice of matplotlib GUI backend to use
2689 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2691 (should be one of IPython's supported backends, 'qt', 'osx', 'tk',
2690 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2692 'gtk', 'wx' or 'inline'), otherwise we use the default chosen by
2691 matplotlib (as dictated by the matplotlib build-time options plus the
2693 matplotlib (as dictated by the matplotlib build-time options plus the
2692 user's matplotlibrc configuration file). Note that not all backends
2694 user's matplotlibrc configuration file). Note that not all backends
2693 make sense in all contexts, for example a terminal ipython can't
2695 make sense in all contexts, for example a terminal ipython can't
2694 display figures inline.
2696 display figures inline.
2695 """
2697 """
2696 from IPython.core.pylabtools import mpl_runner
2698 from IPython.core.pylabtools import mpl_runner
2697 # We want to prevent the loading of pylab to pollute the user's
2699 # We want to prevent the loading of pylab to pollute the user's
2698 # namespace as shown by the %who* magics, so we execute the activation
2700 # namespace as shown by the %who* magics, so we execute the activation
2699 # code in an empty namespace, and we update *both* user_ns and
2701 # code in an empty namespace, and we update *both* user_ns and
2700 # user_ns_hidden with this information.
2702 # user_ns_hidden with this information.
2701 ns = {}
2703 ns = {}
2702 try:
2704 try:
2703 gui = pylab_activate(ns, gui, import_all, self)
2705 gui = pylab_activate(ns, gui, import_all, self)
2704 except KeyError:
2706 except KeyError:
2705 error("Backend %r not supported" % gui)
2707 error("Backend %r not supported" % gui)
2706 return
2708 return
2707 self.user_ns.update(ns)
2709 self.user_ns.update(ns)
2708 self.user_ns_hidden.update(ns)
2710 self.user_ns_hidden.update(ns)
2709 # Now we must activate the gui pylab wants to use, and fix %run to take
2711 # Now we must activate the gui pylab wants to use, and fix %run to take
2710 # plot updates into account
2712 # plot updates into account
2711 self.enable_gui(gui)
2713 self.enable_gui(gui)
2712 self._magic.default_runner = mpl_runner(self.safe_execfile)
2714 self._magic.default_runner = mpl_runner(self.safe_execfile)
2713
2715
2714 #-------------------------------------------------------------------------
2716 #-------------------------------------------------------------------------
2715 # Utilities
2717 # Utilities
2716 #-------------------------------------------------------------------------
2718 #-------------------------------------------------------------------------
2717
2719
2718 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2720 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2719 """Expand python variables in a string.
2721 """Expand python variables in a string.
2720
2722
2721 The depth argument indicates how many frames above the caller should
2723 The depth argument indicates how many frames above the caller should
2722 be walked to look for the local namespace where to expand variables.
2724 be walked to look for the local namespace where to expand variables.
2723
2725
2724 The global namespace for expansion is always the user's interactive
2726 The global namespace for expansion is always the user's interactive
2725 namespace.
2727 namespace.
2726 """
2728 """
2727 ns = self.user_ns.copy()
2729 ns = self.user_ns.copy()
2728 ns.update(sys._getframe(depth+1).f_locals)
2730 ns.update(sys._getframe(depth+1).f_locals)
2729 ns.pop('self', None)
2731 ns.pop('self', None)
2730 try:
2732 try:
2731 cmd = formatter.format(cmd, **ns)
2733 cmd = formatter.format(cmd, **ns)
2732 except Exception:
2734 except Exception:
2733 # if formatter couldn't format, just let it go untransformed
2735 # if formatter couldn't format, just let it go untransformed
2734 pass
2736 pass
2735 return cmd
2737 return cmd
2736
2738
2737 def mktempfile(self, data=None, prefix='ipython_edit_'):
2739 def mktempfile(self, data=None, prefix='ipython_edit_'):
2738 """Make a new tempfile and return its filename.
2740 """Make a new tempfile and return its filename.
2739
2741
2740 This makes a call to tempfile.mktemp, but it registers the created
2742 This makes a call to tempfile.mktemp, but it registers the created
2741 filename internally so ipython cleans it up at exit time.
2743 filename internally so ipython cleans it up at exit time.
2742
2744
2743 Optional inputs:
2745 Optional inputs:
2744
2746
2745 - data(None): if data is given, it gets written out to the temp file
2747 - data(None): if data is given, it gets written out to the temp file
2746 immediately, and the file is closed again."""
2748 immediately, and the file is closed again."""
2747
2749
2748 filename = tempfile.mktemp('.py', prefix)
2750 filename = tempfile.mktemp('.py', prefix)
2749 self.tempfiles.append(filename)
2751 self.tempfiles.append(filename)
2750
2752
2751 if data:
2753 if data:
2752 tmp_file = open(filename,'w')
2754 tmp_file = open(filename,'w')
2753 tmp_file.write(data)
2755 tmp_file.write(data)
2754 tmp_file.close()
2756 tmp_file.close()
2755 return filename
2757 return filename
2756
2758
2757 # TODO: This should be removed when Term is refactored.
2759 # TODO: This should be removed when Term is refactored.
2758 def write(self,data):
2760 def write(self,data):
2759 """Write a string to the default output"""
2761 """Write a string to the default output"""
2760 io.stdout.write(data)
2762 io.stdout.write(data)
2761
2763
2762 # TODO: This should be removed when Term is refactored.
2764 # TODO: This should be removed when Term is refactored.
2763 def write_err(self,data):
2765 def write_err(self,data):
2764 """Write a string to the default error output"""
2766 """Write a string to the default error output"""
2765 io.stderr.write(data)
2767 io.stderr.write(data)
2766
2768
2767 def ask_yes_no(self, prompt, default=None):
2769 def ask_yes_no(self, prompt, default=None):
2768 if self.quiet:
2770 if self.quiet:
2769 return True
2771 return True
2770 return ask_yes_no(prompt,default)
2772 return ask_yes_no(prompt,default)
2771
2773
2772 def show_usage(self):
2774 def show_usage(self):
2773 """Show a usage message"""
2775 """Show a usage message"""
2774 page.page(IPython.core.usage.interactive_usage)
2776 page.page(IPython.core.usage.interactive_usage)
2775
2777
2776 def extract_input_lines(self, range_str, raw=False):
2778 def extract_input_lines(self, range_str, raw=False):
2777 """Return as a string a set of input history slices.
2779 """Return as a string a set of input history slices.
2778
2780
2779 Parameters
2781 Parameters
2780 ----------
2782 ----------
2781 range_str : string
2783 range_str : string
2782 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
2784 The set of slices is given as a string, like "~5/6-~4/2 4:8 9",
2783 since this function is for use by magic functions which get their
2785 since this function is for use by magic functions which get their
2784 arguments as strings. The number before the / is the session
2786 arguments as strings. The number before the / is the session
2785 number: ~n goes n back from the current session.
2787 number: ~n goes n back from the current session.
2786
2788
2787 Optional Parameters:
2789 Optional Parameters:
2788 - raw(False): by default, the processed input is used. If this is
2790 - raw(False): by default, the processed input is used. If this is
2789 true, the raw input history is used instead.
2791 true, the raw input history is used instead.
2790
2792
2791 Note that slices can be called with two notations:
2793 Note that slices can be called with two notations:
2792
2794
2793 N:M -> standard python form, means including items N...(M-1).
2795 N:M -> standard python form, means including items N...(M-1).
2794
2796
2795 N-M -> include items N..M (closed endpoint)."""
2797 N-M -> include items N..M (closed endpoint)."""
2796 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
2798 lines = self.history_manager.get_range_by_str(range_str, raw=raw)
2797 return "\n".join(x for _, _, x in lines)
2799 return "\n".join(x for _, _, x in lines)
2798
2800
2799 def find_user_code(self, target, raw=True, py_only=False):
2801 def find_user_code(self, target, raw=True, py_only=False):
2800 """Get a code string from history, file, url, or a string or macro.
2802 """Get a code string from history, file, url, or a string or macro.
2801
2803
2802 This is mainly used by magic functions.
2804 This is mainly used by magic functions.
2803
2805
2804 Parameters
2806 Parameters
2805 ----------
2807 ----------
2806
2808
2807 target : str
2809 target : str
2808
2810
2809 A string specifying code to retrieve. This will be tried respectively
2811 A string specifying code to retrieve. This will be tried respectively
2810 as: ranges of input history (see %history for syntax), url,
2812 as: ranges of input history (see %history for syntax), url,
2811 correspnding .py file, filename, or an expression evaluating to a
2813 correspnding .py file, filename, or an expression evaluating to a
2812 string or Macro in the user namespace.
2814 string or Macro in the user namespace.
2813
2815
2814 raw : bool
2816 raw : bool
2815 If true (default), retrieve raw history. Has no effect on the other
2817 If true (default), retrieve raw history. Has no effect on the other
2816 retrieval mechanisms.
2818 retrieval mechanisms.
2817
2819
2818 py_only : bool (default False)
2820 py_only : bool (default False)
2819 Only try to fetch python code, do not try alternative methods to decode file
2821 Only try to fetch python code, do not try alternative methods to decode file
2820 if unicode fails.
2822 if unicode fails.
2821
2823
2822 Returns
2824 Returns
2823 -------
2825 -------
2824 A string of code.
2826 A string of code.
2825
2827
2826 ValueError is raised if nothing is found, and TypeError if it evaluates
2828 ValueError is raised if nothing is found, and TypeError if it evaluates
2827 to an object of another type. In each case, .args[0] is a printable
2829 to an object of another type. In each case, .args[0] is a printable
2828 message.
2830 message.
2829 """
2831 """
2830 code = self.extract_input_lines(target, raw=raw) # Grab history
2832 code = self.extract_input_lines(target, raw=raw) # Grab history
2831 if code:
2833 if code:
2832 return code
2834 return code
2833 utarget = unquote_filename(target)
2835 utarget = unquote_filename(target)
2834 try:
2836 try:
2835 if utarget.startswith(('http://', 'https://')):
2837 if utarget.startswith(('http://', 'https://')):
2836 return openpy.read_py_url(utarget, skip_encoding_cookie=True)
2838 return openpy.read_py_url(utarget, skip_encoding_cookie=True)
2837 except UnicodeDecodeError:
2839 except UnicodeDecodeError:
2838 if not py_only :
2840 if not py_only :
2839 response = urllib.urlopen(target)
2841 response = urllib.urlopen(target)
2840 return response.read().decode('latin1')
2842 return response.read().decode('latin1')
2841 raise ValueError(("'%s' seem to be unreadable.") % utarget)
2843 raise ValueError(("'%s' seem to be unreadable.") % utarget)
2842
2844
2843 potential_target = [target]
2845 potential_target = [target]
2844 try :
2846 try :
2845 potential_target.insert(0,get_py_filename(target))
2847 potential_target.insert(0,get_py_filename(target))
2846 except IOError:
2848 except IOError:
2847 pass
2849 pass
2848
2850
2849 for tgt in potential_target :
2851 for tgt in potential_target :
2850 if os.path.isfile(tgt): # Read file
2852 if os.path.isfile(tgt): # Read file
2851 try :
2853 try :
2852 return openpy.read_py_file(tgt, skip_encoding_cookie=True)
2854 return openpy.read_py_file(tgt, skip_encoding_cookie=True)
2853 except UnicodeDecodeError :
2855 except UnicodeDecodeError :
2854 if not py_only :
2856 if not py_only :
2855 with io_open(tgt,'r', encoding='latin1') as f :
2857 with io_open(tgt,'r', encoding='latin1') as f :
2856 return f.read()
2858 return f.read()
2857 raise ValueError(("'%s' seem to be unreadable.") % target)
2859 raise ValueError(("'%s' seem to be unreadable.") % target)
2858
2860
2859 try: # User namespace
2861 try: # User namespace
2860 codeobj = eval(target, self.user_ns)
2862 codeobj = eval(target, self.user_ns)
2861 except Exception:
2863 except Exception:
2862 raise ValueError(("'%s' was not found in history, as a file, url, "
2864 raise ValueError(("'%s' was not found in history, as a file, url, "
2863 "nor in the user namespace.") % target)
2865 "nor in the user namespace.") % target)
2864 if isinstance(codeobj, basestring):
2866 if isinstance(codeobj, basestring):
2865 return codeobj
2867 return codeobj
2866 elif isinstance(codeobj, Macro):
2868 elif isinstance(codeobj, Macro):
2867 return codeobj.value
2869 return codeobj.value
2868
2870
2869 raise TypeError("%s is neither a string nor a macro." % target,
2871 raise TypeError("%s is neither a string nor a macro." % target,
2870 codeobj)
2872 codeobj)
2871
2873
2872 #-------------------------------------------------------------------------
2874 #-------------------------------------------------------------------------
2873 # Things related to IPython exiting
2875 # Things related to IPython exiting
2874 #-------------------------------------------------------------------------
2876 #-------------------------------------------------------------------------
2875 def atexit_operations(self):
2877 def atexit_operations(self):
2876 """This will be executed at the time of exit.
2878 """This will be executed at the time of exit.
2877
2879
2878 Cleanup operations and saving of persistent data that is done
2880 Cleanup operations and saving of persistent data that is done
2879 unconditionally by IPython should be performed here.
2881 unconditionally by IPython should be performed here.
2880
2882
2881 For things that may depend on startup flags or platform specifics (such
2883 For things that may depend on startup flags or platform specifics (such
2882 as having readline or not), register a separate atexit function in the
2884 as having readline or not), register a separate atexit function in the
2883 code that has the appropriate information, rather than trying to
2885 code that has the appropriate information, rather than trying to
2884 clutter
2886 clutter
2885 """
2887 """
2886 # Close the history session (this stores the end time and line count)
2888 # Close the history session (this stores the end time and line count)
2887 # this must be *before* the tempfile cleanup, in case of temporary
2889 # this must be *before* the tempfile cleanup, in case of temporary
2888 # history db
2890 # history db
2889 self.history_manager.end_session()
2891 self.history_manager.end_session()
2890
2892
2891 # Cleanup all tempfiles left around
2893 # Cleanup all tempfiles left around
2892 for tfile in self.tempfiles:
2894 for tfile in self.tempfiles:
2893 try:
2895 try:
2894 os.unlink(tfile)
2896 os.unlink(tfile)
2895 except OSError:
2897 except OSError:
2896 pass
2898 pass
2897
2899
2898 # Clear all user namespaces to release all references cleanly.
2900 # Clear all user namespaces to release all references cleanly.
2899 self.reset(new_session=False)
2901 self.reset(new_session=False)
2900
2902
2901 # Run user hooks
2903 # Run user hooks
2902 self.hooks.shutdown_hook()
2904 self.hooks.shutdown_hook()
2903
2905
2904 def cleanup(self):
2906 def cleanup(self):
2905 self.restore_sys_module_state()
2907 self.restore_sys_module_state()
2906
2908
2907
2909
2908 class InteractiveShellABC(object):
2910 class InteractiveShellABC(object):
2909 """An abstract base class for InteractiveShell."""
2911 """An abstract base class for InteractiveShell."""
2910 __metaclass__ = abc.ABCMeta
2912 __metaclass__ = abc.ABCMeta
2911
2913
2912 InteractiveShellABC.register(InteractiveShell)
2914 InteractiveShellABC.register(InteractiveShell)
@@ -1,359 +1,361 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 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2008 The IPython Development Team
8 # Copyright (C) 2008 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 # Stdlib
17 # Stdlib
18 import os
18 import os
19 import re
19 import re
20 import sys
20 import sys
21 import types
21 import types
22 from getopt import getopt, GetoptError
22 from getopt import getopt, GetoptError
23
23
24 # Our own
24 # Our own
25 from IPython.config.configurable import Configurable
25 from IPython.config.configurable import Configurable
26 from IPython.core import oinspect
26 from IPython.core import oinspect
27 from IPython.core.error import UsageError
27 from IPython.core.error import UsageError
28 from IPython.core.prefilter import ESC_MAGIC
28 from IPython.core.prefilter import ESC_MAGIC
29 from IPython.external.decorator import decorator
29 from IPython.external.decorator import decorator
30 from IPython.utils.ipstruct import Struct
30 from IPython.utils.ipstruct import Struct
31 from IPython.utils.process import arg_split
31 from IPython.utils.process import arg_split
32 from IPython.utils.traitlets import Bool, Dict, Instance
32 from IPython.utils.traitlets import Bool, Dict, Instance
33 from IPython.utils.warn import error
33 from IPython.utils.warn import error
34
34
35 #-----------------------------------------------------------------------------
35 #-----------------------------------------------------------------------------
36 # Globals
36 # Globals
37 #-----------------------------------------------------------------------------
37 #-----------------------------------------------------------------------------
38
38
39 # A dict we'll use for each class that has magics, used as temporary storage to
39 # A dict we'll use for each class that has magics, used as temporary storage to
40 # pass information between the @line/cell_magic method decorators and the
40 # pass information between the @line/cell_magic method decorators and the
41 # @register_magics class decorator, because the method decorators have no
41 # @register_magics class decorator, because the method decorators have no
42 # access to the class when they run. See for more details:
42 # access to the class when they run. See for more details:
43 # http://stackoverflow.com/questions/2366713/can-a-python-decorator-of-an-instance-method-access-the-class
43 # http://stackoverflow.com/questions/2366713/can-a-python-decorator-of-an-instance-method-access-the-class
44
44
45 magics = dict(line={}, cell={})
45 magics = dict(line={}, cell={})
46
46
47 magic_types = ('line', 'cell')
47 magic_types = ('line', 'cell')
48
48
49 #-----------------------------------------------------------------------------
49 #-----------------------------------------------------------------------------
50 # Utility classes and functions
50 # Utility classes and functions
51 #-----------------------------------------------------------------------------
51 #-----------------------------------------------------------------------------
52
52
53 class Bunch: pass
53 class Bunch: pass
54
54
55
55
56 def on_off(tag):
56 def on_off(tag):
57 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
57 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 return ['OFF','ON'][tag]
58 return ['OFF','ON'][tag]
59
59
60
60
61 def compress_dhist(dh):
61 def compress_dhist(dh):
62 head, tail = dh[:-10], dh[-10:]
62 head, tail = dh[:-10], dh[-10:]
63
63
64 newhead = []
64 newhead = []
65 done = set()
65 done = set()
66 for h in head:
66 for h in head:
67 if h in done:
67 if h in done:
68 continue
68 continue
69 newhead.append(h)
69 newhead.append(h)
70 done.add(h)
70 done.add(h)
71
71
72 return newhead + tail
72 return newhead + tail
73
73
74
74
75 def needs_local_scope(func):
75 def needs_local_scope(func):
76 """Decorator to mark magic functions which need to local scope to run."""
76 """Decorator to mark magic functions which need to local scope to run."""
77 func.needs_local_scope = True
77 func.needs_local_scope = True
78 return func
78 return func
79
79
80 #-----------------------------------------------------------------------------
80 #-----------------------------------------------------------------------------
81 # Class and method decorators for registering magics
81 # Class and method decorators for registering magics
82 #-----------------------------------------------------------------------------
82 #-----------------------------------------------------------------------------
83
83
84 def register_magics(cls):
84 def register_magics(cls):
85 cls.registered = True
85 cls.registered = True
86 cls.magics = dict(line = magics['line'],
86 cls.magics = dict(line = magics['line'],
87 cell = magics['cell'])
87 cell = magics['cell'])
88 magics['line'] = {}
88 magics['line'] = {}
89 magics['cell'] = {}
89 magics['cell'] = {}
90 return cls
90 return cls
91
91
92
92
93 def validate_type(magic_type):
93 def validate_type(magic_type):
94 if magic_type not in magic_types:
94 if magic_type not in magic_types:
95 raise ValueError('magic_type must be one of %s, %s given' %
95 raise ValueError('magic_type must be one of %s, %s given' %
96 magic_types, magic_type)
96 magic_types, magic_type)
97
97
98
98
99 def _magic_marker(magic_type):
99 def _magic_marker(magic_type):
100 validate_type(magic_type)
100 validate_type(magic_type)
101
101
102 # This is a closure to capture the magic_type. We could also use a class,
102 # This is a closure to capture the magic_type. We could also use a class,
103 # but it's overkill for just that one bit of state.
103 # but it's overkill for just that one bit of state.
104 def magic_deco(arg):
104 def magic_deco(arg):
105 call = lambda f, *a, **k: f(*a, **k)
105 call = lambda f, *a, **k: f(*a, **k)
106
106
107 if callable(arg):
107 if callable(arg):
108 # "Naked" decorator call (just @foo, no args)
108 # "Naked" decorator call (just @foo, no args)
109 func = arg
109 func = arg
110 name = func.func_name
110 name = func.func_name
111 func.magic_name = name
111 func.magic_name = name
112 retval = decorator(call, func)
112 retval = decorator(call, func)
113 magics[magic_type][name] = name
113 elif isinstance(arg, basestring):
114 elif isinstance(arg, basestring):
114 # Decorator called with arguments (@foo('bar'))
115 # Decorator called with arguments (@foo('bar'))
115 name = arg
116 name = arg
116 def mark(func, *a, **kw):
117 def mark(func, *a, **kw):
117 func.magic_name = name
118 func.magic_name = name
119 magics[magic_type][name] = func.func_name
118 return decorator(call, func)
120 return decorator(call, func)
119 retval = mark
121 retval = mark
120 else:
122 else:
121 raise ValueError("Decorator can only be called with "
123 raise ValueError("Decorator can only be called with "
122 "string or function")
124 "string or function")
123 # Record the magic function in the global table that will then be
124 # appended to the class via the register_magics class decorator
125 #print 'magics:', magics # dbg
126 magics[magic_type][name] = retval
127
125
128 return retval
126 return retval
129
127
130 return magic_deco
128 return magic_deco
131
129
132
130
133 line_magic = _magic_marker('line')
131 line_magic = _magic_marker('line')
134 cell_magic = _magic_marker('cell')
132 cell_magic = _magic_marker('cell')
135
133
136 #-----------------------------------------------------------------------------
134 #-----------------------------------------------------------------------------
137 # Core Magic classes
135 # Core Magic classes
138 #-----------------------------------------------------------------------------
136 #-----------------------------------------------------------------------------
139
137
140 class MagicsManager(Configurable):
138 class MagicsManager(Configurable):
141 """Object that handles all magic-related functionality for IPython.
139 """Object that handles all magic-related functionality for IPython.
142 """
140 """
143 # Non-configurable class attributes
141 # Non-configurable class attributes
144 magics = Dict
142 magics = Dict
145
143
146 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
144 shell = Instance('IPython.core.interactiveshell.InteractiveShellABC')
147
145
148 auto_magic = Bool
146 auto_magic = Bool
149
147
150 _auto_status = [
148 _auto_status = [
151 'Automagic is OFF, % prefix IS needed for magic functions.',
149 'Automagic is OFF, % prefix IS needed for magic functions.',
152 'Automagic is ON, % prefix IS NOT needed for magic functions.']
150 'Automagic is ON, % prefix IS NOT needed for magic functions.']
153
151
154 user_magics = Instance('IPython.core.magic_functions.UserMagics')
152 user_magics = Instance('IPython.core.magic_functions.UserMagics')
155
153
156 def __init__(self, shell=None, config=None, user_magics=None, **traits):
154 def __init__(self, shell=None, config=None, user_magics=None, **traits):
157
155
158 super(MagicsManager, self).__init__(shell=shell, config=config,
156 super(MagicsManager, self).__init__(shell=shell, config=config,
159 user_magics=user_magics, **traits)
157 user_magics=user_magics, **traits)
158 self.magics = dict(line={}, cell={})
160
159
161 def auto_status(self):
160 def auto_status(self):
162 """Return descriptive string with automagic status."""
161 """Return descriptive string with automagic status."""
163 return self._auto_status[self.auto_magic]
162 return self._auto_status[self.auto_magic]
164
163
165 def lsmagic(self):
164 def lsmagic(self):
166 """Return a dict of currently available magic functions.
165 """Return a dict of currently available magic functions.
167
166
168 The return dict has the keys 'line' and 'cell', corresponding to the
167 The return dict has the keys 'line' and 'cell', corresponding to the
169 two types of magics we support. Each value is a list of names.
168 two types of magics we support. Each value is a list of names.
170 """
169 """
171 return self.magics
170 return self.magics
172
171
173 def register(self, *magics):
172 def register(self, *magic_objects):
174 """Register one or more instances of Magics.
173 """Register one or more instances of Magics.
175 """
174 """
176 # Start by validating them to ensure they have all had their magic
175 # Start by validating them to ensure they have all had their magic
177 # methods registered at the instance level
176 # methods registered at the instance level
178 for m in magics:
177 for m in magic_objects:
179 if not m.registered:
178 if not m.registered:
180 raise ValueError("Class of magics %r was constructed without "
179 raise ValueError("Class of magics %r was constructed without "
181 "the @register_macics class decorator")
180 "the @register_macics class decorator")
182 if type(m) is type:
181 for mtype in magic_types:
183 # If we're given an uninstantiated class
182 self.magics[mtype].update(m.magics[mtype])
184 m = m(self.shell)
185
186 self.magics.update(m.magics)
187
183
188 def define_magic(self, magic_name, func, magic_type='line'):
184 def define_magic(self, magic_name, func, magic_type='line'):
189 """Expose own function as magic function for ipython
185 """Expose own function as magic function for ipython
190
186
191 Example::
187 Example::
192
188
193 def foo_impl(self, parameter_s=''):
189 def foo_impl(self, parameter_s=''):
194 'My very own magic!. (Use docstrings, IPython reads them).'
190 'My very own magic!. (Use docstrings, IPython reads them).'
195 print 'Magic function. Passed parameter is between < >:'
191 print 'Magic function. Passed parameter is between < >:'
196 print '<%s>' % parameter_s
192 print '<%s>' % parameter_s
197 print 'The self object is:', self
193 print 'The self object is:', self
198
194
199 ip.define_magic('foo', foo_impl)
195 ip.define_magic('foo', foo_impl)
200 """
196 """
201 # Create the new method in the user_magics and register it in the
197 # Create the new method in the user_magics and register it in the
202 # global table
198 # global table
203 self.user_magics.new_magic(magic_name, func, magic_type)
199 self.user_magics.new_magic(magic_name, func, magic_type)
204 self.magics[magic_type][magic_name] = \
200 self.magics[magic_type][magic_name] = \
205 self.user_magics.magics[magic_type][magic_name]
201 self.user_magics.magics[magic_type][magic_name]
206
202
207 # Key base class that provides the central functionality for magics.
203 # Key base class that provides the central functionality for magics.
208
204
209 class Magics(object):
205 class Magics(object):
210 """Base class for implementing magic functions.
206 """Base class for implementing magic functions.
211
207
212 Shell functions which can be reached as %function_name. All magic
208 Shell functions which can be reached as %function_name. All magic
213 functions should accept a string, which they can parse for their own
209 functions should accept a string, which they can parse for their own
214 needs. This can make some functions easier to type, eg `%cd ../`
210 needs. This can make some functions easier to type, eg `%cd ../`
215 vs. `%cd("../")`
211 vs. `%cd("../")`
216
212
217 Classes providing magic functions need to subclass this class, and they
213 Classes providing magic functions need to subclass this class, and they
218 MUST:
214 MUST:
219
215
220 - Use the method decorators `@line_magic` and `@cell_magic` to decorate
216 - Use the method decorators `@line_magic` and `@cell_magic` to decorate
221 individual methods as magic functions, AND
217 individual methods as magic functions, AND
222
218
223 - Use the class decorator `@register_magics` to ensure that the magic
219 - Use the class decorator `@register_magics` to ensure that the magic
224 methods are properly registered at the instance level upon instance
220 methods are properly registered at the instance level upon instance
225 initialization.
221 initialization.
226
222
227 See :mod:`magic_functions` for examples of actual implementation classes.
223 See :mod:`magic_functions` for examples of actual implementation classes.
228 """
224 """
229 # Dict holding all command-line options for each magic.
225 # Dict holding all command-line options for each magic.
230 options_table = None
226 options_table = None
231
227
232 # Non-configurable class attributes
228 # Non-configurable class attributes
233 magics = Dict
229 magics = Dict
234
230
235 class __metaclass__(type):
231 class __metaclass__(type):
236 def __new__(cls, name, bases, dct):
232 def __new__(cls, name, bases, dct):
237 cls.registered = False
233 cls.registered = False
238 return type.__new__(cls, name, bases, dct)
234 return type.__new__(cls, name, bases, dct)
239
235
240 def __init__(self, shell):
236 def __init__(self, shell):
241 if not(self.__class__.registered):
237 if not(self.__class__.registered):
242 raise ValueError('unregistered Magics')
238 raise ValueError('unregistered Magics')
243 self.shell = shell
239 self.shell = shell
240 mtab = dict(line={}, cell={})
241 for mtype in magic_types:
242 tab = mtab[mtype]
243 for magic_name, meth_name in self.magics[mtype].iteritems():
244 tab[magic_name] = getattr(self, meth_name)
245 self.magics.update(mtab)
244
246
245 def arg_err(self,func):
247 def arg_err(self,func):
246 """Print docstring if incorrect arguments were passed"""
248 """Print docstring if incorrect arguments were passed"""
247 print 'Error in arguments:'
249 print 'Error in arguments:'
248 print oinspect.getdoc(func)
250 print oinspect.getdoc(func)
249
251
250 def format_latex(self,strng):
252 def format_latex(self,strng):
251 """Format a string for latex inclusion."""
253 """Format a string for latex inclusion."""
252
254
253 # Characters that need to be escaped for latex:
255 # Characters that need to be escaped for latex:
254 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
256 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
255 # Magic command names as headers:
257 # Magic command names as headers:
256 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
258 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
257 re.MULTILINE)
259 re.MULTILINE)
258 # Magic commands
260 # Magic commands
259 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
261 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
260 re.MULTILINE)
262 re.MULTILINE)
261 # Paragraph continue
263 # Paragraph continue
262 par_re = re.compile(r'\\$',re.MULTILINE)
264 par_re = re.compile(r'\\$',re.MULTILINE)
263
265
264 # The "\n" symbol
266 # The "\n" symbol
265 newline_re = re.compile(r'\\n')
267 newline_re = re.compile(r'\\n')
266
268
267 # Now build the string for output:
269 # Now build the string for output:
268 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
270 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
269 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
271 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
270 strng)
272 strng)
271 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
273 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
272 strng = par_re.sub(r'\\\\',strng)
274 strng = par_re.sub(r'\\\\',strng)
273 strng = escape_re.sub(r'\\\1',strng)
275 strng = escape_re.sub(r'\\\1',strng)
274 strng = newline_re.sub(r'\\textbackslash{}n',strng)
276 strng = newline_re.sub(r'\\textbackslash{}n',strng)
275 return strng
277 return strng
276
278
277 def parse_options(self, arg_str, opt_str, *long_opts, **kw):
279 def parse_options(self, arg_str, opt_str, *long_opts, **kw):
278 """Parse options passed to an argument string.
280 """Parse options passed to an argument string.
279
281
280 The interface is similar to that of getopt(), but it returns back a
282 The interface is similar to that of getopt(), but it returns back a
281 Struct with the options as keys and the stripped argument string still
283 Struct with the options as keys and the stripped argument string still
282 as a string.
284 as a string.
283
285
284 arg_str is quoted as a true sys.argv vector by using shlex.split.
286 arg_str is quoted as a true sys.argv vector by using shlex.split.
285 This allows us to easily expand variables, glob files, quote
287 This allows us to easily expand variables, glob files, quote
286 arguments, etc.
288 arguments, etc.
287
289
288 Options:
290 Options:
289 -mode: default 'string'. If given as 'list', the argument string is
291 -mode: default 'string'. If given as 'list', the argument string is
290 returned as a list (split on whitespace) instead of a string.
292 returned as a list (split on whitespace) instead of a string.
291
293
292 -list_all: put all option values in lists. Normally only options
294 -list_all: put all option values in lists. Normally only options
293 appearing more than once are put in a list.
295 appearing more than once are put in a list.
294
296
295 -posix (True): whether to split the input line in POSIX mode or not,
297 -posix (True): whether to split the input line in POSIX mode or not,
296 as per the conventions outlined in the shlex module from the
298 as per the conventions outlined in the shlex module from the
297 standard library."""
299 standard library."""
298
300
299 # inject default options at the beginning of the input line
301 # inject default options at the beginning of the input line
300 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
302 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
301 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
303 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
302
304
303 mode = kw.get('mode','string')
305 mode = kw.get('mode','string')
304 if mode not in ['string','list']:
306 if mode not in ['string','list']:
305 raise ValueError,'incorrect mode given: %s' % mode
307 raise ValueError,'incorrect mode given: %s' % mode
306 # Get options
308 # Get options
307 list_all = kw.get('list_all',0)
309 list_all = kw.get('list_all',0)
308 posix = kw.get('posix', os.name == 'posix')
310 posix = kw.get('posix', os.name == 'posix')
309 strict = kw.get('strict', True)
311 strict = kw.get('strict', True)
310
312
311 # Check if we have more than one argument to warrant extra processing:
313 # Check if we have more than one argument to warrant extra processing:
312 odict = {} # Dictionary with options
314 odict = {} # Dictionary with options
313 args = arg_str.split()
315 args = arg_str.split()
314 if len(args) >= 1:
316 if len(args) >= 1:
315 # If the list of inputs only has 0 or 1 thing in it, there's no
317 # If the list of inputs only has 0 or 1 thing in it, there's no
316 # need to look for options
318 # need to look for options
317 argv = arg_split(arg_str, posix, strict)
319 argv = arg_split(arg_str, posix, strict)
318 # Do regular option processing
320 # Do regular option processing
319 try:
321 try:
320 opts,args = getopt(argv,opt_str,*long_opts)
322 opts,args = getopt(argv,opt_str,*long_opts)
321 except GetoptError,e:
323 except GetoptError,e:
322 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
324 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
323 " ".join(long_opts)))
325 " ".join(long_opts)))
324 for o,a in opts:
326 for o,a in opts:
325 if o.startswith('--'):
327 if o.startswith('--'):
326 o = o[2:]
328 o = o[2:]
327 else:
329 else:
328 o = o[1:]
330 o = o[1:]
329 try:
331 try:
330 odict[o].append(a)
332 odict[o].append(a)
331 except AttributeError:
333 except AttributeError:
332 odict[o] = [odict[o],a]
334 odict[o] = [odict[o],a]
333 except KeyError:
335 except KeyError:
334 if list_all:
336 if list_all:
335 odict[o] = [a]
337 odict[o] = [a]
336 else:
338 else:
337 odict[o] = a
339 odict[o] = a
338
340
339 # Prepare opts,args for return
341 # Prepare opts,args for return
340 opts = Struct(odict)
342 opts = Struct(odict)
341 if mode == 'string':
343 if mode == 'string':
342 args = ' '.join(args)
344 args = ' '.join(args)
343
345
344 return opts,args
346 return opts,args
345
347
346 def default_option(self, fn, optstr):
348 def default_option(self, fn, optstr):
347 """Make an entry in the options_table for fn, with value optstr"""
349 """Make an entry in the options_table for fn, with value optstr"""
348
350
349 if fn not in self.lsmagic():
351 if fn not in self.lsmagic():
350 error("%s is not a magic function" % fn)
352 error("%s is not a magic function" % fn)
351 self.options_table[fn] = optstr
353 self.options_table[fn] = optstr
352
354
353 def new_magic(self, magic_name, func, magic_type='line'):
355 def new_magic(self, magic_name, func, magic_type='line'):
354 """TODO
356 """TODO
355 """
357 """
356 validate_type(magic_type)
358 validate_type(magic_type)
357 meth = types.MethodType(func, self)
359 meth = types.MethodType(func, self)
358 setattr(self, magic_name, meth)
360 setattr(self, magic_name, meth)
359 self.magics[magic_type][magic_name] = meth
361 self.magics[magic_type][magic_name] = meth
@@ -1,3732 +1,3731 b''
1 """Magic functions for InteractiveShell.
1 """Magic functions for InteractiveShell.
2 """
2 """
3
3
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
6 # Copyright (C) 2001 Fernando Perez <fperez@colorado.edu>
6 # Copyright (C) 2001 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2008 The IPython Development Team
7 # Copyright (C) 2008 The IPython Development Team
8
8
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13 # Imports
13 # Imports
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15
15
16 import __builtin__ as builtin_mod
16 import __builtin__ as builtin_mod
17 import bdb
17 import bdb
18 import gc
18 import gc
19 import inspect
19 import inspect
20 import io
20 import io
21 import json
21 import json
22 import os
22 import os
23 import re
23 import re
24 import sys
24 import sys
25 import time
25 import time
26 from StringIO import StringIO
26 from StringIO import StringIO
27 from pprint import pformat
27 from pprint import pformat
28 from urllib2 import urlopen
28 from urllib2 import urlopen
29
29
30 # cProfile was added in Python2.5
30 # cProfile was added in Python2.5
31 try:
31 try:
32 import cProfile as profile
32 import cProfile as profile
33 import pstats
33 import pstats
34 except ImportError:
34 except ImportError:
35 # profile isn't bundled by default in Debian for license reasons
35 # profile isn't bundled by default in Debian for license reasons
36 try:
36 try:
37 import profile, pstats
37 import profile, pstats
38 except ImportError:
38 except ImportError:
39 profile = pstats = None
39 profile = pstats = None
40
40
41 from IPython.config.application import Application
41 from IPython.config.application import Application
42 from IPython.core import debugger, oinspect
42 from IPython.core import debugger, oinspect
43 from IPython.core import magic_arguments, page
43 from IPython.core import magic_arguments, page
44 from IPython.core.error import UsageError, StdinNotImplementedError, TryNext
44 from IPython.core.error import UsageError, StdinNotImplementedError, TryNext
45 from IPython.core.macro import Macro
45 from IPython.core.macro import Macro
46 from IPython.core.magic import (Bunch, Magics, compress_dhist,
46 from IPython.core.magic import (Bunch, Magics, compress_dhist,
47 on_off, needs_local_scope,
47 on_off, needs_local_scope,
48 register_magics, line_magic, cell_magic)
48 register_magics, line_magic, cell_magic)
49 from IPython.core.prefilter import ESC_MAGIC
49 from IPython.core.prefilter import ESC_MAGIC
50 from IPython.testing.skipdoctest import skip_doctest
50 from IPython.testing.skipdoctest import skip_doctest
51 from IPython.utils import openpy
51 from IPython.utils import openpy
52 from IPython.utils import py3compat
52 from IPython.utils import py3compat
53 from IPython.utils.encoding import DEFAULT_ENCODING
53 from IPython.utils.encoding import DEFAULT_ENCODING
54 from IPython.utils.io import file_read, nlprint
54 from IPython.utils.io import file_read, nlprint
55 from IPython.utils.ipstruct import Struct
55 from IPython.utils.ipstruct import Struct
56 from IPython.utils.module_paths import find_mod
56 from IPython.utils.module_paths import find_mod
57 from IPython.utils.path import get_py_filename, unquote_filename
57 from IPython.utils.path import get_py_filename, unquote_filename
58 from IPython.utils.process import abbrev_cwd
58 from IPython.utils.process import abbrev_cwd
59 from IPython.utils.terminal import set_term_title
59 from IPython.utils.terminal import set_term_title
60 from IPython.utils.text import format_screen
60 from IPython.utils.text import format_screen
61 from IPython.utils.timing import clock, clock2
61 from IPython.utils.timing import clock, clock2
62 from IPython.utils.warn import warn, error
62 from IPython.utils.warn import warn, error
63
63
64 #-----------------------------------------------------------------------------
64 #-----------------------------------------------------------------------------
65 # Magic implementation classes
65 # Magic implementation classes
66 #-----------------------------------------------------------------------------
66 #-----------------------------------------------------------------------------
67
67
68 @register_magics
68 @register_magics
69 class UserMagics(Magics):
69 class UserMagics(Magics):
70 """Placeholder for user-defined magics to be added at runtime.
70 """Placeholder for user-defined magics to be added at runtime.
71
71
72 All magics are eventually merged into a single namespace at runtime, but we
72 All magics are eventually merged into a single namespace at runtime, but we
73 use this class to isolate the magics defined dynamically by the user into
73 use this class to isolate the magics defined dynamically by the user into
74 their own class.
74 their own class.
75 """
75 """
76
76
77
77
78 @register_magics
78 @register_magics
79 class BasicMagics(Magics):
79 class BasicMagics(Magics):
80 """Magics that provide central IPython functionality.
80 """Magics that provide central IPython functionality.
81
81
82 These are various magics that don't fit into specific categories but that
82 These are various magics that don't fit into specific categories but that
83 are all part of the base 'IPython experience'."""
83 are all part of the base 'IPython experience'."""
84
84
85 def _lsmagic(self):
85 def _lsmagic(self):
86 mesc = ESC_MAGIC
86 mesc = ESC_MAGIC
87 cesc = mesc*2
87 cesc = mesc*2
88 mman = self.shell.magics_manager
88 mman = self.shell.magics_manager
89 magics = mman.lsmagic()
89 magics = mman.lsmagic()
90 out = ['Available line magics:',
90 out = ['Available line magics:',
91 mesc + (' '+mesc).join(magics['line']),
91 mesc + (' '+mesc).join(magics['line']),
92 '',
92 '',
93 'Available cell magics:',
93 'Available cell magics:',
94 cesc + (' '+cesc).join(magics['cell']),
94 cesc + (' '+cesc).join(magics['cell']),
95 '',
95 '',
96 mman.auto_status[mman.automagic]]
96 mman.auto_status[mman.automagic]]
97 return '\n'.join(out)
97 return '\n'.join(out)
98
98
99 @line_magic
99 @line_magic
100 def lsmagic(self, parameter_s=''):
100 def lsmagic(self, parameter_s=''):
101 """List currently available magic functions."""
101 """List currently available magic functions."""
102 print self._lsmagic()
102 print self._lsmagic()
103
103
104 @line_magic
104 @line_magic
105 def magic(self, parameter_s=''):
105 def magic(self, parameter_s=''):
106 """Print information about the magic function system.
106 """Print information about the magic function system.
107
107
108 Supported formats: -latex, -brief, -rest
108 Supported formats: -latex, -brief, -rest
109 """
109 """
110
110
111 mode = ''
111 mode = ''
112 try:
112 try:
113 mode = parameter_s.split()[0][1:]
113 mode = parameter_s.split()[0][1:]
114 if mode == 'rest':
114 if mode == 'rest':
115 rest_docs = []
115 rest_docs = []
116 except:
116 except:
117 pass
117 pass
118
118
119 magic_docs = []
119 magic_docs = []
120 escapes = dict(line=ESC_MAGIC, cell=ESC_MAGIC*2)
120 escapes = dict(line=ESC_MAGIC, cell=ESC_MAGIC*2)
121 magics = self.shell.magics_manager.magics
121 magics = self.shell.magics_manager.magics
122
122
123 for mtype in ('line', 'cell'):
123 for mtype in ('line', 'cell'):
124 escape = escapes[mtype]
124 escape = escapes[mtype]
125 for fname, fn in magics:
125 for fname, fn in magics:
126
126
127 if mode == 'brief':
127 if mode == 'brief':
128 # only first line
128 # only first line
129 if fn.__doc__:
129 if fn.__doc__:
130 fndoc = fn.__doc__.split('\n',1)[0]
130 fndoc = fn.__doc__.split('\n',1)[0]
131 else:
131 else:
132 fndoc = 'No documentation'
132 fndoc = 'No documentation'
133 else:
133 else:
134 if fn.__doc__:
134 if fn.__doc__:
135 fndoc = fn.__doc__.rstrip()
135 fndoc = fn.__doc__.rstrip()
136 else:
136 else:
137 fndoc = 'No documentation'
137 fndoc = 'No documentation'
138
138
139 if mode == 'rest':
139 if mode == 'rest':
140 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %
140 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %
141 (escape, fname, fndoc))
141 (escape, fname, fndoc))
142 else:
142 else:
143 magic_docs.append('%s%s:\n\t%s\n' %
143 magic_docs.append('%s%s:\n\t%s\n' %
144 (escape, fname, fndoc))
144 (escape, fname, fndoc))
145
145
146
146
147 magic_docs = ''.join(magic_docs)
147 magic_docs = ''.join(magic_docs)
148
148
149 if mode == 'rest':
149 if mode == 'rest':
150 return "".join(rest_docs)
150 return "".join(rest_docs)
151
151
152 if mode == 'latex':
152 if mode == 'latex':
153 print self.format_latex(magic_docs)
153 print self.format_latex(magic_docs)
154 return
154 return
155 else:
155 else:
156 magic_docs = format_screen(magic_docs)
156 magic_docs = format_screen(magic_docs)
157 if mode == 'brief':
157 if mode == 'brief':
158 return magic_docs
158 return magic_docs
159
159
160 out = ["""
160 out = ["""
161 IPython's 'magic' functions
161 IPython's 'magic' functions
162 ===========================
162 ===========================
163
163
164 The magic function system provides a series of functions which allow you to
164 The magic function system provides a series of functions which allow you to
165 control the behavior of IPython itself, plus a lot of system-type
165 control the behavior of IPython itself, plus a lot of system-type
166 features. All these functions are prefixed with a % character, but parameters
166 features. All these functions are prefixed with a % character, but parameters
167 are given without parentheses or quotes.
167 are given without parentheses or quotes.
168
168
169 NOTE: If you have 'automagic' enabled (via the command line option or with the
169 NOTE: If you have 'automagic' enabled (via the command line option or with the
170 %automagic function), you don't need to type in the % explicitly. By default,
170 %automagic function), you don't need to type in the % explicitly. By default,
171 IPython ships with automagic on, so you should only rarely need the % escape.
171 IPython ships with automagic on, so you should only rarely need the % escape.
172
172
173 Example: typing '%cd mydir' (without the quotes) changes you working directory
173 Example: typing '%cd mydir' (without the quotes) changes you working directory
174 to 'mydir', if it exists.
174 to 'mydir', if it exists.
175
175
176 For a list of the available magic functions, use %lsmagic. For a description
176 For a list of the available magic functions, use %lsmagic. For a description
177 of any of them, type %magic_name?, e.g. '%cd?'.
177 of any of them, type %magic_name?, e.g. '%cd?'.
178
178
179 Currently the magic system has the following functions:""",
179 Currently the magic system has the following functions:""",
180 magic_docs,
180 magic_docs,
181 "Summary of magic functions (from %slsmagic):",
181 "Summary of magic functions (from %slsmagic):",
182 self._lsmagic(),
182 self._lsmagic(),
183 ]
183 ]
184 page.page('\n'.join(out))
184 page.page('\n'.join(out))
185
185
186
186
187 @line_magic
187 @line_magic
188 def page(self, parameter_s=''):
188 def page(self, parameter_s=''):
189 """Pretty print the object and display it through a pager.
189 """Pretty print the object and display it through a pager.
190
190
191 %page [options] OBJECT
191 %page [options] OBJECT
192
192
193 If no object is given, use _ (last output).
193 If no object is given, use _ (last output).
194
194
195 Options:
195 Options:
196
196
197 -r: page str(object), don't pretty-print it."""
197 -r: page str(object), don't pretty-print it."""
198
198
199 # After a function contributed by Olivier Aubert, slightly modified.
199 # After a function contributed by Olivier Aubert, slightly modified.
200
200
201 # Process options/args
201 # Process options/args
202 opts, args = self.parse_options(parameter_s, 'r')
202 opts, args = self.parse_options(parameter_s, 'r')
203 raw = 'r' in opts
203 raw = 'r' in opts
204
204
205 oname = args and args or '_'
205 oname = args and args or '_'
206 info = self._ofind(oname)
206 info = self._ofind(oname)
207 if info['found']:
207 if info['found']:
208 txt = (raw and str or pformat)( info['obj'] )
208 txt = (raw and str or pformat)( info['obj'] )
209 page.page(txt)
209 page.page(txt)
210 else:
210 else:
211 print 'Object `%s` not found' % oname
211 print 'Object `%s` not found' % oname
212
212
213 @line_magic
213 @line_magic
214 def profile(self, parameter_s=''):
214 def profile(self, parameter_s=''):
215 """Print your currently active IPython profile."""
215 """Print your currently active IPython profile."""
216 from IPython.core.application import BaseIPythonApplication
216 from IPython.core.application import BaseIPythonApplication
217 if BaseIPythonApplication.initialized():
217 if BaseIPythonApplication.initialized():
218 print BaseIPythonApplication.instance().profile
218 print BaseIPythonApplication.instance().profile
219 else:
219 else:
220 error("profile is an application-level value, but you don't appear to be in an IPython application")
220 error("profile is an application-level value, but you don't appear to be in an IPython application")
221
221
222 @line_magic
222 @line_magic
223 def pprint(self, parameter_s=''):
223 def pprint(self, parameter_s=''):
224 """Toggle pretty printing on/off."""
224 """Toggle pretty printing on/off."""
225 ptformatter = self.shell.display_formatter.formatters['text/plain']
225 ptformatter = self.shell.display_formatter.formatters['text/plain']
226 ptformatter.pprint = bool(1 - ptformatter.pprint)
226 ptformatter.pprint = bool(1 - ptformatter.pprint)
227 print 'Pretty printing has been turned', \
227 print 'Pretty printing has been turned', \
228 ['OFF','ON'][ptformatter.pprint]
228 ['OFF','ON'][ptformatter.pprint]
229
229
230 @line_magic
230 @line_magic
231 def colors(self, parameter_s=''):
231 def colors(self, parameter_s=''):
232 """Switch color scheme for prompts, info system and exception handlers.
232 """Switch color scheme for prompts, info system and exception handlers.
233
233
234 Currently implemented schemes: NoColor, Linux, LightBG.
234 Currently implemented schemes: NoColor, Linux, LightBG.
235
235
236 Color scheme names are not case-sensitive.
236 Color scheme names are not case-sensitive.
237
237
238 Examples
238 Examples
239 --------
239 --------
240 To get a plain black and white terminal::
240 To get a plain black and white terminal::
241
241
242 %colors nocolor
242 %colors nocolor
243 """
243 """
244
245 def color_switch_err(name):
244 def color_switch_err(name):
246 warn('Error changing %s color schemes.\n%s' %
245 warn('Error changing %s color schemes.\n%s' %
247 (name,sys.exc_info()[1]))
246 (name,sys.exc_info()[1]))
248
247
249
248
250 new_scheme = parameter_s.strip()
249 new_scheme = parameter_s.strip()
251 if not new_scheme:
250 if not new_scheme:
252 raise UsageError(
251 raise UsageError(
253 "%colors: you must specify a color scheme. See '%colors?'")
252 "%colors: you must specify a color scheme. See '%colors?'")
254 return
253 return
255 # local shortcut
254 # local shortcut
256 shell = self.shell
255 shell = self.shell
257
256
258 import IPython.utils.rlineimpl as readline
257 import IPython.utils.rlineimpl as readline
259
258
260 if not shell.colors_force and \
259 if not shell.colors_force and \
261 not readline.have_readline and sys.platform == "win32":
260 not readline.have_readline and sys.platform == "win32":
262 msg = """\
261 msg = """\
263 Proper color support under MS Windows requires the pyreadline library.
262 Proper color support under MS Windows requires the pyreadline library.
264 You can find it at:
263 You can find it at:
265 http://ipython.org/pyreadline.html
264 http://ipython.org/pyreadline.html
266 Gary's readline needs the ctypes module, from:
265 Gary's readline needs the ctypes module, from:
267 http://starship.python.net/crew/theller/ctypes
266 http://starship.python.net/crew/theller/ctypes
268 (Note that ctypes is already part of Python versions 2.5 and newer).
267 (Note that ctypes is already part of Python versions 2.5 and newer).
269
268
270 Defaulting color scheme to 'NoColor'"""
269 Defaulting color scheme to 'NoColor'"""
271 new_scheme = 'NoColor'
270 new_scheme = 'NoColor'
272 warn(msg)
271 warn(msg)
273
272
274 # readline option is 0
273 # readline option is 0
275 if not shell.colors_force and not shell.has_readline:
274 if not shell.colors_force and not shell.has_readline:
276 new_scheme = 'NoColor'
275 new_scheme = 'NoColor'
277
276
278 # Set prompt colors
277 # Set prompt colors
279 try:
278 try:
280 shell.prompt_manager.color_scheme = new_scheme
279 shell.prompt_manager.color_scheme = new_scheme
281 except:
280 except:
282 color_switch_err('prompt')
281 color_switch_err('prompt')
283 else:
282 else:
284 shell.colors = \
283 shell.colors = \
285 shell.prompt_manager.color_scheme_table.active_scheme_name
284 shell.prompt_manager.color_scheme_table.active_scheme_name
286 # Set exception colors
285 # Set exception colors
287 try:
286 try:
288 shell.InteractiveTB.set_colors(scheme = new_scheme)
287 shell.InteractiveTB.set_colors(scheme = new_scheme)
289 shell.SyntaxTB.set_colors(scheme = new_scheme)
288 shell.SyntaxTB.set_colors(scheme = new_scheme)
290 except:
289 except:
291 color_switch_err('exception')
290 color_switch_err('exception')
292
291
293 # Set info (for 'object?') colors
292 # Set info (for 'object?') colors
294 if shell.color_info:
293 if shell.color_info:
295 try:
294 try:
296 shell.inspector.set_active_scheme(new_scheme)
295 shell.inspector.set_active_scheme(new_scheme)
297 except:
296 except:
298 color_switch_err('object inspector')
297 color_switch_err('object inspector')
299 else:
298 else:
300 shell.inspector.set_active_scheme('NoColor')
299 shell.inspector.set_active_scheme('NoColor')
301
300
302 @line_magic
301 @line_magic
303 def xmode(self, parameter_s=''):
302 def xmode(self, parameter_s=''):
304 """Switch modes for the exception handlers.
303 """Switch modes for the exception handlers.
305
304
306 Valid modes: Plain, Context and Verbose.
305 Valid modes: Plain, Context and Verbose.
307
306
308 If called without arguments, acts as a toggle."""
307 If called without arguments, acts as a toggle."""
309
308
310 def xmode_switch_err(name):
309 def xmode_switch_err(name):
311 warn('Error changing %s exception modes.\n%s' %
310 warn('Error changing %s exception modes.\n%s' %
312 (name,sys.exc_info()[1]))
311 (name,sys.exc_info()[1]))
313
312
314 shell = self.shell
313 shell = self.shell
315 new_mode = parameter_s.strip().capitalize()
314 new_mode = parameter_s.strip().capitalize()
316 try:
315 try:
317 shell.InteractiveTB.set_mode(mode=new_mode)
316 shell.InteractiveTB.set_mode(mode=new_mode)
318 print 'Exception reporting mode:',shell.InteractiveTB.mode
317 print 'Exception reporting mode:',shell.InteractiveTB.mode
319 except:
318 except:
320 xmode_switch_err('user')
319 xmode_switch_err('user')
321
320
322 @line_magic
321 @line_magic
323 def quickref(self,arg):
322 def quickref(self,arg):
324 """ Show a quick reference sheet """
323 """ Show a quick reference sheet """
325 import IPython.core.usage
324 import IPython.core.usage
326 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
325 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
327 page.page(qr)
326 page.page(qr)
328
327
329 @line_magic
328 @line_magic
330 def doctest_mode(self, parameter_s=''):
329 def doctest_mode(self, parameter_s=''):
331 """Toggle doctest mode on and off.
330 """Toggle doctest mode on and off.
332
331
333 This mode is intended to make IPython behave as much as possible like a
332 This mode is intended to make IPython behave as much as possible like a
334 plain Python shell, from the perspective of how its prompts, exceptions
333 plain Python shell, from the perspective of how its prompts, exceptions
335 and output look. This makes it easy to copy and paste parts of a
334 and output look. This makes it easy to copy and paste parts of a
336 session into doctests. It does so by:
335 session into doctests. It does so by:
337
336
338 - Changing the prompts to the classic ``>>>`` ones.
337 - Changing the prompts to the classic ``>>>`` ones.
339 - Changing the exception reporting mode to 'Plain'.
338 - Changing the exception reporting mode to 'Plain'.
340 - Disabling pretty-printing of output.
339 - Disabling pretty-printing of output.
341
340
342 Note that IPython also supports the pasting of code snippets that have
341 Note that IPython also supports the pasting of code snippets that have
343 leading '>>>' and '...' prompts in them. This means that you can paste
342 leading '>>>' and '...' prompts in them. This means that you can paste
344 doctests from files or docstrings (even if they have leading
343 doctests from files or docstrings (even if they have leading
345 whitespace), and the code will execute correctly. You can then use
344 whitespace), and the code will execute correctly. You can then use
346 '%history -t' to see the translated history; this will give you the
345 '%history -t' to see the translated history; this will give you the
347 input after removal of all the leading prompts and whitespace, which
346 input after removal of all the leading prompts and whitespace, which
348 can be pasted back into an editor.
347 can be pasted back into an editor.
349
348
350 With these features, you can switch into this mode easily whenever you
349 With these features, you can switch into this mode easily whenever you
351 need to do testing and changes to doctests, without having to leave
350 need to do testing and changes to doctests, without having to leave
352 your existing IPython session.
351 your existing IPython session.
353 """
352 """
354
353
355 # Shorthands
354 # Shorthands
356 shell = self.shell
355 shell = self.shell
357 pm = shell.prompt_manager
356 pm = shell.prompt_manager
358 meta = shell.meta
357 meta = shell.meta
359 disp_formatter = self.shell.display_formatter
358 disp_formatter = self.shell.display_formatter
360 ptformatter = disp_formatter.formatters['text/plain']
359 ptformatter = disp_formatter.formatters['text/plain']
361 # dstore is a data store kept in the instance metadata bag to track any
360 # dstore is a data store kept in the instance metadata bag to track any
362 # changes we make, so we can undo them later.
361 # changes we make, so we can undo them later.
363 dstore = meta.setdefault('doctest_mode',Struct())
362 dstore = meta.setdefault('doctest_mode',Struct())
364 save_dstore = dstore.setdefault
363 save_dstore = dstore.setdefault
365
364
366 # save a few values we'll need to recover later
365 # save a few values we'll need to recover later
367 mode = save_dstore('mode',False)
366 mode = save_dstore('mode',False)
368 save_dstore('rc_pprint',ptformatter.pprint)
367 save_dstore('rc_pprint',ptformatter.pprint)
369 save_dstore('xmode',shell.InteractiveTB.mode)
368 save_dstore('xmode',shell.InteractiveTB.mode)
370 save_dstore('rc_separate_out',shell.separate_out)
369 save_dstore('rc_separate_out',shell.separate_out)
371 save_dstore('rc_separate_out2',shell.separate_out2)
370 save_dstore('rc_separate_out2',shell.separate_out2)
372 save_dstore('rc_prompts_pad_left',pm.justify)
371 save_dstore('rc_prompts_pad_left',pm.justify)
373 save_dstore('rc_separate_in',shell.separate_in)
372 save_dstore('rc_separate_in',shell.separate_in)
374 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
373 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
375 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
374 save_dstore('prompt_templates',(pm.in_template, pm.in2_template, pm.out_template))
376
375
377 if mode == False:
376 if mode == False:
378 # turn on
377 # turn on
379 pm.in_template = '>>> '
378 pm.in_template = '>>> '
380 pm.in2_template = '... '
379 pm.in2_template = '... '
381 pm.out_template = ''
380 pm.out_template = ''
382
381
383 # Prompt separators like plain python
382 # Prompt separators like plain python
384 shell.separate_in = ''
383 shell.separate_in = ''
385 shell.separate_out = ''
384 shell.separate_out = ''
386 shell.separate_out2 = ''
385 shell.separate_out2 = ''
387
386
388 pm.justify = False
387 pm.justify = False
389
388
390 ptformatter.pprint = False
389 ptformatter.pprint = False
391 disp_formatter.plain_text_only = True
390 disp_formatter.plain_text_only = True
392
391
393 shell.magic('xmode Plain')
392 shell.magic('xmode Plain')
394 else:
393 else:
395 # turn off
394 # turn off
396 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
395 pm.in_template, pm.in2_template, pm.out_template = dstore.prompt_templates
397
396
398 shell.separate_in = dstore.rc_separate_in
397 shell.separate_in = dstore.rc_separate_in
399
398
400 shell.separate_out = dstore.rc_separate_out
399 shell.separate_out = dstore.rc_separate_out
401 shell.separate_out2 = dstore.rc_separate_out2
400 shell.separate_out2 = dstore.rc_separate_out2
402
401
403 pm.justify = dstore.rc_prompts_pad_left
402 pm.justify = dstore.rc_prompts_pad_left
404
403
405 ptformatter.pprint = dstore.rc_pprint
404 ptformatter.pprint = dstore.rc_pprint
406 disp_formatter.plain_text_only = dstore.rc_plain_text_only
405 disp_formatter.plain_text_only = dstore.rc_plain_text_only
407
406
408 shell.magic('xmode ' + dstore.xmode)
407 shell.magic('xmode ' + dstore.xmode)
409
408
410 # Store new mode and inform
409 # Store new mode and inform
411 dstore.mode = bool(1-int(mode))
410 dstore.mode = bool(1-int(mode))
412 mode_label = ['OFF','ON'][dstore.mode]
411 mode_label = ['OFF','ON'][dstore.mode]
413 print 'Doctest mode is:', mode_label
412 print 'Doctest mode is:', mode_label
414
413
415 @line_magic
414 @line_magic
416 def gui(self, parameter_s=''):
415 def gui(self, parameter_s=''):
417 """Enable or disable IPython GUI event loop integration.
416 """Enable or disable IPython GUI event loop integration.
418
417
419 %gui [GUINAME]
418 %gui [GUINAME]
420
419
421 This magic replaces IPython's threaded shells that were activated
420 This magic replaces IPython's threaded shells that were activated
422 using the (pylab/wthread/etc.) command line flags. GUI toolkits
421 using the (pylab/wthread/etc.) command line flags. GUI toolkits
423 can now be enabled at runtime and keyboard
422 can now be enabled at runtime and keyboard
424 interrupts should work without any problems. The following toolkits
423 interrupts should work without any problems. The following toolkits
425 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
424 are supported: wxPython, PyQt4, PyGTK, Tk and Cocoa (OSX)::
426
425
427 %gui wx # enable wxPython event loop integration
426 %gui wx # enable wxPython event loop integration
428 %gui qt4|qt # enable PyQt4 event loop integration
427 %gui qt4|qt # enable PyQt4 event loop integration
429 %gui gtk # enable PyGTK event loop integration
428 %gui gtk # enable PyGTK event loop integration
430 %gui gtk3 # enable Gtk3 event loop integration
429 %gui gtk3 # enable Gtk3 event loop integration
431 %gui tk # enable Tk event loop integration
430 %gui tk # enable Tk event loop integration
432 %gui OSX # enable Cocoa event loop integration
431 %gui OSX # enable Cocoa event loop integration
433 # (requires %matplotlib 1.1)
432 # (requires %matplotlib 1.1)
434 %gui # disable all event loop integration
433 %gui # disable all event loop integration
435
434
436 WARNING: after any of these has been called you can simply create
435 WARNING: after any of these has been called you can simply create
437 an application object, but DO NOT start the event loop yourself, as
436 an application object, but DO NOT start the event loop yourself, as
438 we have already handled that.
437 we have already handled that.
439 """
438 """
440 opts, arg = self.parse_options(parameter_s, '')
439 opts, arg = self.parse_options(parameter_s, '')
441 if arg=='': arg = None
440 if arg=='': arg = None
442 try:
441 try:
443 return self.enable_gui(arg)
442 return self.enable_gui(arg)
444 except Exception as e:
443 except Exception as e:
445 # print simple error message, rather than traceback if we can't
444 # print simple error message, rather than traceback if we can't
446 # hook up the GUI
445 # hook up the GUI
447 error(str(e))
446 error(str(e))
448
447
449 @skip_doctest
448 @skip_doctest
450 @line_magic
449 @line_magic
451 def precision(self, s=''):
450 def precision(self, s=''):
452 """Set floating point precision for pretty printing.
451 """Set floating point precision for pretty printing.
453
452
454 Can set either integer precision or a format string.
453 Can set either integer precision or a format string.
455
454
456 If numpy has been imported and precision is an int,
455 If numpy has been imported and precision is an int,
457 numpy display precision will also be set, via ``numpy.set_printoptions``.
456 numpy display precision will also be set, via ``numpy.set_printoptions``.
458
457
459 If no argument is given, defaults will be restored.
458 If no argument is given, defaults will be restored.
460
459
461 Examples
460 Examples
462 --------
461 --------
463 ::
462 ::
464
463
465 In [1]: from math import pi
464 In [1]: from math import pi
466
465
467 In [2]: %precision 3
466 In [2]: %precision 3
468 Out[2]: u'%.3f'
467 Out[2]: u'%.3f'
469
468
470 In [3]: pi
469 In [3]: pi
471 Out[3]: 3.142
470 Out[3]: 3.142
472
471
473 In [4]: %precision %i
472 In [4]: %precision %i
474 Out[4]: u'%i'
473 Out[4]: u'%i'
475
474
476 In [5]: pi
475 In [5]: pi
477 Out[5]: 3
476 Out[5]: 3
478
477
479 In [6]: %precision %e
478 In [6]: %precision %e
480 Out[6]: u'%e'
479 Out[6]: u'%e'
481
480
482 In [7]: pi**10
481 In [7]: pi**10
483 Out[7]: 9.364805e+04
482 Out[7]: 9.364805e+04
484
483
485 In [8]: %precision
484 In [8]: %precision
486 Out[8]: u'%r'
485 Out[8]: u'%r'
487
486
488 In [9]: pi**10
487 In [9]: pi**10
489 Out[9]: 93648.047476082982
488 Out[9]: 93648.047476082982
490 """
489 """
491 ptformatter = self.shell.display_formatter.formatters['text/plain']
490 ptformatter = self.shell.display_formatter.formatters['text/plain']
492 ptformatter.float_precision = s
491 ptformatter.float_precision = s
493 return ptformatter.float_format
492 return ptformatter.float_format
494
493
495 @magic_arguments.magic_arguments()
494 @magic_arguments.magic_arguments()
496 @magic_arguments.argument(
495 @magic_arguments.argument(
497 '-e', '--export', action='store_true', default=False,
496 '-e', '--export', action='store_true', default=False,
498 help='Export IPython history as a notebook. The filename argument '
497 help='Export IPython history as a notebook. The filename argument '
499 'is used to specify the notebook name and format. For example '
498 'is used to specify the notebook name and format. For example '
500 'a filename of notebook.ipynb will result in a notebook name '
499 'a filename of notebook.ipynb will result in a notebook name '
501 'of "notebook" and a format of "xml". Likewise using a ".json" '
500 'of "notebook" and a format of "xml". Likewise using a ".json" '
502 'or ".py" file extension will write the notebook in the json '
501 'or ".py" file extension will write the notebook in the json '
503 'or py formats.'
502 'or py formats.'
504 )
503 )
505 @magic_arguments.argument(
504 @magic_arguments.argument(
506 '-f', '--format',
505 '-f', '--format',
507 help='Convert an existing IPython notebook to a new format. This option '
506 help='Convert an existing IPython notebook to a new format. This option '
508 'specifies the new format and can have the values: xml, json, py. '
507 'specifies the new format and can have the values: xml, json, py. '
509 'The target filename is chosen automatically based on the new '
508 'The target filename is chosen automatically based on the new '
510 'format. The filename argument gives the name of the source file.'
509 'format. The filename argument gives the name of the source file.'
511 )
510 )
512 @magic_arguments.argument(
511 @magic_arguments.argument(
513 'filename', type=unicode,
512 'filename', type=unicode,
514 help='Notebook name or filename'
513 help='Notebook name or filename'
515 )
514 )
516 @line_magic
515 @line_magic
517 def notebook(self, s):
516 def notebook(self, s):
518 """Export and convert IPython notebooks.
517 """Export and convert IPython notebooks.
519
518
520 This function can export the current IPython history to a notebook file
519 This function can export the current IPython history to a notebook file
521 or can convert an existing notebook file into a different format. For
520 or can convert an existing notebook file into a different format. For
522 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
521 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
523 To export the history to "foo.py" do "%notebook -e foo.py". To convert
522 To export the history to "foo.py" do "%notebook -e foo.py". To convert
524 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
523 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
525 formats include (json/ipynb, py).
524 formats include (json/ipynb, py).
526 """
525 """
527 args = magic_arguments.parse_argstring(self.magic_notebook, s)
526 args = magic_arguments.parse_argstring(self.magic_notebook, s)
528
527
529 from IPython.nbformat import current
528 from IPython.nbformat import current
530 args.filename = unquote_filename(args.filename)
529 args.filename = unquote_filename(args.filename)
531 if args.export:
530 if args.export:
532 fname, name, format = current.parse_filename(args.filename)
531 fname, name, format = current.parse_filename(args.filename)
533 cells = []
532 cells = []
534 hist = list(self.shell.history_manager.get_range())
533 hist = list(self.shell.history_manager.get_range())
535 for session, prompt_number, input in hist[:-1]:
534 for session, prompt_number, input in hist[:-1]:
536 cells.append(current.new_code_cell(prompt_number=prompt_number,
535 cells.append(current.new_code_cell(prompt_number=prompt_number,
537 input=input))
536 input=input))
538 worksheet = current.new_worksheet(cells=cells)
537 worksheet = current.new_worksheet(cells=cells)
539 nb = current.new_notebook(name=name,worksheets=[worksheet])
538 nb = current.new_notebook(name=name,worksheets=[worksheet])
540 with io.open(fname, 'w', encoding='utf-8') as f:
539 with io.open(fname, 'w', encoding='utf-8') as f:
541 current.write(nb, f, format);
540 current.write(nb, f, format);
542 elif args.format is not None:
541 elif args.format is not None:
543 old_fname, old_name, old_format = current.parse_filename(args.filename)
542 old_fname, old_name, old_format = current.parse_filename(args.filename)
544 new_format = args.format
543 new_format = args.format
545 if new_format == u'xml':
544 if new_format == u'xml':
546 raise ValueError('Notebooks cannot be written as xml.')
545 raise ValueError('Notebooks cannot be written as xml.')
547 elif new_format == u'ipynb' or new_format == u'json':
546 elif new_format == u'ipynb' or new_format == u'json':
548 new_fname = old_name + u'.ipynb'
547 new_fname = old_name + u'.ipynb'
549 new_format = u'json'
548 new_format = u'json'
550 elif new_format == u'py':
549 elif new_format == u'py':
551 new_fname = old_name + u'.py'
550 new_fname = old_name + u'.py'
552 else:
551 else:
553 raise ValueError('Invalid notebook format: %s' % new_format)
552 raise ValueError('Invalid notebook format: %s' % new_format)
554 with io.open(old_fname, 'r', encoding='utf-8') as f:
553 with io.open(old_fname, 'r', encoding='utf-8') as f:
555 nb = current.read(f, old_format)
554 nb = current.read(f, old_format)
556 with io.open(new_fname, 'w', encoding='utf-8') as f:
555 with io.open(new_fname, 'w', encoding='utf-8') as f:
557 current.write(nb, f, new_format)
556 current.write(nb, f, new_format)
558
557
559
558
560 # Used for exception handling in magic_edit
559 # Used for exception handling in magic_edit
561 class MacroToEdit(ValueError): pass
560 class MacroToEdit(ValueError): pass
562
561
563
562
564 @register_magics
563 @register_magics
565 class CodeMagics(Magics):
564 class CodeMagics(Magics):
566 """Magics related to code management (loading, saving, editing, ...)."""
565 """Magics related to code management (loading, saving, editing, ...)."""
567
566
568 @line_magic
567 @line_magic
569 def save(self, parameter_s=''):
568 def save(self, parameter_s=''):
570 """Save a set of lines or a macro to a given filename.
569 """Save a set of lines or a macro to a given filename.
571
570
572 Usage:\\
571 Usage:\\
573 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
572 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
574
573
575 Options:
574 Options:
576
575
577 -r: use 'raw' input. By default, the 'processed' history is used,
576 -r: use 'raw' input. By default, the 'processed' history is used,
578 so that magics are loaded in their transformed version to valid
577 so that magics are loaded in their transformed version to valid
579 Python. If this option is given, the raw input as typed as the
578 Python. If this option is given, the raw input as typed as the
580 command line is used instead.
579 command line is used instead.
581
580
582 This function uses the same syntax as %history for input ranges,
581 This function uses the same syntax as %history for input ranges,
583 then saves the lines to the filename you specify.
582 then saves the lines to the filename you specify.
584
583
585 It adds a '.py' extension to the file if you don't do so yourself, and
584 It adds a '.py' extension to the file if you don't do so yourself, and
586 it asks for confirmation before overwriting existing files."""
585 it asks for confirmation before overwriting existing files."""
587
586
588 opts,args = self.parse_options(parameter_s,'r',mode='list')
587 opts,args = self.parse_options(parameter_s,'r',mode='list')
589 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
588 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
590 if not fname.endswith('.py'):
589 if not fname.endswith('.py'):
591 fname += '.py'
590 fname += '.py'
592 if os.path.isfile(fname):
591 if os.path.isfile(fname):
593 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
592 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
594 if ans.lower() not in ['y','yes']:
593 if ans.lower() not in ['y','yes']:
595 print 'Operation cancelled.'
594 print 'Operation cancelled.'
596 return
595 return
597 try:
596 try:
598 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
597 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
599 except (TypeError, ValueError) as e:
598 except (TypeError, ValueError) as e:
600 print e.args[0]
599 print e.args[0]
601 return
600 return
602 with io.open(fname,'w', encoding="utf-8") as f:
601 with io.open(fname,'w', encoding="utf-8") as f:
603 f.write(u"# coding: utf-8\n")
602 f.write(u"# coding: utf-8\n")
604 f.write(py3compat.cast_unicode(cmds))
603 f.write(py3compat.cast_unicode(cmds))
605 print 'The following commands were written to file `%s`:' % fname
604 print 'The following commands were written to file `%s`:' % fname
606 print cmds
605 print cmds
607
606
608 @line_magic
607 @line_magic
609 def pastebin(self, parameter_s=''):
608 def pastebin(self, parameter_s=''):
610 """Upload code to Github's Gist paste bin, returning the URL.
609 """Upload code to Github's Gist paste bin, returning the URL.
611
610
612 Usage:\\
611 Usage:\\
613 %pastebin [-d "Custom description"] 1-7
612 %pastebin [-d "Custom description"] 1-7
614
613
615 The argument can be an input history range, a filename, or the name of a
614 The argument can be an input history range, a filename, or the name of a
616 string or macro.
615 string or macro.
617
616
618 Options:
617 Options:
619
618
620 -d: Pass a custom description for the gist. The default will say
619 -d: Pass a custom description for the gist. The default will say
621 "Pasted from IPython".
620 "Pasted from IPython".
622 """
621 """
623 opts, args = self.parse_options(parameter_s, 'd:')
622 opts, args = self.parse_options(parameter_s, 'd:')
624
623
625 try:
624 try:
626 code = self.shell.find_user_code(args)
625 code = self.shell.find_user_code(args)
627 except (ValueError, TypeError) as e:
626 except (ValueError, TypeError) as e:
628 print e.args[0]
627 print e.args[0]
629 return
628 return
630
629
631 post_data = json.dumps({
630 post_data = json.dumps({
632 "description": opts.get('d', "Pasted from IPython"),
631 "description": opts.get('d', "Pasted from IPython"),
633 "public": True,
632 "public": True,
634 "files": {
633 "files": {
635 "file1.py": {
634 "file1.py": {
636 "content": code
635 "content": code
637 }
636 }
638 }
637 }
639 }).encode('utf-8')
638 }).encode('utf-8')
640
639
641 response = urlopen("https://api.github.com/gists", post_data)
640 response = urlopen("https://api.github.com/gists", post_data)
642 response_data = json.loads(response.read().decode('utf-8'))
641 response_data = json.loads(response.read().decode('utf-8'))
643 return response_data['html_url']
642 return response_data['html_url']
644
643
645 @line_magic
644 @line_magic
646 def loadpy(self, arg_s):
645 def loadpy(self, arg_s):
647 """Load a .py python script into the GUI console.
646 """Load a .py python script into the GUI console.
648
647
649 This magic command can either take a local filename or a url::
648 This magic command can either take a local filename or a url::
650
649
651 %loadpy myscript.py
650 %loadpy myscript.py
652 %loadpy http://www.example.com/myscript.py
651 %loadpy http://www.example.com/myscript.py
653 """
652 """
654 arg_s = unquote_filename(arg_s)
653 arg_s = unquote_filename(arg_s)
655 remote_url = arg_s.startswith(('http://', 'https://'))
654 remote_url = arg_s.startswith(('http://', 'https://'))
656 local_url = not remote_url
655 local_url = not remote_url
657 if local_url and not arg_s.endswith('.py'):
656 if local_url and not arg_s.endswith('.py'):
658 # Local files must be .py; for remote URLs it's possible that the
657 # Local files must be .py; for remote URLs it's possible that the
659 # fetch URL doesn't have a .py in it (many servers have an opaque
658 # fetch URL doesn't have a .py in it (many servers have an opaque
660 # URL, such as scipy-central.org).
659 # URL, such as scipy-central.org).
661 raise ValueError('%%loadpy only works with .py files: %s' % arg_s)
660 raise ValueError('%%loadpy only works with .py files: %s' % arg_s)
662
661
663 # openpy takes care of finding the source encoding (per PEP 263)
662 # openpy takes care of finding the source encoding (per PEP 263)
664 if remote_url:
663 if remote_url:
665 contents = openpy.read_py_url(arg_s, skip_encoding_cookie=True)
664 contents = openpy.read_py_url(arg_s, skip_encoding_cookie=True)
666 else:
665 else:
667 contents = openpy.read_py_file(arg_s, skip_encoding_cookie=True)
666 contents = openpy.read_py_file(arg_s, skip_encoding_cookie=True)
668
667
669 self.set_next_input(contents)
668 self.set_next_input(contents)
670
669
671 def _find_edit_target(self, args, opts, last_call):
670 def _find_edit_target(self, args, opts, last_call):
672 """Utility method used by magic_edit to find what to edit."""
671 """Utility method used by magic_edit to find what to edit."""
673
672
674 def make_filename(arg):
673 def make_filename(arg):
675 "Make a filename from the given args"
674 "Make a filename from the given args"
676 arg = unquote_filename(arg)
675 arg = unquote_filename(arg)
677 try:
676 try:
678 filename = get_py_filename(arg)
677 filename = get_py_filename(arg)
679 except IOError:
678 except IOError:
680 # If it ends with .py but doesn't already exist, assume we want
679 # If it ends with .py but doesn't already exist, assume we want
681 # a new file.
680 # a new file.
682 if arg.endswith('.py'):
681 if arg.endswith('.py'):
683 filename = arg
682 filename = arg
684 else:
683 else:
685 filename = None
684 filename = None
686 return filename
685 return filename
687
686
688 # Set a few locals from the options for convenience:
687 # Set a few locals from the options for convenience:
689 opts_prev = 'p' in opts
688 opts_prev = 'p' in opts
690 opts_raw = 'r' in opts
689 opts_raw = 'r' in opts
691
690
692 # custom exceptions
691 # custom exceptions
693 class DataIsObject(Exception): pass
692 class DataIsObject(Exception): pass
694
693
695 # Default line number value
694 # Default line number value
696 lineno = opts.get('n',None)
695 lineno = opts.get('n',None)
697
696
698 if opts_prev:
697 if opts_prev:
699 args = '_%s' % last_call[0]
698 args = '_%s' % last_call[0]
700 if not self.shell.user_ns.has_key(args):
699 if not self.shell.user_ns.has_key(args):
701 args = last_call[1]
700 args = last_call[1]
702
701
703 # use last_call to remember the state of the previous call, but don't
702 # use last_call to remember the state of the previous call, but don't
704 # let it be clobbered by successive '-p' calls.
703 # let it be clobbered by successive '-p' calls.
705 try:
704 try:
706 last_call[0] = self.shell.displayhook.prompt_count
705 last_call[0] = self.shell.displayhook.prompt_count
707 if not opts_prev:
706 if not opts_prev:
708 last_call[1] = args
707 last_call[1] = args
709 except:
708 except:
710 pass
709 pass
711
710
712 # by default this is done with temp files, except when the given
711 # by default this is done with temp files, except when the given
713 # arg is a filename
712 # arg is a filename
714 use_temp = True
713 use_temp = True
715
714
716 data = ''
715 data = ''
717
716
718 # First, see if the arguments should be a filename.
717 # First, see if the arguments should be a filename.
719 filename = make_filename(args)
718 filename = make_filename(args)
720 if filename:
719 if filename:
721 use_temp = False
720 use_temp = False
722 elif args:
721 elif args:
723 # Mode where user specifies ranges of lines, like in %macro.
722 # Mode where user specifies ranges of lines, like in %macro.
724 data = self.shell.extract_input_lines(args, opts_raw)
723 data = self.shell.extract_input_lines(args, opts_raw)
725 if not data:
724 if not data:
726 try:
725 try:
727 # Load the parameter given as a variable. If not a string,
726 # Load the parameter given as a variable. If not a string,
728 # process it as an object instead (below)
727 # process it as an object instead (below)
729
728
730 #print '*** args',args,'type',type(args) # dbg
729 #print '*** args',args,'type',type(args) # dbg
731 data = eval(args, self.shell.user_ns)
730 data = eval(args, self.shell.user_ns)
732 if not isinstance(data, basestring):
731 if not isinstance(data, basestring):
733 raise DataIsObject
732 raise DataIsObject
734
733
735 except (NameError,SyntaxError):
734 except (NameError,SyntaxError):
736 # given argument is not a variable, try as a filename
735 # given argument is not a variable, try as a filename
737 filename = make_filename(args)
736 filename = make_filename(args)
738 if filename is None:
737 if filename is None:
739 warn("Argument given (%s) can't be found as a variable "
738 warn("Argument given (%s) can't be found as a variable "
740 "or as a filename." % args)
739 "or as a filename." % args)
741 return
740 return
742 use_temp = False
741 use_temp = False
743
742
744 except DataIsObject:
743 except DataIsObject:
745 # macros have a special edit function
744 # macros have a special edit function
746 if isinstance(data, Macro):
745 if isinstance(data, Macro):
747 raise MacroToEdit(data)
746 raise MacroToEdit(data)
748
747
749 # For objects, try to edit the file where they are defined
748 # For objects, try to edit the file where they are defined
750 try:
749 try:
751 filename = inspect.getabsfile(data)
750 filename = inspect.getabsfile(data)
752 if 'fakemodule' in filename.lower() and inspect.isclass(data):
751 if 'fakemodule' in filename.lower() and inspect.isclass(data):
753 # class created by %edit? Try to find source
752 # class created by %edit? Try to find source
754 # by looking for method definitions instead, the
753 # by looking for method definitions instead, the
755 # __module__ in those classes is FakeModule.
754 # __module__ in those classes is FakeModule.
756 attrs = [getattr(data, aname) for aname in dir(data)]
755 attrs = [getattr(data, aname) for aname in dir(data)]
757 for attr in attrs:
756 for attr in attrs:
758 if not inspect.ismethod(attr):
757 if not inspect.ismethod(attr):
759 continue
758 continue
760 filename = inspect.getabsfile(attr)
759 filename = inspect.getabsfile(attr)
761 if filename and 'fakemodule' not in filename.lower():
760 if filename and 'fakemodule' not in filename.lower():
762 # change the attribute to be the edit target instead
761 # change the attribute to be the edit target instead
763 data = attr
762 data = attr
764 break
763 break
765
764
766 datafile = 1
765 datafile = 1
767 except TypeError:
766 except TypeError:
768 filename = make_filename(args)
767 filename = make_filename(args)
769 datafile = 1
768 datafile = 1
770 warn('Could not find file where `%s` is defined.\n'
769 warn('Could not find file where `%s` is defined.\n'
771 'Opening a file named `%s`' % (args,filename))
770 'Opening a file named `%s`' % (args,filename))
772 # Now, make sure we can actually read the source (if it was in
771 # Now, make sure we can actually read the source (if it was in
773 # a temp file it's gone by now).
772 # a temp file it's gone by now).
774 if datafile:
773 if datafile:
775 try:
774 try:
776 if lineno is None:
775 if lineno is None:
777 lineno = inspect.getsourcelines(data)[1]
776 lineno = inspect.getsourcelines(data)[1]
778 except IOError:
777 except IOError:
779 filename = make_filename(args)
778 filename = make_filename(args)
780 if filename is None:
779 if filename is None:
781 warn('The file `%s` where `%s` was defined cannot '
780 warn('The file `%s` where `%s` was defined cannot '
782 'be read.' % (filename,data))
781 'be read.' % (filename,data))
783 return
782 return
784 use_temp = False
783 use_temp = False
785
784
786 if use_temp:
785 if use_temp:
787 filename = self.shell.mktempfile(data)
786 filename = self.shell.mktempfile(data)
788 print 'IPython will make a temporary file named:',filename
787 print 'IPython will make a temporary file named:',filename
789
788
790 return filename, lineno, use_temp
789 return filename, lineno, use_temp
791
790
792 def _edit_macro(self,mname,macro):
791 def _edit_macro(self,mname,macro):
793 """open an editor with the macro data in a file"""
792 """open an editor with the macro data in a file"""
794 filename = self.shell.mktempfile(macro.value)
793 filename = self.shell.mktempfile(macro.value)
795 self.shell.hooks.editor(filename)
794 self.shell.hooks.editor(filename)
796
795
797 # and make a new macro object, to replace the old one
796 # and make a new macro object, to replace the old one
798 mfile = open(filename)
797 mfile = open(filename)
799 mvalue = mfile.read()
798 mvalue = mfile.read()
800 mfile.close()
799 mfile.close()
801 self.shell.user_ns[mname] = Macro(mvalue)
800 self.shell.user_ns[mname] = Macro(mvalue)
802
801
803 @line_magic
802 @line_magic
804 def ed(self, parameter_s=''):
803 def ed(self, parameter_s=''):
805 """Alias to %edit."""
804 """Alias to %edit."""
806 return self.magic_edit(parameter_s)
805 return self.magic_edit(parameter_s)
807
806
808 @skip_doctest
807 @skip_doctest
809 @line_magic
808 @line_magic
810 def edit(self, parameter_s='',last_call=['','']):
809 def edit(self, parameter_s='',last_call=['','']):
811 """Bring up an editor and execute the resulting code.
810 """Bring up an editor and execute the resulting code.
812
811
813 Usage:
812 Usage:
814 %edit [options] [args]
813 %edit [options] [args]
815
814
816 %edit runs IPython's editor hook. The default version of this hook is
815 %edit runs IPython's editor hook. The default version of this hook is
817 set to call the editor specified by your $EDITOR environment variable.
816 set to call the editor specified by your $EDITOR environment variable.
818 If this isn't found, it will default to vi under Linux/Unix and to
817 If this isn't found, it will default to vi under Linux/Unix and to
819 notepad under Windows. See the end of this docstring for how to change
818 notepad under Windows. See the end of this docstring for how to change
820 the editor hook.
819 the editor hook.
821
820
822 You can also set the value of this editor via the
821 You can also set the value of this editor via the
823 ``TerminalInteractiveShell.editor`` option in your configuration file.
822 ``TerminalInteractiveShell.editor`` option in your configuration file.
824 This is useful if you wish to use a different editor from your typical
823 This is useful if you wish to use a different editor from your typical
825 default with IPython (and for Windows users who typically don't set
824 default with IPython (and for Windows users who typically don't set
826 environment variables).
825 environment variables).
827
826
828 This command allows you to conveniently edit multi-line code right in
827 This command allows you to conveniently edit multi-line code right in
829 your IPython session.
828 your IPython session.
830
829
831 If called without arguments, %edit opens up an empty editor with a
830 If called without arguments, %edit opens up an empty editor with a
832 temporary file and will execute the contents of this file when you
831 temporary file and will execute the contents of this file when you
833 close it (don't forget to save it!).
832 close it (don't forget to save it!).
834
833
835
834
836 Options:
835 Options:
837
836
838 -n <number>: open the editor at a specified line number. By default,
837 -n <number>: open the editor at a specified line number. By default,
839 the IPython editor hook uses the unix syntax 'editor +N filename', but
838 the IPython editor hook uses the unix syntax 'editor +N filename', but
840 you can configure this by providing your own modified hook if your
839 you can configure this by providing your own modified hook if your
841 favorite editor supports line-number specifications with a different
840 favorite editor supports line-number specifications with a different
842 syntax.
841 syntax.
843
842
844 -p: this will call the editor with the same data as the previous time
843 -p: this will call the editor with the same data as the previous time
845 it was used, regardless of how long ago (in your current session) it
844 it was used, regardless of how long ago (in your current session) it
846 was.
845 was.
847
846
848 -r: use 'raw' input. This option only applies to input taken from the
847 -r: use 'raw' input. This option only applies to input taken from the
849 user's history. By default, the 'processed' history is used, so that
848 user's history. By default, the 'processed' history is used, so that
850 magics are loaded in their transformed version to valid Python. If
849 magics are loaded in their transformed version to valid Python. If
851 this option is given, the raw input as typed as the command line is
850 this option is given, the raw input as typed as the command line is
852 used instead. When you exit the editor, it will be executed by
851 used instead. When you exit the editor, it will be executed by
853 IPython's own processor.
852 IPython's own processor.
854
853
855 -x: do not execute the edited code immediately upon exit. This is
854 -x: do not execute the edited code immediately upon exit. This is
856 mainly useful if you are editing programs which need to be called with
855 mainly useful if you are editing programs which need to be called with
857 command line arguments, which you can then do using %run.
856 command line arguments, which you can then do using %run.
858
857
859
858
860 Arguments:
859 Arguments:
861
860
862 If arguments are given, the following possibilities exist:
861 If arguments are given, the following possibilities exist:
863
862
864 - If the argument is a filename, IPython will load that into the
863 - If the argument is a filename, IPython will load that into the
865 editor. It will execute its contents with execfile() when you exit,
864 editor. It will execute its contents with execfile() when you exit,
866 loading any code in the file into your interactive namespace.
865 loading any code in the file into your interactive namespace.
867
866
868 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
867 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
869 The syntax is the same as in the %history magic.
868 The syntax is the same as in the %history magic.
870
869
871 - If the argument is a string variable, its contents are loaded
870 - If the argument is a string variable, its contents are loaded
872 into the editor. You can thus edit any string which contains
871 into the editor. You can thus edit any string which contains
873 python code (including the result of previous edits).
872 python code (including the result of previous edits).
874
873
875 - If the argument is the name of an object (other than a string),
874 - If the argument is the name of an object (other than a string),
876 IPython will try to locate the file where it was defined and open the
875 IPython will try to locate the file where it was defined and open the
877 editor at the point where it is defined. You can use `%edit function`
876 editor at the point where it is defined. You can use `%edit function`
878 to load an editor exactly at the point where 'function' is defined,
877 to load an editor exactly at the point where 'function' is defined,
879 edit it and have the file be executed automatically.
878 edit it and have the file be executed automatically.
880
879
881 - If the object is a macro (see %macro for details), this opens up your
880 - If the object is a macro (see %macro for details), this opens up your
882 specified editor with a temporary file containing the macro's data.
881 specified editor with a temporary file containing the macro's data.
883 Upon exit, the macro is reloaded with the contents of the file.
882 Upon exit, the macro is reloaded with the contents of the file.
884
883
885 Note: opening at an exact line is only supported under Unix, and some
884 Note: opening at an exact line is only supported under Unix, and some
886 editors (like kedit and gedit up to Gnome 2.8) do not understand the
885 editors (like kedit and gedit up to Gnome 2.8) do not understand the
887 '+NUMBER' parameter necessary for this feature. Good editors like
886 '+NUMBER' parameter necessary for this feature. Good editors like
888 (X)Emacs, vi, jed, pico and joe all do.
887 (X)Emacs, vi, jed, pico and joe all do.
889
888
890 After executing your code, %edit will return as output the code you
889 After executing your code, %edit will return as output the code you
891 typed in the editor (except when it was an existing file). This way
890 typed in the editor (except when it was an existing file). This way
892 you can reload the code in further invocations of %edit as a variable,
891 you can reload the code in further invocations of %edit as a variable,
893 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
892 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
894 the output.
893 the output.
895
894
896 Note that %edit is also available through the alias %ed.
895 Note that %edit is also available through the alias %ed.
897
896
898 This is an example of creating a simple function inside the editor and
897 This is an example of creating a simple function inside the editor and
899 then modifying it. First, start up the editor::
898 then modifying it. First, start up the editor::
900
899
901 In [1]: ed
900 In [1]: ed
902 Editing... done. Executing edited code...
901 Editing... done. Executing edited code...
903 Out[1]: 'def foo():\\n print "foo() was defined in an editing
902 Out[1]: 'def foo():\\n print "foo() was defined in an editing
904 session"\\n'
903 session"\\n'
905
904
906 We can then call the function foo()::
905 We can then call the function foo()::
907
906
908 In [2]: foo()
907 In [2]: foo()
909 foo() was defined in an editing session
908 foo() was defined in an editing session
910
909
911 Now we edit foo. IPython automatically loads the editor with the
910 Now we edit foo. IPython automatically loads the editor with the
912 (temporary) file where foo() was previously defined::
911 (temporary) file where foo() was previously defined::
913
912
914 In [3]: ed foo
913 In [3]: ed foo
915 Editing... done. Executing edited code...
914 Editing... done. Executing edited code...
916
915
917 And if we call foo() again we get the modified version::
916 And if we call foo() again we get the modified version::
918
917
919 In [4]: foo()
918 In [4]: foo()
920 foo() has now been changed!
919 foo() has now been changed!
921
920
922 Here is an example of how to edit a code snippet successive
921 Here is an example of how to edit a code snippet successive
923 times. First we call the editor::
922 times. First we call the editor::
924
923
925 In [5]: ed
924 In [5]: ed
926 Editing... done. Executing edited code...
925 Editing... done. Executing edited code...
927 hello
926 hello
928 Out[5]: "print 'hello'\\n"
927 Out[5]: "print 'hello'\\n"
929
928
930 Now we call it again with the previous output (stored in _)::
929 Now we call it again with the previous output (stored in _)::
931
930
932 In [6]: ed _
931 In [6]: ed _
933 Editing... done. Executing edited code...
932 Editing... done. Executing edited code...
934 hello world
933 hello world
935 Out[6]: "print 'hello world'\\n"
934 Out[6]: "print 'hello world'\\n"
936
935
937 Now we call it with the output #8 (stored in _8, also as Out[8])::
936 Now we call it with the output #8 (stored in _8, also as Out[8])::
938
937
939 In [7]: ed _8
938 In [7]: ed _8
940 Editing... done. Executing edited code...
939 Editing... done. Executing edited code...
941 hello again
940 hello again
942 Out[7]: "print 'hello again'\\n"
941 Out[7]: "print 'hello again'\\n"
943
942
944
943
945 Changing the default editor hook:
944 Changing the default editor hook:
946
945
947 If you wish to write your own editor hook, you can put it in a
946 If you wish to write your own editor hook, you can put it in a
948 configuration file which you load at startup time. The default hook
947 configuration file which you load at startup time. The default hook
949 is defined in the IPython.core.hooks module, and you can use that as a
948 is defined in the IPython.core.hooks module, and you can use that as a
950 starting example for further modifications. That file also has
949 starting example for further modifications. That file also has
951 general instructions on how to set a new hook for use once you've
950 general instructions on how to set a new hook for use once you've
952 defined it."""
951 defined it."""
953 opts,args = self.parse_options(parameter_s,'prxn:')
952 opts,args = self.parse_options(parameter_s,'prxn:')
954
953
955 try:
954 try:
956 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
955 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
957 except MacroToEdit as e:
956 except MacroToEdit as e:
958 self._edit_macro(args, e.args[0])
957 self._edit_macro(args, e.args[0])
959 return
958 return
960
959
961 # do actual editing here
960 # do actual editing here
962 print 'Editing...',
961 print 'Editing...',
963 sys.stdout.flush()
962 sys.stdout.flush()
964 try:
963 try:
965 # Quote filenames that may have spaces in them
964 # Quote filenames that may have spaces in them
966 if ' ' in filename:
965 if ' ' in filename:
967 filename = "'%s'" % filename
966 filename = "'%s'" % filename
968 self.shell.hooks.editor(filename,lineno)
967 self.shell.hooks.editor(filename,lineno)
969 except TryNext:
968 except TryNext:
970 warn('Could not open editor')
969 warn('Could not open editor')
971 return
970 return
972
971
973 # XXX TODO: should this be generalized for all string vars?
972 # XXX TODO: should this be generalized for all string vars?
974 # For now, this is special-cased to blocks created by cpaste
973 # For now, this is special-cased to blocks created by cpaste
975 if args.strip() == 'pasted_block':
974 if args.strip() == 'pasted_block':
976 self.shell.user_ns['pasted_block'] = file_read(filename)
975 self.shell.user_ns['pasted_block'] = file_read(filename)
977
976
978 if 'x' in opts: # -x prevents actual execution
977 if 'x' in opts: # -x prevents actual execution
979 print
978 print
980 else:
979 else:
981 print 'done. Executing edited code...'
980 print 'done. Executing edited code...'
982 if 'r' in opts: # Untranslated IPython code
981 if 'r' in opts: # Untranslated IPython code
983 self.shell.run_cell(file_read(filename),
982 self.shell.run_cell(file_read(filename),
984 store_history=False)
983 store_history=False)
985 else:
984 else:
986 self.shell.safe_execfile(filename, self.shell.user_ns,
985 self.shell.safe_execfile(filename, self.shell.user_ns,
987 self.shell.user_ns)
986 self.shell.user_ns)
988
987
989 if is_temp:
988 if is_temp:
990 try:
989 try:
991 return open(filename).read()
990 return open(filename).read()
992 except IOError,msg:
991 except IOError,msg:
993 if msg.filename == filename:
992 if msg.filename == filename:
994 warn('File not found. Did you forget to save?')
993 warn('File not found. Did you forget to save?')
995 return
994 return
996 else:
995 else:
997 self.shell.showtraceback()
996 self.shell.showtraceback()
998
997
999
998
1000 @register_magics
999 @register_magics
1001 class ConfigMagics(Magics):
1000 class ConfigMagics(Magics):
1002
1001
1003 def __init__(self, shell):
1002 def __init__(self, shell):
1004 super(ConfigMagics, self).__init__(shell)
1003 super(ConfigMagics, self).__init__(shell)
1005 self.configurables = []
1004 self.configurables = []
1006
1005
1007 @line_magic
1006 @line_magic
1008 def config(self, s):
1007 def config(self, s):
1009 """configure IPython
1008 """configure IPython
1010
1009
1011 %config Class[.trait=value]
1010 %config Class[.trait=value]
1012
1011
1013 This magic exposes most of the IPython config system. Any
1012 This magic exposes most of the IPython config system. Any
1014 Configurable class should be able to be configured with the simple
1013 Configurable class should be able to be configured with the simple
1015 line::
1014 line::
1016
1015
1017 %config Class.trait=value
1016 %config Class.trait=value
1018
1017
1019 Where `value` will be resolved in the user's namespace, if it is an
1018 Where `value` will be resolved in the user's namespace, if it is an
1020 expression or variable name.
1019 expression or variable name.
1021
1020
1022 Examples
1021 Examples
1023 --------
1022 --------
1024
1023
1025 To see what classes are available for config, pass no arguments::
1024 To see what classes are available for config, pass no arguments::
1026
1025
1027 In [1]: %config
1026 In [1]: %config
1028 Available objects for config:
1027 Available objects for config:
1029 TerminalInteractiveShell
1028 TerminalInteractiveShell
1030 HistoryManager
1029 HistoryManager
1031 PrefilterManager
1030 PrefilterManager
1032 AliasManager
1031 AliasManager
1033 IPCompleter
1032 IPCompleter
1034 PromptManager
1033 PromptManager
1035 DisplayFormatter
1034 DisplayFormatter
1036
1035
1037 To view what is configurable on a given class, just pass the class
1036 To view what is configurable on a given class, just pass the class
1038 name::
1037 name::
1039
1038
1040 In [2]: %config IPCompleter
1039 In [2]: %config IPCompleter
1041 IPCompleter options
1040 IPCompleter options
1042 -----------------
1041 -----------------
1043 IPCompleter.omit__names=<Enum>
1042 IPCompleter.omit__names=<Enum>
1044 Current: 2
1043 Current: 2
1045 Choices: (0, 1, 2)
1044 Choices: (0, 1, 2)
1046 Instruct the completer to omit private method names
1045 Instruct the completer to omit private method names
1047 Specifically, when completing on ``object.<tab>``.
1046 Specifically, when completing on ``object.<tab>``.
1048 When 2 [default]: all names that start with '_' will be excluded.
1047 When 2 [default]: all names that start with '_' will be excluded.
1049 When 1: all 'magic' names (``__foo__``) will be excluded.
1048 When 1: all 'magic' names (``__foo__``) will be excluded.
1050 When 0: nothing will be excluded.
1049 When 0: nothing will be excluded.
1051 IPCompleter.merge_completions=<CBool>
1050 IPCompleter.merge_completions=<CBool>
1052 Current: True
1051 Current: True
1053 Whether to merge completion results into a single list
1052 Whether to merge completion results into a single list
1054 If False, only the completion results from the first non-empty completer
1053 If False, only the completion results from the first non-empty completer
1055 will be returned.
1054 will be returned.
1056 IPCompleter.limit_to__all__=<CBool>
1055 IPCompleter.limit_to__all__=<CBool>
1057 Current: False
1056 Current: False
1058 Instruct the completer to use __all__ for the completion
1057 Instruct the completer to use __all__ for the completion
1059 Specifically, when completing on ``object.<tab>``.
1058 Specifically, when completing on ``object.<tab>``.
1060 When True: only those names in obj.__all__ will be included.
1059 When True: only those names in obj.__all__ will be included.
1061 When False [default]: the __all__ attribute is ignored
1060 When False [default]: the __all__ attribute is ignored
1062 IPCompleter.greedy=<CBool>
1061 IPCompleter.greedy=<CBool>
1063 Current: False
1062 Current: False
1064 Activate greedy completion
1063 Activate greedy completion
1065 This will enable completion on elements of lists, results of function calls,
1064 This will enable completion on elements of lists, results of function calls,
1066 etc., but can be unsafe because the code is actually evaluated on TAB.
1065 etc., but can be unsafe because the code is actually evaluated on TAB.
1067
1066
1068 but the real use is in setting values::
1067 but the real use is in setting values::
1069
1068
1070 In [3]: %config IPCompleter.greedy = True
1069 In [3]: %config IPCompleter.greedy = True
1071
1070
1072 and these values are read from the user_ns if they are variables::
1071 and these values are read from the user_ns if they are variables::
1073
1072
1074 In [4]: feeling_greedy=False
1073 In [4]: feeling_greedy=False
1075
1074
1076 In [5]: %config IPCompleter.greedy = feeling_greedy
1075 In [5]: %config IPCompleter.greedy = feeling_greedy
1077
1076
1078 """
1077 """
1079 from IPython.config.loader import Config
1078 from IPython.config.loader import Config
1080 # some IPython objects are Configurable, but do not yet have
1079 # some IPython objects are Configurable, but do not yet have
1081 # any configurable traits. Exclude them from the effects of
1080 # any configurable traits. Exclude them from the effects of
1082 # this magic, as their presence is just noise:
1081 # this magic, as their presence is just noise:
1083 configurables = [ c for c in self.shell.configurables
1082 configurables = [ c for c in self.shell.configurables
1084 if c.__class__.class_traits(config=True) ]
1083 if c.__class__.class_traits(config=True) ]
1085 classnames = [ c.__class__.__name__ for c in configurables ]
1084 classnames = [ c.__class__.__name__ for c in configurables ]
1086
1085
1087 line = s.strip()
1086 line = s.strip()
1088 if not line:
1087 if not line:
1089 # print available configurable names
1088 # print available configurable names
1090 print "Available objects for config:"
1089 print "Available objects for config:"
1091 for name in classnames:
1090 for name in classnames:
1092 print " ", name
1091 print " ", name
1093 return
1092 return
1094 elif line in classnames:
1093 elif line in classnames:
1095 # `%config TerminalInteractiveShell` will print trait info for
1094 # `%config TerminalInteractiveShell` will print trait info for
1096 # TerminalInteractiveShell
1095 # TerminalInteractiveShell
1097 c = configurables[classnames.index(line)]
1096 c = configurables[classnames.index(line)]
1098 cls = c.__class__
1097 cls = c.__class__
1099 help = cls.class_get_help(c)
1098 help = cls.class_get_help(c)
1100 # strip leading '--' from cl-args:
1099 # strip leading '--' from cl-args:
1101 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
1100 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
1102 print help
1101 print help
1103 return
1102 return
1104 elif '=' not in line:
1103 elif '=' not in line:
1105 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
1104 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
1106
1105
1107
1106
1108 # otherwise, assume we are setting configurables.
1107 # otherwise, assume we are setting configurables.
1109 # leave quotes on args when splitting, because we want
1108 # leave quotes on args when splitting, because we want
1110 # unquoted args to eval in user_ns
1109 # unquoted args to eval in user_ns
1111 cfg = Config()
1110 cfg = Config()
1112 exec "cfg."+line in locals(), self.shell.user_ns
1111 exec "cfg."+line in locals(), self.shell.user_ns
1113
1112
1114 for configurable in configurables:
1113 for configurable in configurables:
1115 try:
1114 try:
1116 configurable.update_config(cfg)
1115 configurable.update_config(cfg)
1117 except Exception as e:
1116 except Exception as e:
1118 error(e)
1117 error(e)
1119
1118
1120
1119
1121 @register_magics
1120 @register_magics
1122 class NamespaceMagics(Magics):
1121 class NamespaceMagics(Magics):
1123 """Magics to manage various aspects of the user's namespace.
1122 """Magics to manage various aspects of the user's namespace.
1124
1123
1125 These include listing variables, introspecting into them, etc.
1124 These include listing variables, introspecting into them, etc.
1126 """
1125 """
1127
1126
1128 @line_magic
1127 @line_magic
1129 def pinfo(self, parameter_s='', namespaces=None):
1128 def pinfo(self, parameter_s='', namespaces=None):
1130 """Provide detailed information about an object.
1129 """Provide detailed information about an object.
1131
1130
1132 '%pinfo object' is just a synonym for object? or ?object."""
1131 '%pinfo object' is just a synonym for object? or ?object."""
1133
1132
1134 #print 'pinfo par: <%s>' % parameter_s # dbg
1133 #print 'pinfo par: <%s>' % parameter_s # dbg
1135
1134
1136
1135
1137 # detail_level: 0 -> obj? , 1 -> obj??
1136 # detail_level: 0 -> obj? , 1 -> obj??
1138 detail_level = 0
1137 detail_level = 0
1139 # We need to detect if we got called as 'pinfo pinfo foo', which can
1138 # We need to detect if we got called as 'pinfo pinfo foo', which can
1140 # happen if the user types 'pinfo foo?' at the cmd line.
1139 # happen if the user types 'pinfo foo?' at the cmd line.
1141 pinfo,qmark1,oname,qmark2 = \
1140 pinfo,qmark1,oname,qmark2 = \
1142 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
1141 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
1143 if pinfo or qmark1 or qmark2:
1142 if pinfo or qmark1 or qmark2:
1144 detail_level = 1
1143 detail_level = 1
1145 if "*" in oname:
1144 if "*" in oname:
1146 self.magic_psearch(oname)
1145 self.magic_psearch(oname)
1147 else:
1146 else:
1148 self.shell._inspect('pinfo', oname, detail_level=detail_level,
1147 self.shell._inspect('pinfo', oname, detail_level=detail_level,
1149 namespaces=namespaces)
1148 namespaces=namespaces)
1150
1149
1151 @line_magic
1150 @line_magic
1152 def pinfo2(self, parameter_s='', namespaces=None):
1151 def pinfo2(self, parameter_s='', namespaces=None):
1153 """Provide extra detailed information about an object.
1152 """Provide extra detailed information about an object.
1154
1153
1155 '%pinfo2 object' is just a synonym for object?? or ??object."""
1154 '%pinfo2 object' is just a synonym for object?? or ??object."""
1156 self.shell._inspect('pinfo', parameter_s, detail_level=1,
1155 self.shell._inspect('pinfo', parameter_s, detail_level=1,
1157 namespaces=namespaces)
1156 namespaces=namespaces)
1158
1157
1159 @skip_doctest
1158 @skip_doctest
1160 @line_magic
1159 @line_magic
1161 def pdef(self, parameter_s='', namespaces=None):
1160 def pdef(self, parameter_s='', namespaces=None):
1162 """Print the definition header for any callable object.
1161 """Print the definition header for any callable object.
1163
1162
1164 If the object is a class, print the constructor information.
1163 If the object is a class, print the constructor information.
1165
1164
1166 Examples
1165 Examples
1167 --------
1166 --------
1168 ::
1167 ::
1169
1168
1170 In [3]: %pdef urllib.urlopen
1169 In [3]: %pdef urllib.urlopen
1171 urllib.urlopen(url, data=None, proxies=None)
1170 urllib.urlopen(url, data=None, proxies=None)
1172 """
1171 """
1173 self._inspect('pdef',parameter_s, namespaces)
1172 self._inspect('pdef',parameter_s, namespaces)
1174
1173
1175 @line_magic
1174 @line_magic
1176 def pdoc(self, parameter_s='', namespaces=None):
1175 def pdoc(self, parameter_s='', namespaces=None):
1177 """Print the docstring for an object.
1176 """Print the docstring for an object.
1178
1177
1179 If the given object is a class, it will print both the class and the
1178 If the given object is a class, it will print both the class and the
1180 constructor docstrings."""
1179 constructor docstrings."""
1181 self._inspect('pdoc',parameter_s, namespaces)
1180 self._inspect('pdoc',parameter_s, namespaces)
1182
1181
1183 @line_magic
1182 @line_magic
1184 def psource(self, parameter_s='', namespaces=None):
1183 def psource(self, parameter_s='', namespaces=None):
1185 """Print (or run through pager) the source code for an object."""
1184 """Print (or run through pager) the source code for an object."""
1186 self._inspect('psource',parameter_s, namespaces)
1185 self._inspect('psource',parameter_s, namespaces)
1187
1186
1188 @line_magic
1187 @line_magic
1189 def pfile(self, parameter_s=''):
1188 def pfile(self, parameter_s=''):
1190 """Print (or run through pager) the file where an object is defined.
1189 """Print (or run through pager) the file where an object is defined.
1191
1190
1192 The file opens at the line where the object definition begins. IPython
1191 The file opens at the line where the object definition begins. IPython
1193 will honor the environment variable PAGER if set, and otherwise will
1192 will honor the environment variable PAGER if set, and otherwise will
1194 do its best to print the file in a convenient form.
1193 do its best to print the file in a convenient form.
1195
1194
1196 If the given argument is not an object currently defined, IPython will
1195 If the given argument is not an object currently defined, IPython will
1197 try to interpret it as a filename (automatically adding a .py extension
1196 try to interpret it as a filename (automatically adding a .py extension
1198 if needed). You can thus use %pfile as a syntax highlighting code
1197 if needed). You can thus use %pfile as a syntax highlighting code
1199 viewer."""
1198 viewer."""
1200
1199
1201 # first interpret argument as an object name
1200 # first interpret argument as an object name
1202 out = self._inspect('pfile',parameter_s)
1201 out = self._inspect('pfile',parameter_s)
1203 # if not, try the input as a filename
1202 # if not, try the input as a filename
1204 if out == 'not found':
1203 if out == 'not found':
1205 try:
1204 try:
1206 filename = get_py_filename(parameter_s)
1205 filename = get_py_filename(parameter_s)
1207 except IOError,msg:
1206 except IOError,msg:
1208 print msg
1207 print msg
1209 return
1208 return
1210 page.page(self.shell.inspector.format(open(filename).read()))
1209 page.page(self.shell.inspector.format(open(filename).read()))
1211
1210
1212 @line_magic
1211 @line_magic
1213 def psearch(self, parameter_s=''):
1212 def psearch(self, parameter_s=''):
1214 """Search for object in namespaces by wildcard.
1213 """Search for object in namespaces by wildcard.
1215
1214
1216 %psearch [options] PATTERN [OBJECT TYPE]
1215 %psearch [options] PATTERN [OBJECT TYPE]
1217
1216
1218 Note: ? can be used as a synonym for %psearch, at the beginning or at
1217 Note: ? can be used as a synonym for %psearch, at the beginning or at
1219 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
1218 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
1220 rest of the command line must be unchanged (options come first), so
1219 rest of the command line must be unchanged (options come first), so
1221 for example the following forms are equivalent
1220 for example the following forms are equivalent
1222
1221
1223 %psearch -i a* function
1222 %psearch -i a* function
1224 -i a* function?
1223 -i a* function?
1225 ?-i a* function
1224 ?-i a* function
1226
1225
1227 Arguments:
1226 Arguments:
1228
1227
1229 PATTERN
1228 PATTERN
1230
1229
1231 where PATTERN is a string containing * as a wildcard similar to its
1230 where PATTERN is a string containing * as a wildcard similar to its
1232 use in a shell. The pattern is matched in all namespaces on the
1231 use in a shell. The pattern is matched in all namespaces on the
1233 search path. By default objects starting with a single _ are not
1232 search path. By default objects starting with a single _ are not
1234 matched, many IPython generated objects have a single
1233 matched, many IPython generated objects have a single
1235 underscore. The default is case insensitive matching. Matching is
1234 underscore. The default is case insensitive matching. Matching is
1236 also done on the attributes of objects and not only on the objects
1235 also done on the attributes of objects and not only on the objects
1237 in a module.
1236 in a module.
1238
1237
1239 [OBJECT TYPE]
1238 [OBJECT TYPE]
1240
1239
1241 Is the name of a python type from the types module. The name is
1240 Is the name of a python type from the types module. The name is
1242 given in lowercase without the ending type, ex. StringType is
1241 given in lowercase without the ending type, ex. StringType is
1243 written string. By adding a type here only objects matching the
1242 written string. By adding a type here only objects matching the
1244 given type are matched. Using all here makes the pattern match all
1243 given type are matched. Using all here makes the pattern match all
1245 types (this is the default).
1244 types (this is the default).
1246
1245
1247 Options:
1246 Options:
1248
1247
1249 -a: makes the pattern match even objects whose names start with a
1248 -a: makes the pattern match even objects whose names start with a
1250 single underscore. These names are normally omitted from the
1249 single underscore. These names are normally omitted from the
1251 search.
1250 search.
1252
1251
1253 -i/-c: make the pattern case insensitive/sensitive. If neither of
1252 -i/-c: make the pattern case insensitive/sensitive. If neither of
1254 these options are given, the default is read from your configuration
1253 these options are given, the default is read from your configuration
1255 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
1254 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
1256 If this option is not specified in your configuration file, IPython's
1255 If this option is not specified in your configuration file, IPython's
1257 internal default is to do a case sensitive search.
1256 internal default is to do a case sensitive search.
1258
1257
1259 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
1258 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
1260 specify can be searched in any of the following namespaces:
1259 specify can be searched in any of the following namespaces:
1261 'builtin', 'user', 'user_global','internal', 'alias', where
1260 'builtin', 'user', 'user_global','internal', 'alias', where
1262 'builtin' and 'user' are the search defaults. Note that you should
1261 'builtin' and 'user' are the search defaults. Note that you should
1263 not use quotes when specifying namespaces.
1262 not use quotes when specifying namespaces.
1264
1263
1265 'Builtin' contains the python module builtin, 'user' contains all
1264 'Builtin' contains the python module builtin, 'user' contains all
1266 user data, 'alias' only contain the shell aliases and no python
1265 user data, 'alias' only contain the shell aliases and no python
1267 objects, 'internal' contains objects used by IPython. The
1266 objects, 'internal' contains objects used by IPython. The
1268 'user_global' namespace is only used by embedded IPython instances,
1267 'user_global' namespace is only used by embedded IPython instances,
1269 and it contains module-level globals. You can add namespaces to the
1268 and it contains module-level globals. You can add namespaces to the
1270 search with -s or exclude them with -e (these options can be given
1269 search with -s or exclude them with -e (these options can be given
1271 more than once).
1270 more than once).
1272
1271
1273 Examples
1272 Examples
1274 --------
1273 --------
1275 ::
1274 ::
1276
1275
1277 %psearch a* -> objects beginning with an a
1276 %psearch a* -> objects beginning with an a
1278 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
1277 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
1279 %psearch a* function -> all functions beginning with an a
1278 %psearch a* function -> all functions beginning with an a
1280 %psearch re.e* -> objects beginning with an e in module re
1279 %psearch re.e* -> objects beginning with an e in module re
1281 %psearch r*.e* -> objects that start with e in modules starting in r
1280 %psearch r*.e* -> objects that start with e in modules starting in r
1282 %psearch r*.* string -> all strings in modules beginning with r
1281 %psearch r*.* string -> all strings in modules beginning with r
1283
1282
1284 Case sensitive search::
1283 Case sensitive search::
1285
1284
1286 %psearch -c a* list all object beginning with lower case a
1285 %psearch -c a* list all object beginning with lower case a
1287
1286
1288 Show objects beginning with a single _::
1287 Show objects beginning with a single _::
1289
1288
1290 %psearch -a _* list objects beginning with a single underscore"""
1289 %psearch -a _* list objects beginning with a single underscore"""
1291 try:
1290 try:
1292 parameter_s.encode('ascii')
1291 parameter_s.encode('ascii')
1293 except UnicodeEncodeError:
1292 except UnicodeEncodeError:
1294 print 'Python identifiers can only contain ascii characters.'
1293 print 'Python identifiers can only contain ascii characters.'
1295 return
1294 return
1296
1295
1297 # default namespaces to be searched
1296 # default namespaces to be searched
1298 def_search = ['user_local', 'user_global', 'builtin']
1297 def_search = ['user_local', 'user_global', 'builtin']
1299
1298
1300 # Process options/args
1299 # Process options/args
1301 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
1300 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
1302 opt = opts.get
1301 opt = opts.get
1303 shell = self.shell
1302 shell = self.shell
1304 psearch = shell.inspector.psearch
1303 psearch = shell.inspector.psearch
1305
1304
1306 # select case options
1305 # select case options
1307 if opts.has_key('i'):
1306 if opts.has_key('i'):
1308 ignore_case = True
1307 ignore_case = True
1309 elif opts.has_key('c'):
1308 elif opts.has_key('c'):
1310 ignore_case = False
1309 ignore_case = False
1311 else:
1310 else:
1312 ignore_case = not shell.wildcards_case_sensitive
1311 ignore_case = not shell.wildcards_case_sensitive
1313
1312
1314 # Build list of namespaces to search from user options
1313 # Build list of namespaces to search from user options
1315 def_search.extend(opt('s',[]))
1314 def_search.extend(opt('s',[]))
1316 ns_exclude = ns_exclude=opt('e',[])
1315 ns_exclude = ns_exclude=opt('e',[])
1317 ns_search = [nm for nm in def_search if nm not in ns_exclude]
1316 ns_search = [nm for nm in def_search if nm not in ns_exclude]
1318
1317
1319 # Call the actual search
1318 # Call the actual search
1320 try:
1319 try:
1321 psearch(args,shell.ns_table,ns_search,
1320 psearch(args,shell.ns_table,ns_search,
1322 show_all=opt('a'),ignore_case=ignore_case)
1321 show_all=opt('a'),ignore_case=ignore_case)
1323 except:
1322 except:
1324 shell.showtraceback()
1323 shell.showtraceback()
1325
1324
1326 @skip_doctest
1325 @skip_doctest
1327 @line_magic
1326 @line_magic
1328 def who_ls(self, parameter_s=''):
1327 def who_ls(self, parameter_s=''):
1329 """Return a sorted list of all interactive variables.
1328 """Return a sorted list of all interactive variables.
1330
1329
1331 If arguments are given, only variables of types matching these
1330 If arguments are given, only variables of types matching these
1332 arguments are returned.
1331 arguments are returned.
1333
1332
1334 Examples
1333 Examples
1335 --------
1334 --------
1336
1335
1337 Define two variables and list them with who_ls::
1336 Define two variables and list them with who_ls::
1338
1337
1339 In [1]: alpha = 123
1338 In [1]: alpha = 123
1340
1339
1341 In [2]: beta = 'test'
1340 In [2]: beta = 'test'
1342
1341
1343 In [3]: %who_ls
1342 In [3]: %who_ls
1344 Out[3]: ['alpha', 'beta']
1343 Out[3]: ['alpha', 'beta']
1345
1344
1346 In [4]: %who_ls int
1345 In [4]: %who_ls int
1347 Out[4]: ['alpha']
1346 Out[4]: ['alpha']
1348
1347
1349 In [5]: %who_ls str
1348 In [5]: %who_ls str
1350 Out[5]: ['beta']
1349 Out[5]: ['beta']
1351 """
1350 """
1352
1351
1353 user_ns = self.shell.user_ns
1352 user_ns = self.shell.user_ns
1354 user_ns_hidden = self.shell.user_ns_hidden
1353 user_ns_hidden = self.shell.user_ns_hidden
1355 out = [ i for i in user_ns
1354 out = [ i for i in user_ns
1356 if not i.startswith('_') \
1355 if not i.startswith('_') \
1357 and not i in user_ns_hidden ]
1356 and not i in user_ns_hidden ]
1358
1357
1359 typelist = parameter_s.split()
1358 typelist = parameter_s.split()
1360 if typelist:
1359 if typelist:
1361 typeset = set(typelist)
1360 typeset = set(typelist)
1362 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
1361 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
1363
1362
1364 out.sort()
1363 out.sort()
1365 return out
1364 return out
1366
1365
1367 @skip_doctest
1366 @skip_doctest
1368 @line_magic
1367 @line_magic
1369 def who(self, parameter_s=''):
1368 def who(self, parameter_s=''):
1370 """Print all interactive variables, with some minimal formatting.
1369 """Print all interactive variables, with some minimal formatting.
1371
1370
1372 If any arguments are given, only variables whose type matches one of
1371 If any arguments are given, only variables whose type matches one of
1373 these are printed. For example::
1372 these are printed. For example::
1374
1373
1375 %who function str
1374 %who function str
1376
1375
1377 will only list functions and strings, excluding all other types of
1376 will only list functions and strings, excluding all other types of
1378 variables. To find the proper type names, simply use type(var) at a
1377 variables. To find the proper type names, simply use type(var) at a
1379 command line to see how python prints type names. For example:
1378 command line to see how python prints type names. For example:
1380
1379
1381 ::
1380 ::
1382
1381
1383 In [1]: type('hello')\\
1382 In [1]: type('hello')\\
1384 Out[1]: <type 'str'>
1383 Out[1]: <type 'str'>
1385
1384
1386 indicates that the type name for strings is 'str'.
1385 indicates that the type name for strings is 'str'.
1387
1386
1388 ``%who`` always excludes executed names loaded through your configuration
1387 ``%who`` always excludes executed names loaded through your configuration
1389 file and things which are internal to IPython.
1388 file and things which are internal to IPython.
1390
1389
1391 This is deliberate, as typically you may load many modules and the
1390 This is deliberate, as typically you may load many modules and the
1392 purpose of %who is to show you only what you've manually defined.
1391 purpose of %who is to show you only what you've manually defined.
1393
1392
1394 Examples
1393 Examples
1395 --------
1394 --------
1396
1395
1397 Define two variables and list them with who::
1396 Define two variables and list them with who::
1398
1397
1399 In [1]: alpha = 123
1398 In [1]: alpha = 123
1400
1399
1401 In [2]: beta = 'test'
1400 In [2]: beta = 'test'
1402
1401
1403 In [3]: %who
1402 In [3]: %who
1404 alpha beta
1403 alpha beta
1405
1404
1406 In [4]: %who int
1405 In [4]: %who int
1407 alpha
1406 alpha
1408
1407
1409 In [5]: %who str
1408 In [5]: %who str
1410 beta
1409 beta
1411 """
1410 """
1412
1411
1413 varlist = self.magic_who_ls(parameter_s)
1412 varlist = self.magic_who_ls(parameter_s)
1414 if not varlist:
1413 if not varlist:
1415 if parameter_s:
1414 if parameter_s:
1416 print 'No variables match your requested type.'
1415 print 'No variables match your requested type.'
1417 else:
1416 else:
1418 print 'Interactive namespace is empty.'
1417 print 'Interactive namespace is empty.'
1419 return
1418 return
1420
1419
1421 # if we have variables, move on...
1420 # if we have variables, move on...
1422 count = 0
1421 count = 0
1423 for i in varlist:
1422 for i in varlist:
1424 print i+'\t',
1423 print i+'\t',
1425 count += 1
1424 count += 1
1426 if count > 8:
1425 if count > 8:
1427 count = 0
1426 count = 0
1428 print
1427 print
1429 print
1428 print
1430
1429
1431 @skip_doctest
1430 @skip_doctest
1432 @line_magic
1431 @line_magic
1433 def whos(self, parameter_s=''):
1432 def whos(self, parameter_s=''):
1434 """Like %who, but gives some extra information about each variable.
1433 """Like %who, but gives some extra information about each variable.
1435
1434
1436 The same type filtering of %who can be applied here.
1435 The same type filtering of %who can be applied here.
1437
1436
1438 For all variables, the type is printed. Additionally it prints:
1437 For all variables, the type is printed. Additionally it prints:
1439
1438
1440 - For {},[],(): their length.
1439 - For {},[],(): their length.
1441
1440
1442 - For numpy arrays, a summary with shape, number of
1441 - For numpy arrays, a summary with shape, number of
1443 elements, typecode and size in memory.
1442 elements, typecode and size in memory.
1444
1443
1445 - Everything else: a string representation, snipping their middle if
1444 - Everything else: a string representation, snipping their middle if
1446 too long.
1445 too long.
1447
1446
1448 Examples
1447 Examples
1449 --------
1448 --------
1450
1449
1451 Define two variables and list them with whos::
1450 Define two variables and list them with whos::
1452
1451
1453 In [1]: alpha = 123
1452 In [1]: alpha = 123
1454
1453
1455 In [2]: beta = 'test'
1454 In [2]: beta = 'test'
1456
1455
1457 In [3]: %whos
1456 In [3]: %whos
1458 Variable Type Data/Info
1457 Variable Type Data/Info
1459 --------------------------------
1458 --------------------------------
1460 alpha int 123
1459 alpha int 123
1461 beta str test
1460 beta str test
1462 """
1461 """
1463
1462
1464 varnames = self.magic_who_ls(parameter_s)
1463 varnames = self.magic_who_ls(parameter_s)
1465 if not varnames:
1464 if not varnames:
1466 if parameter_s:
1465 if parameter_s:
1467 print 'No variables match your requested type.'
1466 print 'No variables match your requested type.'
1468 else:
1467 else:
1469 print 'Interactive namespace is empty.'
1468 print 'Interactive namespace is empty.'
1470 return
1469 return
1471
1470
1472 # if we have variables, move on...
1471 # if we have variables, move on...
1473
1472
1474 # for these types, show len() instead of data:
1473 # for these types, show len() instead of data:
1475 seq_types = ['dict', 'list', 'tuple']
1474 seq_types = ['dict', 'list', 'tuple']
1476
1475
1477 # for numpy arrays, display summary info
1476 # for numpy arrays, display summary info
1478 ndarray_type = None
1477 ndarray_type = None
1479 if 'numpy' in sys.modules:
1478 if 'numpy' in sys.modules:
1480 try:
1479 try:
1481 from numpy import ndarray
1480 from numpy import ndarray
1482 except ImportError:
1481 except ImportError:
1483 pass
1482 pass
1484 else:
1483 else:
1485 ndarray_type = ndarray.__name__
1484 ndarray_type = ndarray.__name__
1486
1485
1487 # Find all variable names and types so we can figure out column sizes
1486 # Find all variable names and types so we can figure out column sizes
1488 def get_vars(i):
1487 def get_vars(i):
1489 return self.shell.user_ns[i]
1488 return self.shell.user_ns[i]
1490
1489
1491 # some types are well known and can be shorter
1490 # some types are well known and can be shorter
1492 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
1491 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
1493 def type_name(v):
1492 def type_name(v):
1494 tn = type(v).__name__
1493 tn = type(v).__name__
1495 return abbrevs.get(tn,tn)
1494 return abbrevs.get(tn,tn)
1496
1495
1497 varlist = map(get_vars,varnames)
1496 varlist = map(get_vars,varnames)
1498
1497
1499 typelist = []
1498 typelist = []
1500 for vv in varlist:
1499 for vv in varlist:
1501 tt = type_name(vv)
1500 tt = type_name(vv)
1502
1501
1503 if tt=='instance':
1502 if tt=='instance':
1504 typelist.append( abbrevs.get(str(vv.__class__),
1503 typelist.append( abbrevs.get(str(vv.__class__),
1505 str(vv.__class__)))
1504 str(vv.__class__)))
1506 else:
1505 else:
1507 typelist.append(tt)
1506 typelist.append(tt)
1508
1507
1509 # column labels and # of spaces as separator
1508 # column labels and # of spaces as separator
1510 varlabel = 'Variable'
1509 varlabel = 'Variable'
1511 typelabel = 'Type'
1510 typelabel = 'Type'
1512 datalabel = 'Data/Info'
1511 datalabel = 'Data/Info'
1513 colsep = 3
1512 colsep = 3
1514 # variable format strings
1513 # variable format strings
1515 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
1514 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
1516 aformat = "%s: %s elems, type `%s`, %s bytes"
1515 aformat = "%s: %s elems, type `%s`, %s bytes"
1517 # find the size of the columns to format the output nicely
1516 # find the size of the columns to format the output nicely
1518 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1517 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1519 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1518 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1520 # table header
1519 # table header
1521 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1520 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1522 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1521 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1523 # and the table itself
1522 # and the table itself
1524 kb = 1024
1523 kb = 1024
1525 Mb = 1048576 # kb**2
1524 Mb = 1048576 # kb**2
1526 for vname,var,vtype in zip(varnames,varlist,typelist):
1525 for vname,var,vtype in zip(varnames,varlist,typelist):
1527 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
1526 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
1528 if vtype in seq_types:
1527 if vtype in seq_types:
1529 print "n="+str(len(var))
1528 print "n="+str(len(var))
1530 elif vtype == ndarray_type:
1529 elif vtype == ndarray_type:
1531 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1530 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1532 if vtype==ndarray_type:
1531 if vtype==ndarray_type:
1533 # numpy
1532 # numpy
1534 vsize = var.size
1533 vsize = var.size
1535 vbytes = vsize*var.itemsize
1534 vbytes = vsize*var.itemsize
1536 vdtype = var.dtype
1535 vdtype = var.dtype
1537
1536
1538 if vbytes < 100000:
1537 if vbytes < 100000:
1539 print aformat % (vshape,vsize,vdtype,vbytes)
1538 print aformat % (vshape,vsize,vdtype,vbytes)
1540 else:
1539 else:
1541 print aformat % (vshape,vsize,vdtype,vbytes),
1540 print aformat % (vshape,vsize,vdtype,vbytes),
1542 if vbytes < Mb:
1541 if vbytes < Mb:
1543 print '(%s kb)' % (vbytes/kb,)
1542 print '(%s kb)' % (vbytes/kb,)
1544 else:
1543 else:
1545 print '(%s Mb)' % (vbytes/Mb,)
1544 print '(%s Mb)' % (vbytes/Mb,)
1546 else:
1545 else:
1547 try:
1546 try:
1548 vstr = str(var)
1547 vstr = str(var)
1549 except UnicodeEncodeError:
1548 except UnicodeEncodeError:
1550 vstr = unicode(var).encode(DEFAULT_ENCODING,
1549 vstr = unicode(var).encode(DEFAULT_ENCODING,
1551 'backslashreplace')
1550 'backslashreplace')
1552 except:
1551 except:
1553 vstr = "<object with id %d (str() failed)>" % id(var)
1552 vstr = "<object with id %d (str() failed)>" % id(var)
1554 vstr = vstr.replace('\n','\\n')
1553 vstr = vstr.replace('\n','\\n')
1555 if len(vstr) < 50:
1554 if len(vstr) < 50:
1556 print vstr
1555 print vstr
1557 else:
1556 else:
1558 print vstr[:25] + "<...>" + vstr[-25:]
1557 print vstr[:25] + "<...>" + vstr[-25:]
1559
1558
1560 @line_magic
1559 @line_magic
1561 def reset(self, parameter_s=''):
1560 def reset(self, parameter_s=''):
1562 """Resets the namespace by removing all names defined by the user, if
1561 """Resets the namespace by removing all names defined by the user, if
1563 called without arguments, or by removing some types of objects, such
1562 called without arguments, or by removing some types of objects, such
1564 as everything currently in IPython's In[] and Out[] containers (see
1563 as everything currently in IPython's In[] and Out[] containers (see
1565 the parameters for details).
1564 the parameters for details).
1566
1565
1567 Parameters
1566 Parameters
1568 ----------
1567 ----------
1569 -f : force reset without asking for confirmation.
1568 -f : force reset without asking for confirmation.
1570
1569
1571 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
1570 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
1572 References to objects may be kept. By default (without this option),
1571 References to objects may be kept. By default (without this option),
1573 we do a 'hard' reset, giving you a new session and removing all
1572 we do a 'hard' reset, giving you a new session and removing all
1574 references to objects from the current session.
1573 references to objects from the current session.
1575
1574
1576 in : reset input history
1575 in : reset input history
1577
1576
1578 out : reset output history
1577 out : reset output history
1579
1578
1580 dhist : reset directory history
1579 dhist : reset directory history
1581
1580
1582 array : reset only variables that are NumPy arrays
1581 array : reset only variables that are NumPy arrays
1583
1582
1584 See Also
1583 See Also
1585 --------
1584 --------
1586 magic_reset_selective : invoked as ``%reset_selective``
1585 magic_reset_selective : invoked as ``%reset_selective``
1587
1586
1588 Examples
1587 Examples
1589 --------
1588 --------
1590 ::
1589 ::
1591
1590
1592 In [6]: a = 1
1591 In [6]: a = 1
1593
1592
1594 In [7]: a
1593 In [7]: a
1595 Out[7]: 1
1594 Out[7]: 1
1596
1595
1597 In [8]: 'a' in _ip.user_ns
1596 In [8]: 'a' in _ip.user_ns
1598 Out[8]: True
1597 Out[8]: True
1599
1598
1600 In [9]: %reset -f
1599 In [9]: %reset -f
1601
1600
1602 In [1]: 'a' in _ip.user_ns
1601 In [1]: 'a' in _ip.user_ns
1603 Out[1]: False
1602 Out[1]: False
1604
1603
1605 In [2]: %reset -f in
1604 In [2]: %reset -f in
1606 Flushing input history
1605 Flushing input history
1607
1606
1608 In [3]: %reset -f dhist in
1607 In [3]: %reset -f dhist in
1609 Flushing directory history
1608 Flushing directory history
1610 Flushing input history
1609 Flushing input history
1611
1610
1612 Notes
1611 Notes
1613 -----
1612 -----
1614 Calling this magic from clients that do not implement standard input,
1613 Calling this magic from clients that do not implement standard input,
1615 such as the ipython notebook interface, will reset the namespace
1614 such as the ipython notebook interface, will reset the namespace
1616 without confirmation.
1615 without confirmation.
1617 """
1616 """
1618 opts, args = self.parse_options(parameter_s,'sf', mode='list')
1617 opts, args = self.parse_options(parameter_s,'sf', mode='list')
1619 if 'f' in opts:
1618 if 'f' in opts:
1620 ans = True
1619 ans = True
1621 else:
1620 else:
1622 try:
1621 try:
1623 ans = self.shell.ask_yes_no(
1622 ans = self.shell.ask_yes_no(
1624 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ", default='n')
1623 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ", default='n')
1625 except StdinNotImplementedError:
1624 except StdinNotImplementedError:
1626 ans = True
1625 ans = True
1627 if not ans:
1626 if not ans:
1628 print 'Nothing done.'
1627 print 'Nothing done.'
1629 return
1628 return
1630
1629
1631 if 's' in opts: # Soft reset
1630 if 's' in opts: # Soft reset
1632 user_ns = self.shell.user_ns
1631 user_ns = self.shell.user_ns
1633 for i in self.magic_who_ls():
1632 for i in self.magic_who_ls():
1634 del(user_ns[i])
1633 del(user_ns[i])
1635 elif len(args) == 0: # Hard reset
1634 elif len(args) == 0: # Hard reset
1636 self.shell.reset(new_session = False)
1635 self.shell.reset(new_session = False)
1637
1636
1638 # reset in/out/dhist/array: previously extensinions/clearcmd.py
1637 # reset in/out/dhist/array: previously extensinions/clearcmd.py
1639 ip = self.shell
1638 ip = self.shell
1640 user_ns = self.shell.user_ns # local lookup, heavily used
1639 user_ns = self.shell.user_ns # local lookup, heavily used
1641
1640
1642 for target in args:
1641 for target in args:
1643 target = target.lower() # make matches case insensitive
1642 target = target.lower() # make matches case insensitive
1644 if target == 'out':
1643 if target == 'out':
1645 print "Flushing output cache (%d entries)" % len(user_ns['_oh'])
1644 print "Flushing output cache (%d entries)" % len(user_ns['_oh'])
1646 self.shell.displayhook.flush()
1645 self.shell.displayhook.flush()
1647
1646
1648 elif target == 'in':
1647 elif target == 'in':
1649 print "Flushing input history"
1648 print "Flushing input history"
1650 pc = self.shell.displayhook.prompt_count + 1
1649 pc = self.shell.displayhook.prompt_count + 1
1651 for n in range(1, pc):
1650 for n in range(1, pc):
1652 key = '_i'+repr(n)
1651 key = '_i'+repr(n)
1653 user_ns.pop(key,None)
1652 user_ns.pop(key,None)
1654 user_ns.update(dict(_i=u'',_ii=u'',_iii=u''))
1653 user_ns.update(dict(_i=u'',_ii=u'',_iii=u''))
1655 hm = ip.history_manager
1654 hm = ip.history_manager
1656 # don't delete these, as %save and %macro depending on the length
1655 # don't delete these, as %save and %macro depending on the length
1657 # of these lists to be preserved
1656 # of these lists to be preserved
1658 hm.input_hist_parsed[:] = [''] * pc
1657 hm.input_hist_parsed[:] = [''] * pc
1659 hm.input_hist_raw[:] = [''] * pc
1658 hm.input_hist_raw[:] = [''] * pc
1660 # hm has internal machinery for _i,_ii,_iii, clear it out
1659 # hm has internal machinery for _i,_ii,_iii, clear it out
1661 hm._i = hm._ii = hm._iii = hm._i00 = u''
1660 hm._i = hm._ii = hm._iii = hm._i00 = u''
1662
1661
1663 elif target == 'array':
1662 elif target == 'array':
1664 # Support cleaning up numpy arrays
1663 # Support cleaning up numpy arrays
1665 try:
1664 try:
1666 from numpy import ndarray
1665 from numpy import ndarray
1667 # This must be done with items and not iteritems because we're
1666 # This must be done with items and not iteritems because we're
1668 # going to modify the dict in-place.
1667 # going to modify the dict in-place.
1669 for x,val in user_ns.items():
1668 for x,val in user_ns.items():
1670 if isinstance(val,ndarray):
1669 if isinstance(val,ndarray):
1671 del user_ns[x]
1670 del user_ns[x]
1672 except ImportError:
1671 except ImportError:
1673 print "reset array only works if Numpy is available."
1672 print "reset array only works if Numpy is available."
1674
1673
1675 elif target == 'dhist':
1674 elif target == 'dhist':
1676 print "Flushing directory history"
1675 print "Flushing directory history"
1677 del user_ns['_dh'][:]
1676 del user_ns['_dh'][:]
1678
1677
1679 else:
1678 else:
1680 print "Don't know how to reset ",
1679 print "Don't know how to reset ",
1681 print target + ", please run `%reset?` for details"
1680 print target + ", please run `%reset?` for details"
1682
1681
1683 gc.collect()
1682 gc.collect()
1684
1683
1685 @line_magic
1684 @line_magic
1686 def reset_selective(self, parameter_s=''):
1685 def reset_selective(self, parameter_s=''):
1687 """Resets the namespace by removing names defined by the user.
1686 """Resets the namespace by removing names defined by the user.
1688
1687
1689 Input/Output history are left around in case you need them.
1688 Input/Output history are left around in case you need them.
1690
1689
1691 %reset_selective [-f] regex
1690 %reset_selective [-f] regex
1692
1691
1693 No action is taken if regex is not included
1692 No action is taken if regex is not included
1694
1693
1695 Options
1694 Options
1696 -f : force reset without asking for confirmation.
1695 -f : force reset without asking for confirmation.
1697
1696
1698 See Also
1697 See Also
1699 --------
1698 --------
1700 magic_reset : invoked as ``%reset``
1699 magic_reset : invoked as ``%reset``
1701
1700
1702 Examples
1701 Examples
1703 --------
1702 --------
1704
1703
1705 We first fully reset the namespace so your output looks identical to
1704 We first fully reset the namespace so your output looks identical to
1706 this example for pedagogical reasons; in practice you do not need a
1705 this example for pedagogical reasons; in practice you do not need a
1707 full reset::
1706 full reset::
1708
1707
1709 In [1]: %reset -f
1708 In [1]: %reset -f
1710
1709
1711 Now, with a clean namespace we can make a few variables and use
1710 Now, with a clean namespace we can make a few variables and use
1712 ``%reset_selective`` to only delete names that match our regexp::
1711 ``%reset_selective`` to only delete names that match our regexp::
1713
1712
1714 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1713 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1715
1714
1716 In [3]: who_ls
1715 In [3]: who_ls
1717 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1716 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1718
1717
1719 In [4]: %reset_selective -f b[2-3]m
1718 In [4]: %reset_selective -f b[2-3]m
1720
1719
1721 In [5]: who_ls
1720 In [5]: who_ls
1722 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1721 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1723
1722
1724 In [6]: %reset_selective -f d
1723 In [6]: %reset_selective -f d
1725
1724
1726 In [7]: who_ls
1725 In [7]: who_ls
1727 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1726 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1728
1727
1729 In [8]: %reset_selective -f c
1728 In [8]: %reset_selective -f c
1730
1729
1731 In [9]: who_ls
1730 In [9]: who_ls
1732 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1731 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1733
1732
1734 In [10]: %reset_selective -f b
1733 In [10]: %reset_selective -f b
1735
1734
1736 In [11]: who_ls
1735 In [11]: who_ls
1737 Out[11]: ['a']
1736 Out[11]: ['a']
1738
1737
1739 Notes
1738 Notes
1740 -----
1739 -----
1741 Calling this magic from clients that do not implement standard input,
1740 Calling this magic from clients that do not implement standard input,
1742 such as the ipython notebook interface, will reset the namespace
1741 such as the ipython notebook interface, will reset the namespace
1743 without confirmation.
1742 without confirmation.
1744 """
1743 """
1745
1744
1746 opts, regex = self.parse_options(parameter_s,'f')
1745 opts, regex = self.parse_options(parameter_s,'f')
1747
1746
1748 if opts.has_key('f'):
1747 if opts.has_key('f'):
1749 ans = True
1748 ans = True
1750 else:
1749 else:
1751 try:
1750 try:
1752 ans = self.shell.ask_yes_no(
1751 ans = self.shell.ask_yes_no(
1753 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ",
1752 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ",
1754 default='n')
1753 default='n')
1755 except StdinNotImplementedError:
1754 except StdinNotImplementedError:
1756 ans = True
1755 ans = True
1757 if not ans:
1756 if not ans:
1758 print 'Nothing done.'
1757 print 'Nothing done.'
1759 return
1758 return
1760 user_ns = self.shell.user_ns
1759 user_ns = self.shell.user_ns
1761 if not regex:
1760 if not regex:
1762 print 'No regex pattern specified. Nothing done.'
1761 print 'No regex pattern specified. Nothing done.'
1763 return
1762 return
1764 else:
1763 else:
1765 try:
1764 try:
1766 m = re.compile(regex)
1765 m = re.compile(regex)
1767 except TypeError:
1766 except TypeError:
1768 raise TypeError('regex must be a string or compiled pattern')
1767 raise TypeError('regex must be a string or compiled pattern')
1769 for i in self.magic_who_ls():
1768 for i in self.magic_who_ls():
1770 if m.search(i):
1769 if m.search(i):
1771 del(user_ns[i])
1770 del(user_ns[i])
1772
1771
1773 @line_magic
1772 @line_magic
1774 def xdel(self, parameter_s=''):
1773 def xdel(self, parameter_s=''):
1775 """Delete a variable, trying to clear it from anywhere that
1774 """Delete a variable, trying to clear it from anywhere that
1776 IPython's machinery has references to it. By default, this uses
1775 IPython's machinery has references to it. By default, this uses
1777 the identity of the named object in the user namespace to remove
1776 the identity of the named object in the user namespace to remove
1778 references held under other names. The object is also removed
1777 references held under other names. The object is also removed
1779 from the output history.
1778 from the output history.
1780
1779
1781 Options
1780 Options
1782 -n : Delete the specified name from all namespaces, without
1781 -n : Delete the specified name from all namespaces, without
1783 checking their identity.
1782 checking their identity.
1784 """
1783 """
1785 opts, varname = self.parse_options(parameter_s,'n')
1784 opts, varname = self.parse_options(parameter_s,'n')
1786 try:
1785 try:
1787 self.shell.del_var(varname, ('n' in opts))
1786 self.shell.del_var(varname, ('n' in opts))
1788 except (NameError, ValueError) as e:
1787 except (NameError, ValueError) as e:
1789 print type(e).__name__ +": "+ str(e)
1788 print type(e).__name__ +": "+ str(e)
1790
1789
1791
1790
1792 @register_magics
1791 @register_magics
1793 class ExecutionMagics(Magics):
1792 class ExecutionMagics(Magics):
1794 """Magics related to code execution, debugging, profiling, etc.
1793 """Magics related to code execution, debugging, profiling, etc.
1795
1794
1796 """
1795 """
1797
1796
1798 def __init__(self, shell):
1797 def __init__(self, shell):
1799 super(ExecutionMagics, self).__init__(shell)
1798 super(ExecutionMagics, self).__init__(shell)
1800 if profile is None:
1799 if profile is None:
1801 self.magic_prun = self.profile_missing_notice
1800 self.magic_prun = self.profile_missing_notice
1802 # Default execution function used to actually run user code.
1801 # Default execution function used to actually run user code.
1803 self.default_runner = None
1802 self.default_runner = None
1804
1803
1805 def profile_missing_notice(self, *args, **kwargs):
1804 def profile_missing_notice(self, *args, **kwargs):
1806 error("""\
1805 error("""\
1807 The profile module could not be found. It has been removed from the standard
1806 The profile module could not be found. It has been removed from the standard
1808 python packages because of its non-free license. To use profiling, install the
1807 python packages because of its non-free license. To use profiling, install the
1809 python-profiler package from non-free.""")
1808 python-profiler package from non-free.""")
1810
1809
1811 @skip_doctest
1810 @skip_doctest
1812 @line_magic
1811 @line_magic
1813 def prun(self, parameter_s='',user_mode=1,
1812 def prun(self, parameter_s='',user_mode=1,
1814 opts=None,arg_lst=None,prog_ns=None):
1813 opts=None,arg_lst=None,prog_ns=None):
1815
1814
1816 """Run a statement through the python code profiler.
1815 """Run a statement through the python code profiler.
1817
1816
1818 Usage:
1817 Usage:
1819 %prun [options] statement
1818 %prun [options] statement
1820
1819
1821 The given statement (which doesn't require quote marks) is run via the
1820 The given statement (which doesn't require quote marks) is run via the
1822 python profiler in a manner similar to the profile.run() function.
1821 python profiler in a manner similar to the profile.run() function.
1823 Namespaces are internally managed to work correctly; profile.run
1822 Namespaces are internally managed to work correctly; profile.run
1824 cannot be used in IPython because it makes certain assumptions about
1823 cannot be used in IPython because it makes certain assumptions about
1825 namespaces which do not hold under IPython.
1824 namespaces which do not hold under IPython.
1826
1825
1827 Options:
1826 Options:
1828
1827
1829 -l <limit>: you can place restrictions on what or how much of the
1828 -l <limit>: you can place restrictions on what or how much of the
1830 profile gets printed. The limit value can be:
1829 profile gets printed. The limit value can be:
1831
1830
1832 * A string: only information for function names containing this string
1831 * A string: only information for function names containing this string
1833 is printed.
1832 is printed.
1834
1833
1835 * An integer: only these many lines are printed.
1834 * An integer: only these many lines are printed.
1836
1835
1837 * A float (between 0 and 1): this fraction of the report is printed
1836 * A float (between 0 and 1): this fraction of the report is printed
1838 (for example, use a limit of 0.4 to see the topmost 40% only).
1837 (for example, use a limit of 0.4 to see the topmost 40% only).
1839
1838
1840 You can combine several limits with repeated use of the option. For
1839 You can combine several limits with repeated use of the option. For
1841 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1840 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1842 information about class constructors.
1841 information about class constructors.
1843
1842
1844 -r: return the pstats.Stats object generated by the profiling. This
1843 -r: return the pstats.Stats object generated by the profiling. This
1845 object has all the information about the profile in it, and you can
1844 object has all the information about the profile in it, and you can
1846 later use it for further analysis or in other functions.
1845 later use it for further analysis or in other functions.
1847
1846
1848 -s <key>: sort profile by given key. You can provide more than one key
1847 -s <key>: sort profile by given key. You can provide more than one key
1849 by using the option several times: '-s key1 -s key2 -s key3...'. The
1848 by using the option several times: '-s key1 -s key2 -s key3...'. The
1850 default sorting key is 'time'.
1849 default sorting key is 'time'.
1851
1850
1852 The following is copied verbatim from the profile documentation
1851 The following is copied verbatim from the profile documentation
1853 referenced below:
1852 referenced below:
1854
1853
1855 When more than one key is provided, additional keys are used as
1854 When more than one key is provided, additional keys are used as
1856 secondary criteria when the there is equality in all keys selected
1855 secondary criteria when the there is equality in all keys selected
1857 before them.
1856 before them.
1858
1857
1859 Abbreviations can be used for any key names, as long as the
1858 Abbreviations can be used for any key names, as long as the
1860 abbreviation is unambiguous. The following are the keys currently
1859 abbreviation is unambiguous. The following are the keys currently
1861 defined:
1860 defined:
1862
1861
1863 Valid Arg Meaning
1862 Valid Arg Meaning
1864 "calls" call count
1863 "calls" call count
1865 "cumulative" cumulative time
1864 "cumulative" cumulative time
1866 "file" file name
1865 "file" file name
1867 "module" file name
1866 "module" file name
1868 "pcalls" primitive call count
1867 "pcalls" primitive call count
1869 "line" line number
1868 "line" line number
1870 "name" function name
1869 "name" function name
1871 "nfl" name/file/line
1870 "nfl" name/file/line
1872 "stdname" standard name
1871 "stdname" standard name
1873 "time" internal time
1872 "time" internal time
1874
1873
1875 Note that all sorts on statistics are in descending order (placing
1874 Note that all sorts on statistics are in descending order (placing
1876 most time consuming items first), where as name, file, and line number
1875 most time consuming items first), where as name, file, and line number
1877 searches are in ascending order (i.e., alphabetical). The subtle
1876 searches are in ascending order (i.e., alphabetical). The subtle
1878 distinction between "nfl" and "stdname" is that the standard name is a
1877 distinction between "nfl" and "stdname" is that the standard name is a
1879 sort of the name as printed, which means that the embedded line
1878 sort of the name as printed, which means that the embedded line
1880 numbers get compared in an odd way. For example, lines 3, 20, and 40
1879 numbers get compared in an odd way. For example, lines 3, 20, and 40
1881 would (if the file names were the same) appear in the string order
1880 would (if the file names were the same) appear in the string order
1882 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1881 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1883 line numbers. In fact, sort_stats("nfl") is the same as
1882 line numbers. In fact, sort_stats("nfl") is the same as
1884 sort_stats("name", "file", "line").
1883 sort_stats("name", "file", "line").
1885
1884
1886 -T <filename>: save profile results as shown on screen to a text
1885 -T <filename>: save profile results as shown on screen to a text
1887 file. The profile is still shown on screen.
1886 file. The profile is still shown on screen.
1888
1887
1889 -D <filename>: save (via dump_stats) profile statistics to given
1888 -D <filename>: save (via dump_stats) profile statistics to given
1890 filename. This data is in a format understood by the pstats module, and
1889 filename. This data is in a format understood by the pstats module, and
1891 is generated by a call to the dump_stats() method of profile
1890 is generated by a call to the dump_stats() method of profile
1892 objects. The profile is still shown on screen.
1891 objects. The profile is still shown on screen.
1893
1892
1894 -q: suppress output to the pager. Best used with -T and/or -D above.
1893 -q: suppress output to the pager. Best used with -T and/or -D above.
1895
1894
1896 If you want to run complete programs under the profiler's control, use
1895 If you want to run complete programs under the profiler's control, use
1897 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1896 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1898 contains profiler specific options as described here.
1897 contains profiler specific options as described here.
1899
1898
1900 You can read the complete documentation for the profile module with::
1899 You can read the complete documentation for the profile module with::
1901
1900
1902 In [1]: import profile; profile.help()
1901 In [1]: import profile; profile.help()
1903 """
1902 """
1904
1903
1905 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1904 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1906
1905
1907 if user_mode: # regular user call
1906 if user_mode: # regular user call
1908 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:q',
1907 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:q',
1909 list_all=1, posix=False)
1908 list_all=1, posix=False)
1910 namespace = self.shell.user_ns
1909 namespace = self.shell.user_ns
1911 else: # called to run a program by %run -p
1910 else: # called to run a program by %run -p
1912 try:
1911 try:
1913 filename = get_py_filename(arg_lst[0])
1912 filename = get_py_filename(arg_lst[0])
1914 except IOError as e:
1913 except IOError as e:
1915 try:
1914 try:
1916 msg = str(e)
1915 msg = str(e)
1917 except UnicodeError:
1916 except UnicodeError:
1918 msg = e.message
1917 msg = e.message
1919 error(msg)
1918 error(msg)
1920 return
1919 return
1921
1920
1922 arg_str = 'execfile(filename,prog_ns)'
1921 arg_str = 'execfile(filename,prog_ns)'
1923 namespace = {
1922 namespace = {
1924 'execfile': self.shell.safe_execfile,
1923 'execfile': self.shell.safe_execfile,
1925 'prog_ns': prog_ns,
1924 'prog_ns': prog_ns,
1926 'filename': filename
1925 'filename': filename
1927 }
1926 }
1928
1927
1929 opts.merge(opts_def)
1928 opts.merge(opts_def)
1930
1929
1931 prof = profile.Profile()
1930 prof = profile.Profile()
1932 try:
1931 try:
1933 prof = prof.runctx(arg_str,namespace,namespace)
1932 prof = prof.runctx(arg_str,namespace,namespace)
1934 sys_exit = ''
1933 sys_exit = ''
1935 except SystemExit:
1934 except SystemExit:
1936 sys_exit = """*** SystemExit exception caught in code being profiled."""
1935 sys_exit = """*** SystemExit exception caught in code being profiled."""
1937
1936
1938 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1937 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1939
1938
1940 lims = opts.l
1939 lims = opts.l
1941 if lims:
1940 if lims:
1942 lims = [] # rebuild lims with ints/floats/strings
1941 lims = [] # rebuild lims with ints/floats/strings
1943 for lim in opts.l:
1942 for lim in opts.l:
1944 try:
1943 try:
1945 lims.append(int(lim))
1944 lims.append(int(lim))
1946 except ValueError:
1945 except ValueError:
1947 try:
1946 try:
1948 lims.append(float(lim))
1947 lims.append(float(lim))
1949 except ValueError:
1948 except ValueError:
1950 lims.append(lim)
1949 lims.append(lim)
1951
1950
1952 # Trap output.
1951 # Trap output.
1953 stdout_trap = StringIO()
1952 stdout_trap = StringIO()
1954
1953
1955 if hasattr(stats,'stream'):
1954 if hasattr(stats,'stream'):
1956 # In newer versions of python, the stats object has a 'stream'
1955 # In newer versions of python, the stats object has a 'stream'
1957 # attribute to write into.
1956 # attribute to write into.
1958 stats.stream = stdout_trap
1957 stats.stream = stdout_trap
1959 stats.print_stats(*lims)
1958 stats.print_stats(*lims)
1960 else:
1959 else:
1961 # For older versions, we manually redirect stdout during printing
1960 # For older versions, we manually redirect stdout during printing
1962 sys_stdout = sys.stdout
1961 sys_stdout = sys.stdout
1963 try:
1962 try:
1964 sys.stdout = stdout_trap
1963 sys.stdout = stdout_trap
1965 stats.print_stats(*lims)
1964 stats.print_stats(*lims)
1966 finally:
1965 finally:
1967 sys.stdout = sys_stdout
1966 sys.stdout = sys_stdout
1968
1967
1969 output = stdout_trap.getvalue()
1968 output = stdout_trap.getvalue()
1970 output = output.rstrip()
1969 output = output.rstrip()
1971
1970
1972 if 'q' not in opts:
1971 if 'q' not in opts:
1973 page.page(output)
1972 page.page(output)
1974 print sys_exit,
1973 print sys_exit,
1975
1974
1976 dump_file = opts.D[0]
1975 dump_file = opts.D[0]
1977 text_file = opts.T[0]
1976 text_file = opts.T[0]
1978 if dump_file:
1977 if dump_file:
1979 dump_file = unquote_filename(dump_file)
1978 dump_file = unquote_filename(dump_file)
1980 prof.dump_stats(dump_file)
1979 prof.dump_stats(dump_file)
1981 print '\n*** Profile stats marshalled to file',\
1980 print '\n*** Profile stats marshalled to file',\
1982 `dump_file`+'.',sys_exit
1981 `dump_file`+'.',sys_exit
1983 if text_file:
1982 if text_file:
1984 text_file = unquote_filename(text_file)
1983 text_file = unquote_filename(text_file)
1985 pfile = open(text_file,'w')
1984 pfile = open(text_file,'w')
1986 pfile.write(output)
1985 pfile.write(output)
1987 pfile.close()
1986 pfile.close()
1988 print '\n*** Profile printout saved to text file',\
1987 print '\n*** Profile printout saved to text file',\
1989 `text_file`+'.',sys_exit
1988 `text_file`+'.',sys_exit
1990
1989
1991 if opts.has_key('r'):
1990 if opts.has_key('r'):
1992 return stats
1991 return stats
1993 else:
1992 else:
1994 return None
1993 return None
1995
1994
1996 @line_magic
1995 @line_magic
1997 def pdb(self, parameter_s=''):
1996 def pdb(self, parameter_s=''):
1998 """Control the automatic calling of the pdb interactive debugger.
1997 """Control the automatic calling of the pdb interactive debugger.
1999
1998
2000 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1999 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
2001 argument it works as a toggle.
2000 argument it works as a toggle.
2002
2001
2003 When an exception is triggered, IPython can optionally call the
2002 When an exception is triggered, IPython can optionally call the
2004 interactive pdb debugger after the traceback printout. %pdb toggles
2003 interactive pdb debugger after the traceback printout. %pdb toggles
2005 this feature on and off.
2004 this feature on and off.
2006
2005
2007 The initial state of this feature is set in your configuration
2006 The initial state of this feature is set in your configuration
2008 file (the option is ``InteractiveShell.pdb``).
2007 file (the option is ``InteractiveShell.pdb``).
2009
2008
2010 If you want to just activate the debugger AFTER an exception has fired,
2009 If you want to just activate the debugger AFTER an exception has fired,
2011 without having to type '%pdb on' and rerunning your code, you can use
2010 without having to type '%pdb on' and rerunning your code, you can use
2012 the %debug magic."""
2011 the %debug magic."""
2013
2012
2014 par = parameter_s.strip().lower()
2013 par = parameter_s.strip().lower()
2015
2014
2016 if par:
2015 if par:
2017 try:
2016 try:
2018 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
2017 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
2019 except KeyError:
2018 except KeyError:
2020 print ('Incorrect argument. Use on/1, off/0, '
2019 print ('Incorrect argument. Use on/1, off/0, '
2021 'or nothing for a toggle.')
2020 'or nothing for a toggle.')
2022 return
2021 return
2023 else:
2022 else:
2024 # toggle
2023 # toggle
2025 new_pdb = not self.shell.call_pdb
2024 new_pdb = not self.shell.call_pdb
2026
2025
2027 # set on the shell
2026 # set on the shell
2028 self.shell.call_pdb = new_pdb
2027 self.shell.call_pdb = new_pdb
2029 print 'Automatic pdb calling has been turned',on_off(new_pdb)
2028 print 'Automatic pdb calling has been turned',on_off(new_pdb)
2030
2029
2031 @line_magic
2030 @line_magic
2032 def debug(self, parameter_s=''):
2031 def debug(self, parameter_s=''):
2033 """Activate the interactive debugger in post-mortem mode.
2032 """Activate the interactive debugger in post-mortem mode.
2034
2033
2035 If an exception has just occurred, this lets you inspect its stack
2034 If an exception has just occurred, this lets you inspect its stack
2036 frames interactively. Note that this will always work only on the last
2035 frames interactively. Note that this will always work only on the last
2037 traceback that occurred, so you must call this quickly after an
2036 traceback that occurred, so you must call this quickly after an
2038 exception that you wish to inspect has fired, because if another one
2037 exception that you wish to inspect has fired, because if another one
2039 occurs, it clobbers the previous one.
2038 occurs, it clobbers the previous one.
2040
2039
2041 If you want IPython to automatically do this on every exception, see
2040 If you want IPython to automatically do this on every exception, see
2042 the %pdb magic for more details.
2041 the %pdb magic for more details.
2043 """
2042 """
2044 self.shell.debugger(force=True)
2043 self.shell.debugger(force=True)
2045
2044
2046 @line_magic
2045 @line_magic
2047 def tb(self, s):
2046 def tb(self, s):
2048 """Print the last traceback with the currently active exception mode.
2047 """Print the last traceback with the currently active exception mode.
2049
2048
2050 See %xmode for changing exception reporting modes."""
2049 See %xmode for changing exception reporting modes."""
2051 self.shell.showtraceback()
2050 self.shell.showtraceback()
2052
2051
2053 @skip_doctest
2052 @skip_doctest
2054 @line_magic
2053 @line_magic
2055 def run(self, parameter_s='', runner=None,
2054 def run(self, parameter_s='', runner=None,
2056 file_finder=get_py_filename):
2055 file_finder=get_py_filename):
2057 """Run the named file inside IPython as a program.
2056 """Run the named file inside IPython as a program.
2058
2057
2059 Usage:\\
2058 Usage:\\
2060 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
2059 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
2061
2060
2062 Parameters after the filename are passed as command-line arguments to
2061 Parameters after the filename are passed as command-line arguments to
2063 the program (put in sys.argv). Then, control returns to IPython's
2062 the program (put in sys.argv). Then, control returns to IPython's
2064 prompt.
2063 prompt.
2065
2064
2066 This is similar to running at a system prompt:\\
2065 This is similar to running at a system prompt:\\
2067 $ python file args\\
2066 $ python file args\\
2068 but with the advantage of giving you IPython's tracebacks, and of
2067 but with the advantage of giving you IPython's tracebacks, and of
2069 loading all variables into your interactive namespace for further use
2068 loading all variables into your interactive namespace for further use
2070 (unless -p is used, see below).
2069 (unless -p is used, see below).
2071
2070
2072 The file is executed in a namespace initially consisting only of
2071 The file is executed in a namespace initially consisting only of
2073 __name__=='__main__' and sys.argv constructed as indicated. It thus
2072 __name__=='__main__' and sys.argv constructed as indicated. It thus
2074 sees its environment as if it were being run as a stand-alone program
2073 sees its environment as if it were being run as a stand-alone program
2075 (except for sharing global objects such as previously imported
2074 (except for sharing global objects such as previously imported
2076 modules). But after execution, the IPython interactive namespace gets
2075 modules). But after execution, the IPython interactive namespace gets
2077 updated with all variables defined in the program (except for __name__
2076 updated with all variables defined in the program (except for __name__
2078 and sys.argv). This allows for very convenient loading of code for
2077 and sys.argv). This allows for very convenient loading of code for
2079 interactive work, while giving each program a 'clean sheet' to run in.
2078 interactive work, while giving each program a 'clean sheet' to run in.
2080
2079
2081 Options:
2080 Options:
2082
2081
2083 -n: __name__ is NOT set to '__main__', but to the running file's name
2082 -n: __name__ is NOT set to '__main__', but to the running file's name
2084 without extension (as python does under import). This allows running
2083 without extension (as python does under import). This allows running
2085 scripts and reloading the definitions in them without calling code
2084 scripts and reloading the definitions in them without calling code
2086 protected by an ' if __name__ == "__main__" ' clause.
2085 protected by an ' if __name__ == "__main__" ' clause.
2087
2086
2088 -i: run the file in IPython's namespace instead of an empty one. This
2087 -i: run the file in IPython's namespace instead of an empty one. This
2089 is useful if you are experimenting with code written in a text editor
2088 is useful if you are experimenting with code written in a text editor
2090 which depends on variables defined interactively.
2089 which depends on variables defined interactively.
2091
2090
2092 -e: ignore sys.exit() calls or SystemExit exceptions in the script
2091 -e: ignore sys.exit() calls or SystemExit exceptions in the script
2093 being run. This is particularly useful if IPython is being used to
2092 being run. This is particularly useful if IPython is being used to
2094 run unittests, which always exit with a sys.exit() call. In such
2093 run unittests, which always exit with a sys.exit() call. In such
2095 cases you are interested in the output of the test results, not in
2094 cases you are interested in the output of the test results, not in
2096 seeing a traceback of the unittest module.
2095 seeing a traceback of the unittest module.
2097
2096
2098 -t: print timing information at the end of the run. IPython will give
2097 -t: print timing information at the end of the run. IPython will give
2099 you an estimated CPU time consumption for your script, which under
2098 you an estimated CPU time consumption for your script, which under
2100 Unix uses the resource module to avoid the wraparound problems of
2099 Unix uses the resource module to avoid the wraparound problems of
2101 time.clock(). Under Unix, an estimate of time spent on system tasks
2100 time.clock(). Under Unix, an estimate of time spent on system tasks
2102 is also given (for Windows platforms this is reported as 0.0).
2101 is also given (for Windows platforms this is reported as 0.0).
2103
2102
2104 If -t is given, an additional -N<N> option can be given, where <N>
2103 If -t is given, an additional -N<N> option can be given, where <N>
2105 must be an integer indicating how many times you want the script to
2104 must be an integer indicating how many times you want the script to
2106 run. The final timing report will include total and per run results.
2105 run. The final timing report will include total and per run results.
2107
2106
2108 For example (testing the script uniq_stable.py)::
2107 For example (testing the script uniq_stable.py)::
2109
2108
2110 In [1]: run -t uniq_stable
2109 In [1]: run -t uniq_stable
2111
2110
2112 IPython CPU timings (estimated):\\
2111 IPython CPU timings (estimated):\\
2113 User : 0.19597 s.\\
2112 User : 0.19597 s.\\
2114 System: 0.0 s.\\
2113 System: 0.0 s.\\
2115
2114
2116 In [2]: run -t -N5 uniq_stable
2115 In [2]: run -t -N5 uniq_stable
2117
2116
2118 IPython CPU timings (estimated):\\
2117 IPython CPU timings (estimated):\\
2119 Total runs performed: 5\\
2118 Total runs performed: 5\\
2120 Times : Total Per run\\
2119 Times : Total Per run\\
2121 User : 0.910862 s, 0.1821724 s.\\
2120 User : 0.910862 s, 0.1821724 s.\\
2122 System: 0.0 s, 0.0 s.
2121 System: 0.0 s, 0.0 s.
2123
2122
2124 -d: run your program under the control of pdb, the Python debugger.
2123 -d: run your program under the control of pdb, the Python debugger.
2125 This allows you to execute your program step by step, watch variables,
2124 This allows you to execute your program step by step, watch variables,
2126 etc. Internally, what IPython does is similar to calling:
2125 etc. Internally, what IPython does is similar to calling:
2127
2126
2128 pdb.run('execfile("YOURFILENAME")')
2127 pdb.run('execfile("YOURFILENAME")')
2129
2128
2130 with a breakpoint set on line 1 of your file. You can change the line
2129 with a breakpoint set on line 1 of your file. You can change the line
2131 number for this automatic breakpoint to be <N> by using the -bN option
2130 number for this automatic breakpoint to be <N> by using the -bN option
2132 (where N must be an integer). For example::
2131 (where N must be an integer). For example::
2133
2132
2134 %run -d -b40 myscript
2133 %run -d -b40 myscript
2135
2134
2136 will set the first breakpoint at line 40 in myscript.py. Note that
2135 will set the first breakpoint at line 40 in myscript.py. Note that
2137 the first breakpoint must be set on a line which actually does
2136 the first breakpoint must be set on a line which actually does
2138 something (not a comment or docstring) for it to stop execution.
2137 something (not a comment or docstring) for it to stop execution.
2139
2138
2140 When the pdb debugger starts, you will see a (Pdb) prompt. You must
2139 When the pdb debugger starts, you will see a (Pdb) prompt. You must
2141 first enter 'c' (without quotes) to start execution up to the first
2140 first enter 'c' (without quotes) to start execution up to the first
2142 breakpoint.
2141 breakpoint.
2143
2142
2144 Entering 'help' gives information about the use of the debugger. You
2143 Entering 'help' gives information about the use of the debugger. You
2145 can easily see pdb's full documentation with "import pdb;pdb.help()"
2144 can easily see pdb's full documentation with "import pdb;pdb.help()"
2146 at a prompt.
2145 at a prompt.
2147
2146
2148 -p: run program under the control of the Python profiler module (which
2147 -p: run program under the control of the Python profiler module (which
2149 prints a detailed report of execution times, function calls, etc).
2148 prints a detailed report of execution times, function calls, etc).
2150
2149
2151 You can pass other options after -p which affect the behavior of the
2150 You can pass other options after -p which affect the behavior of the
2152 profiler itself. See the docs for %prun for details.
2151 profiler itself. See the docs for %prun for details.
2153
2152
2154 In this mode, the program's variables do NOT propagate back to the
2153 In this mode, the program's variables do NOT propagate back to the
2155 IPython interactive namespace (because they remain in the namespace
2154 IPython interactive namespace (because they remain in the namespace
2156 where the profiler executes them).
2155 where the profiler executes them).
2157
2156
2158 Internally this triggers a call to %prun, see its documentation for
2157 Internally this triggers a call to %prun, see its documentation for
2159 details on the options available specifically for profiling.
2158 details on the options available specifically for profiling.
2160
2159
2161 There is one special usage for which the text above doesn't apply:
2160 There is one special usage for which the text above doesn't apply:
2162 if the filename ends with .ipy, the file is run as ipython script,
2161 if the filename ends with .ipy, the file is run as ipython script,
2163 just as if the commands were written on IPython prompt.
2162 just as if the commands were written on IPython prompt.
2164
2163
2165 -m: specify module name to load instead of script path. Similar to
2164 -m: specify module name to load instead of script path. Similar to
2166 the -m option for the python interpreter. Use this option last if you
2165 the -m option for the python interpreter. Use this option last if you
2167 want to combine with other %run options. Unlike the python interpreter
2166 want to combine with other %run options. Unlike the python interpreter
2168 only source modules are allowed no .pyc or .pyo files.
2167 only source modules are allowed no .pyc or .pyo files.
2169 For example::
2168 For example::
2170
2169
2171 %run -m example
2170 %run -m example
2172
2171
2173 will run the example module.
2172 will run the example module.
2174
2173
2175 """
2174 """
2176
2175
2177 # get arguments and set sys.argv for program to be run.
2176 # get arguments and set sys.argv for program to be run.
2178 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
2177 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
2179 mode='list', list_all=1)
2178 mode='list', list_all=1)
2180 if "m" in opts:
2179 if "m" in opts:
2181 modulename = opts["m"][0]
2180 modulename = opts["m"][0]
2182 modpath = find_mod(modulename)
2181 modpath = find_mod(modulename)
2183 if modpath is None:
2182 if modpath is None:
2184 warn('%r is not a valid modulename on sys.path'%modulename)
2183 warn('%r is not a valid modulename on sys.path'%modulename)
2185 return
2184 return
2186 arg_lst = [modpath] + arg_lst
2185 arg_lst = [modpath] + arg_lst
2187 try:
2186 try:
2188 filename = file_finder(arg_lst[0])
2187 filename = file_finder(arg_lst[0])
2189 except IndexError:
2188 except IndexError:
2190 warn('you must provide at least a filename.')
2189 warn('you must provide at least a filename.')
2191 print '\n%run:\n', oinspect.getdoc(self.magic_run)
2190 print '\n%run:\n', oinspect.getdoc(self.magic_run)
2192 return
2191 return
2193 except IOError as e:
2192 except IOError as e:
2194 try:
2193 try:
2195 msg = str(e)
2194 msg = str(e)
2196 except UnicodeError:
2195 except UnicodeError:
2197 msg = e.message
2196 msg = e.message
2198 error(msg)
2197 error(msg)
2199 return
2198 return
2200
2199
2201 if filename.lower().endswith('.ipy'):
2200 if filename.lower().endswith('.ipy'):
2202 self.shell.safe_execfile_ipy(filename)
2201 self.shell.safe_execfile_ipy(filename)
2203 return
2202 return
2204
2203
2205 # Control the response to exit() calls made by the script being run
2204 # Control the response to exit() calls made by the script being run
2206 exit_ignore = 'e' in opts
2205 exit_ignore = 'e' in opts
2207
2206
2208 # Make sure that the running script gets a proper sys.argv as if it
2207 # Make sure that the running script gets a proper sys.argv as if it
2209 # were run from a system shell.
2208 # were run from a system shell.
2210 save_argv = sys.argv # save it for later restoring
2209 save_argv = sys.argv # save it for later restoring
2211
2210
2212 # simulate shell expansion on arguments, at least tilde expansion
2211 # simulate shell expansion on arguments, at least tilde expansion
2213 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
2212 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
2214
2213
2215 sys.argv = [filename] + args # put in the proper filename
2214 sys.argv = [filename] + args # put in the proper filename
2216 # protect sys.argv from potential unicode strings on Python 2:
2215 # protect sys.argv from potential unicode strings on Python 2:
2217 if not py3compat.PY3:
2216 if not py3compat.PY3:
2218 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
2217 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
2219
2218
2220 if 'i' in opts:
2219 if 'i' in opts:
2221 # Run in user's interactive namespace
2220 # Run in user's interactive namespace
2222 prog_ns = self.shell.user_ns
2221 prog_ns = self.shell.user_ns
2223 __name__save = self.shell.user_ns['__name__']
2222 __name__save = self.shell.user_ns['__name__']
2224 prog_ns['__name__'] = '__main__'
2223 prog_ns['__name__'] = '__main__'
2225 main_mod = self.shell.new_main_mod(prog_ns)
2224 main_mod = self.shell.new_main_mod(prog_ns)
2226 else:
2225 else:
2227 # Run in a fresh, empty namespace
2226 # Run in a fresh, empty namespace
2228 if 'n' in opts:
2227 if 'n' in opts:
2229 name = os.path.splitext(os.path.basename(filename))[0]
2228 name = os.path.splitext(os.path.basename(filename))[0]
2230 else:
2229 else:
2231 name = '__main__'
2230 name = '__main__'
2232
2231
2233 main_mod = self.shell.new_main_mod()
2232 main_mod = self.shell.new_main_mod()
2234 prog_ns = main_mod.__dict__
2233 prog_ns = main_mod.__dict__
2235 prog_ns['__name__'] = name
2234 prog_ns['__name__'] = name
2236
2235
2237 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
2236 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
2238 # set the __file__ global in the script's namespace
2237 # set the __file__ global in the script's namespace
2239 prog_ns['__file__'] = filename
2238 prog_ns['__file__'] = filename
2240
2239
2241 # pickle fix. See interactiveshell for an explanation. But we need to make sure
2240 # pickle fix. See interactiveshell for an explanation. But we need to make sure
2242 # that, if we overwrite __main__, we replace it at the end
2241 # that, if we overwrite __main__, we replace it at the end
2243 main_mod_name = prog_ns['__name__']
2242 main_mod_name = prog_ns['__name__']
2244
2243
2245 if main_mod_name == '__main__':
2244 if main_mod_name == '__main__':
2246 restore_main = sys.modules['__main__']
2245 restore_main = sys.modules['__main__']
2247 else:
2246 else:
2248 restore_main = False
2247 restore_main = False
2249
2248
2250 # This needs to be undone at the end to prevent holding references to
2249 # This needs to be undone at the end to prevent holding references to
2251 # every single object ever created.
2250 # every single object ever created.
2252 sys.modules[main_mod_name] = main_mod
2251 sys.modules[main_mod_name] = main_mod
2253
2252
2254 try:
2253 try:
2255 stats = None
2254 stats = None
2256 with self.shell.readline_no_record:
2255 with self.shell.readline_no_record:
2257 if 'p' in opts:
2256 if 'p' in opts:
2258 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
2257 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
2259 else:
2258 else:
2260 if 'd' in opts:
2259 if 'd' in opts:
2261 deb = debugger.Pdb(self.shell.colors)
2260 deb = debugger.Pdb(self.shell.colors)
2262 # reset Breakpoint state, which is moronically kept
2261 # reset Breakpoint state, which is moronically kept
2263 # in a class
2262 # in a class
2264 bdb.Breakpoint.next = 1
2263 bdb.Breakpoint.next = 1
2265 bdb.Breakpoint.bplist = {}
2264 bdb.Breakpoint.bplist = {}
2266 bdb.Breakpoint.bpbynumber = [None]
2265 bdb.Breakpoint.bpbynumber = [None]
2267 # Set an initial breakpoint to stop execution
2266 # Set an initial breakpoint to stop execution
2268 maxtries = 10
2267 maxtries = 10
2269 bp = int(opts.get('b', [1])[0])
2268 bp = int(opts.get('b', [1])[0])
2270 checkline = deb.checkline(filename, bp)
2269 checkline = deb.checkline(filename, bp)
2271 if not checkline:
2270 if not checkline:
2272 for bp in range(bp + 1, bp + maxtries + 1):
2271 for bp in range(bp + 1, bp + maxtries + 1):
2273 if deb.checkline(filename, bp):
2272 if deb.checkline(filename, bp):
2274 break
2273 break
2275 else:
2274 else:
2276 msg = ("\nI failed to find a valid line to set "
2275 msg = ("\nI failed to find a valid line to set "
2277 "a breakpoint\n"
2276 "a breakpoint\n"
2278 "after trying up to line: %s.\n"
2277 "after trying up to line: %s.\n"
2279 "Please set a valid breakpoint manually "
2278 "Please set a valid breakpoint manually "
2280 "with the -b option." % bp)
2279 "with the -b option." % bp)
2281 error(msg)
2280 error(msg)
2282 return
2281 return
2283 # if we find a good linenumber, set the breakpoint
2282 # if we find a good linenumber, set the breakpoint
2284 deb.do_break('%s:%s' % (filename, bp))
2283 deb.do_break('%s:%s' % (filename, bp))
2285 # Start file run
2284 # Start file run
2286 print "NOTE: Enter 'c' at the",
2285 print "NOTE: Enter 'c' at the",
2287 print "%s prompt to start your script." % deb.prompt
2286 print "%s prompt to start your script." % deb.prompt
2288 ns = {'execfile': py3compat.execfile, 'prog_ns': prog_ns}
2287 ns = {'execfile': py3compat.execfile, 'prog_ns': prog_ns}
2289 try:
2288 try:
2290 deb.run('execfile("%s", prog_ns)' % filename, ns)
2289 deb.run('execfile("%s", prog_ns)' % filename, ns)
2291
2290
2292 except:
2291 except:
2293 etype, value, tb = sys.exc_info()
2292 etype, value, tb = sys.exc_info()
2294 # Skip three frames in the traceback: the %run one,
2293 # Skip three frames in the traceback: the %run one,
2295 # one inside bdb.py, and the command-line typed by the
2294 # one inside bdb.py, and the command-line typed by the
2296 # user (run by exec in pdb itself).
2295 # user (run by exec in pdb itself).
2297 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
2296 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
2298 else:
2297 else:
2299 if runner is None:
2298 if runner is None:
2300 runner = self.default_runner
2299 runner = self.default_runner
2301 if runner is None:
2300 if runner is None:
2302 runner = self.shell.safe_execfile
2301 runner = self.shell.safe_execfile
2303 if 't' in opts:
2302 if 't' in opts:
2304 # timed execution
2303 # timed execution
2305 try:
2304 try:
2306 nruns = int(opts['N'][0])
2305 nruns = int(opts['N'][0])
2307 if nruns < 1:
2306 if nruns < 1:
2308 error('Number of runs must be >=1')
2307 error('Number of runs must be >=1')
2309 return
2308 return
2310 except (KeyError):
2309 except (KeyError):
2311 nruns = 1
2310 nruns = 1
2312 twall0 = time.time()
2311 twall0 = time.time()
2313 if nruns == 1:
2312 if nruns == 1:
2314 t0 = clock2()
2313 t0 = clock2()
2315 runner(filename, prog_ns, prog_ns,
2314 runner(filename, prog_ns, prog_ns,
2316 exit_ignore=exit_ignore)
2315 exit_ignore=exit_ignore)
2317 t1 = clock2()
2316 t1 = clock2()
2318 t_usr = t1[0] - t0[0]
2317 t_usr = t1[0] - t0[0]
2319 t_sys = t1[1] - t0[1]
2318 t_sys = t1[1] - t0[1]
2320 print "\nIPython CPU timings (estimated):"
2319 print "\nIPython CPU timings (estimated):"
2321 print " User : %10.2f s." % t_usr
2320 print " User : %10.2f s." % t_usr
2322 print " System : %10.2f s." % t_sys
2321 print " System : %10.2f s." % t_sys
2323 else:
2322 else:
2324 runs = range(nruns)
2323 runs = range(nruns)
2325 t0 = clock2()
2324 t0 = clock2()
2326 for nr in runs:
2325 for nr in runs:
2327 runner(filename, prog_ns, prog_ns,
2326 runner(filename, prog_ns, prog_ns,
2328 exit_ignore=exit_ignore)
2327 exit_ignore=exit_ignore)
2329 t1 = clock2()
2328 t1 = clock2()
2330 t_usr = t1[0] - t0[0]
2329 t_usr = t1[0] - t0[0]
2331 t_sys = t1[1] - t0[1]
2330 t_sys = t1[1] - t0[1]
2332 print "\nIPython CPU timings (estimated):"
2331 print "\nIPython CPU timings (estimated):"
2333 print "Total runs performed:", nruns
2332 print "Total runs performed:", nruns
2334 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
2333 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
2335 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
2334 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
2336 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
2335 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
2337 twall1 = time.time()
2336 twall1 = time.time()
2338 print "Wall time: %10.2f s." % (twall1 - twall0)
2337 print "Wall time: %10.2f s." % (twall1 - twall0)
2339
2338
2340 else:
2339 else:
2341 # regular execution
2340 # regular execution
2342 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
2341 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
2343
2342
2344 if 'i' in opts:
2343 if 'i' in opts:
2345 self.shell.user_ns['__name__'] = __name__save
2344 self.shell.user_ns['__name__'] = __name__save
2346 else:
2345 else:
2347 # The shell MUST hold a reference to prog_ns so after %run
2346 # The shell MUST hold a reference to prog_ns so after %run
2348 # exits, the python deletion mechanism doesn't zero it out
2347 # exits, the python deletion mechanism doesn't zero it out
2349 # (leaving dangling references).
2348 # (leaving dangling references).
2350 self.shell.cache_main_mod(prog_ns, filename)
2349 self.shell.cache_main_mod(prog_ns, filename)
2351 # update IPython interactive namespace
2350 # update IPython interactive namespace
2352
2351
2353 # Some forms of read errors on the file may mean the
2352 # Some forms of read errors on the file may mean the
2354 # __name__ key was never set; using pop we don't have to
2353 # __name__ key was never set; using pop we don't have to
2355 # worry about a possible KeyError.
2354 # worry about a possible KeyError.
2356 prog_ns.pop('__name__', None)
2355 prog_ns.pop('__name__', None)
2357
2356
2358 self.shell.user_ns.update(prog_ns)
2357 self.shell.user_ns.update(prog_ns)
2359 finally:
2358 finally:
2360 # It's a bit of a mystery why, but __builtins__ can change from
2359 # It's a bit of a mystery why, but __builtins__ can change from
2361 # being a module to becoming a dict missing some key data after
2360 # being a module to becoming a dict missing some key data after
2362 # %run. As best I can see, this is NOT something IPython is doing
2361 # %run. As best I can see, this is NOT something IPython is doing
2363 # at all, and similar problems have been reported before:
2362 # at all, and similar problems have been reported before:
2364 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
2363 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
2365 # Since this seems to be done by the interpreter itself, the best
2364 # Since this seems to be done by the interpreter itself, the best
2366 # we can do is to at least restore __builtins__ for the user on
2365 # we can do is to at least restore __builtins__ for the user on
2367 # exit.
2366 # exit.
2368 self.shell.user_ns['__builtins__'] = builtin_mod
2367 self.shell.user_ns['__builtins__'] = builtin_mod
2369
2368
2370 # Ensure key global structures are restored
2369 # Ensure key global structures are restored
2371 sys.argv = save_argv
2370 sys.argv = save_argv
2372 if restore_main:
2371 if restore_main:
2373 sys.modules['__main__'] = restore_main
2372 sys.modules['__main__'] = restore_main
2374 else:
2373 else:
2375 # Remove from sys.modules the reference to main_mod we'd
2374 # Remove from sys.modules the reference to main_mod we'd
2376 # added. Otherwise it will trap references to objects
2375 # added. Otherwise it will trap references to objects
2377 # contained therein.
2376 # contained therein.
2378 del sys.modules[main_mod_name]
2377 del sys.modules[main_mod_name]
2379
2378
2380 return stats
2379 return stats
2381
2380
2382 @skip_doctest
2381 @skip_doctest
2383 @line_magic
2382 @line_magic
2384 def timeit(self, parameter_s=''):
2383 def timeit(self, parameter_s=''):
2385 """Time execution of a Python statement or expression
2384 """Time execution of a Python statement or expression
2386
2385
2387 Usage:\\
2386 Usage:\\
2388 %timeit [-n<N> -r<R> [-t|-c]] statement
2387 %timeit [-n<N> -r<R> [-t|-c]] statement
2389
2388
2390 Time execution of a Python statement or expression using the timeit
2389 Time execution of a Python statement or expression using the timeit
2391 module.
2390 module.
2392
2391
2393 Options:
2392 Options:
2394 -n<N>: execute the given statement <N> times in a loop. If this value
2393 -n<N>: execute the given statement <N> times in a loop. If this value
2395 is not given, a fitting value is chosen.
2394 is not given, a fitting value is chosen.
2396
2395
2397 -r<R>: repeat the loop iteration <R> times and take the best result.
2396 -r<R>: repeat the loop iteration <R> times and take the best result.
2398 Default: 3
2397 Default: 3
2399
2398
2400 -t: use time.time to measure the time, which is the default on Unix.
2399 -t: use time.time to measure the time, which is the default on Unix.
2401 This function measures wall time.
2400 This function measures wall time.
2402
2401
2403 -c: use time.clock to measure the time, which is the default on
2402 -c: use time.clock to measure the time, which is the default on
2404 Windows and measures wall time. On Unix, resource.getrusage is used
2403 Windows and measures wall time. On Unix, resource.getrusage is used
2405 instead and returns the CPU user time.
2404 instead and returns the CPU user time.
2406
2405
2407 -p<P>: use a precision of <P> digits to display the timing result.
2406 -p<P>: use a precision of <P> digits to display the timing result.
2408 Default: 3
2407 Default: 3
2409
2408
2410
2409
2411 Examples
2410 Examples
2412 --------
2411 --------
2413 ::
2412 ::
2414
2413
2415 In [1]: %timeit pass
2414 In [1]: %timeit pass
2416 10000000 loops, best of 3: 53.3 ns per loop
2415 10000000 loops, best of 3: 53.3 ns per loop
2417
2416
2418 In [2]: u = None
2417 In [2]: u = None
2419
2418
2420 In [3]: %timeit u is None
2419 In [3]: %timeit u is None
2421 10000000 loops, best of 3: 184 ns per loop
2420 10000000 loops, best of 3: 184 ns per loop
2422
2421
2423 In [4]: %timeit -r 4 u == None
2422 In [4]: %timeit -r 4 u == None
2424 1000000 loops, best of 4: 242 ns per loop
2423 1000000 loops, best of 4: 242 ns per loop
2425
2424
2426 In [5]: import time
2425 In [5]: import time
2427
2426
2428 In [6]: %timeit -n1 time.sleep(2)
2427 In [6]: %timeit -n1 time.sleep(2)
2429 1 loops, best of 3: 2 s per loop
2428 1 loops, best of 3: 2 s per loop
2430
2429
2431
2430
2432 The times reported by %timeit will be slightly higher than those
2431 The times reported by %timeit will be slightly higher than those
2433 reported by the timeit.py script when variables are accessed. This is
2432 reported by the timeit.py script when variables are accessed. This is
2434 due to the fact that %timeit executes the statement in the namespace
2433 due to the fact that %timeit executes the statement in the namespace
2435 of the shell, compared with timeit.py, which uses a single setup
2434 of the shell, compared with timeit.py, which uses a single setup
2436 statement to import function or create variables. Generally, the bias
2435 statement to import function or create variables. Generally, the bias
2437 does not matter as long as results from timeit.py are not mixed with
2436 does not matter as long as results from timeit.py are not mixed with
2438 those from %timeit."""
2437 those from %timeit."""
2439
2438
2440 import timeit
2439 import timeit
2441 import math
2440 import math
2442
2441
2443 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
2442 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
2444 # certain terminals. Until we figure out a robust way of
2443 # certain terminals. Until we figure out a robust way of
2445 # auto-detecting if the terminal can deal with it, use plain 'us' for
2444 # auto-detecting if the terminal can deal with it, use plain 'us' for
2446 # microseconds. I am really NOT happy about disabling the proper
2445 # microseconds. I am really NOT happy about disabling the proper
2447 # 'micro' prefix, but crashing is worse... If anyone knows what the
2446 # 'micro' prefix, but crashing is worse... If anyone knows what the
2448 # right solution for this is, I'm all ears...
2447 # right solution for this is, I'm all ears...
2449 #
2448 #
2450 # Note: using
2449 # Note: using
2451 #
2450 #
2452 # s = u'\xb5'
2451 # s = u'\xb5'
2453 # s.encode(sys.getdefaultencoding())
2452 # s.encode(sys.getdefaultencoding())
2454 #
2453 #
2455 # is not sufficient, as I've seen terminals where that fails but
2454 # is not sufficient, as I've seen terminals where that fails but
2456 # print s
2455 # print s
2457 #
2456 #
2458 # succeeds
2457 # succeeds
2459 #
2458 #
2460 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
2459 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
2461
2460
2462 #units = [u"s", u"ms",u'\xb5',"ns"]
2461 #units = [u"s", u"ms",u'\xb5',"ns"]
2463 units = [u"s", u"ms",u'us',"ns"]
2462 units = [u"s", u"ms",u'us',"ns"]
2464
2463
2465 scaling = [1, 1e3, 1e6, 1e9]
2464 scaling = [1, 1e3, 1e6, 1e9]
2466
2465
2467 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
2466 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
2468 posix=False, strict=False)
2467 posix=False, strict=False)
2469 if stmt == "":
2468 if stmt == "":
2470 return
2469 return
2471 timefunc = timeit.default_timer
2470 timefunc = timeit.default_timer
2472 number = int(getattr(opts, "n", 0))
2471 number = int(getattr(opts, "n", 0))
2473 repeat = int(getattr(opts, "r", timeit.default_repeat))
2472 repeat = int(getattr(opts, "r", timeit.default_repeat))
2474 precision = int(getattr(opts, "p", 3))
2473 precision = int(getattr(opts, "p", 3))
2475 if hasattr(opts, "t"):
2474 if hasattr(opts, "t"):
2476 timefunc = time.time
2475 timefunc = time.time
2477 if hasattr(opts, "c"):
2476 if hasattr(opts, "c"):
2478 timefunc = clock
2477 timefunc = clock
2479
2478
2480 timer = timeit.Timer(timer=timefunc)
2479 timer = timeit.Timer(timer=timefunc)
2481 # this code has tight coupling to the inner workings of timeit.Timer,
2480 # this code has tight coupling to the inner workings of timeit.Timer,
2482 # but is there a better way to achieve that the code stmt has access
2481 # but is there a better way to achieve that the code stmt has access
2483 # to the shell namespace?
2482 # to the shell namespace?
2484
2483
2485 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
2484 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
2486 'setup': "pass"}
2485 'setup': "pass"}
2487 # Track compilation time so it can be reported if too long
2486 # Track compilation time so it can be reported if too long
2488 # Minimum time above which compilation time will be reported
2487 # Minimum time above which compilation time will be reported
2489 tc_min = 0.1
2488 tc_min = 0.1
2490
2489
2491 t0 = clock()
2490 t0 = clock()
2492 code = compile(src, "<magic-timeit>", "exec")
2491 code = compile(src, "<magic-timeit>", "exec")
2493 tc = clock()-t0
2492 tc = clock()-t0
2494
2493
2495 ns = {}
2494 ns = {}
2496 exec code in self.shell.user_ns, ns
2495 exec code in self.shell.user_ns, ns
2497 timer.inner = ns["inner"]
2496 timer.inner = ns["inner"]
2498
2497
2499 if number == 0:
2498 if number == 0:
2500 # determine number so that 0.2 <= total time < 2.0
2499 # determine number so that 0.2 <= total time < 2.0
2501 number = 1
2500 number = 1
2502 for i in range(1, 10):
2501 for i in range(1, 10):
2503 if timer.timeit(number) >= 0.2:
2502 if timer.timeit(number) >= 0.2:
2504 break
2503 break
2505 number *= 10
2504 number *= 10
2506
2505
2507 best = min(timer.repeat(repeat, number)) / number
2506 best = min(timer.repeat(repeat, number)) / number
2508
2507
2509 if best > 0.0 and best < 1000.0:
2508 if best > 0.0 and best < 1000.0:
2510 order = min(-int(math.floor(math.log10(best)) // 3), 3)
2509 order = min(-int(math.floor(math.log10(best)) // 3), 3)
2511 elif best >= 1000.0:
2510 elif best >= 1000.0:
2512 order = 0
2511 order = 0
2513 else:
2512 else:
2514 order = 3
2513 order = 3
2515 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
2514 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
2516 precision,
2515 precision,
2517 best * scaling[order],
2516 best * scaling[order],
2518 units[order])
2517 units[order])
2519 if tc > tc_min:
2518 if tc > tc_min:
2520 print "Compiler time: %.2f s" % tc
2519 print "Compiler time: %.2f s" % tc
2521
2520
2522 @cell_magic('timeit')
2521 @cell_magic('timeit')
2523 def cell_timeit(self, line, cell):
2522 def cell_timeit(self, line, cell):
2524 """Time execution of a Python cell."""
2523 """Time execution of a Python cell."""
2525 raise NotImplementedError
2524 raise NotImplementedError
2526
2525
2527 @skip_doctest
2526 @skip_doctest
2528 @needs_local_scope
2527 @needs_local_scope
2529 @line_magic
2528 @line_magic
2530 def time(self,parameter_s, user_locals):
2529 def time(self,parameter_s, user_locals):
2531 """Time execution of a Python statement or expression.
2530 """Time execution of a Python statement or expression.
2532
2531
2533 The CPU and wall clock times are printed, and the value of the
2532 The CPU and wall clock times are printed, and the value of the
2534 expression (if any) is returned. Note that under Win32, system time
2533 expression (if any) is returned. Note that under Win32, system time
2535 is always reported as 0, since it can not be measured.
2534 is always reported as 0, since it can not be measured.
2536
2535
2537 This function provides very basic timing functionality. In Python
2536 This function provides very basic timing functionality. In Python
2538 2.3, the timeit module offers more control and sophistication, so this
2537 2.3, the timeit module offers more control and sophistication, so this
2539 could be rewritten to use it (patches welcome).
2538 could be rewritten to use it (patches welcome).
2540
2539
2541 Examples
2540 Examples
2542 --------
2541 --------
2543 ::
2542 ::
2544
2543
2545 In [1]: time 2**128
2544 In [1]: time 2**128
2546 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2545 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2547 Wall time: 0.00
2546 Wall time: 0.00
2548 Out[1]: 340282366920938463463374607431768211456L
2547 Out[1]: 340282366920938463463374607431768211456L
2549
2548
2550 In [2]: n = 1000000
2549 In [2]: n = 1000000
2551
2550
2552 In [3]: time sum(range(n))
2551 In [3]: time sum(range(n))
2553 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
2552 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
2554 Wall time: 1.37
2553 Wall time: 1.37
2555 Out[3]: 499999500000L
2554 Out[3]: 499999500000L
2556
2555
2557 In [4]: time print 'hello world'
2556 In [4]: time print 'hello world'
2558 hello world
2557 hello world
2559 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2558 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2560 Wall time: 0.00
2559 Wall time: 0.00
2561
2560
2562 Note that the time needed by Python to compile the given expression
2561 Note that the time needed by Python to compile the given expression
2563 will be reported if it is more than 0.1s. In this example, the
2562 will be reported if it is more than 0.1s. In this example, the
2564 actual exponentiation is done by Python at compilation time, so while
2563 actual exponentiation is done by Python at compilation time, so while
2565 the expression can take a noticeable amount of time to compute, that
2564 the expression can take a noticeable amount of time to compute, that
2566 time is purely due to the compilation:
2565 time is purely due to the compilation:
2567
2566
2568 In [5]: time 3**9999;
2567 In [5]: time 3**9999;
2569 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2568 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2570 Wall time: 0.00 s
2569 Wall time: 0.00 s
2571
2570
2572 In [6]: time 3**999999;
2571 In [6]: time 3**999999;
2573 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2572 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
2574 Wall time: 0.00 s
2573 Wall time: 0.00 s
2575 Compiler : 0.78 s
2574 Compiler : 0.78 s
2576 """
2575 """
2577
2576
2578 # fail immediately if the given expression can't be compiled
2577 # fail immediately if the given expression can't be compiled
2579
2578
2580 expr = self.shell.prefilter(parameter_s,False)
2579 expr = self.shell.prefilter(parameter_s,False)
2581
2580
2582 # Minimum time above which compilation time will be reported
2581 # Minimum time above which compilation time will be reported
2583 tc_min = 0.1
2582 tc_min = 0.1
2584
2583
2585 try:
2584 try:
2586 mode = 'eval'
2585 mode = 'eval'
2587 t0 = clock()
2586 t0 = clock()
2588 code = compile(expr,'<timed eval>',mode)
2587 code = compile(expr,'<timed eval>',mode)
2589 tc = clock()-t0
2588 tc = clock()-t0
2590 except SyntaxError:
2589 except SyntaxError:
2591 mode = 'exec'
2590 mode = 'exec'
2592 t0 = clock()
2591 t0 = clock()
2593 code = compile(expr,'<timed exec>',mode)
2592 code = compile(expr,'<timed exec>',mode)
2594 tc = clock()-t0
2593 tc = clock()-t0
2595 # skew measurement as little as possible
2594 # skew measurement as little as possible
2596 glob = self.shell.user_ns
2595 glob = self.shell.user_ns
2597 wtime = time.time
2596 wtime = time.time
2598 # time execution
2597 # time execution
2599 wall_st = wtime()
2598 wall_st = wtime()
2600 if mode=='eval':
2599 if mode=='eval':
2601 st = clock2()
2600 st = clock2()
2602 out = eval(code, glob, user_locals)
2601 out = eval(code, glob, user_locals)
2603 end = clock2()
2602 end = clock2()
2604 else:
2603 else:
2605 st = clock2()
2604 st = clock2()
2606 exec code in glob, user_locals
2605 exec code in glob, user_locals
2607 end = clock2()
2606 end = clock2()
2608 out = None
2607 out = None
2609 wall_end = wtime()
2608 wall_end = wtime()
2610 # Compute actual times and report
2609 # Compute actual times and report
2611 wall_time = wall_end-wall_st
2610 wall_time = wall_end-wall_st
2612 cpu_user = end[0]-st[0]
2611 cpu_user = end[0]-st[0]
2613 cpu_sys = end[1]-st[1]
2612 cpu_sys = end[1]-st[1]
2614 cpu_tot = cpu_user+cpu_sys
2613 cpu_tot = cpu_user+cpu_sys
2615 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2614 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2616 (cpu_user,cpu_sys,cpu_tot)
2615 (cpu_user,cpu_sys,cpu_tot)
2617 print "Wall time: %.2f s" % wall_time
2616 print "Wall time: %.2f s" % wall_time
2618 if tc > tc_min:
2617 if tc > tc_min:
2619 print "Compiler : %.2f s" % tc
2618 print "Compiler : %.2f s" % tc
2620 return out
2619 return out
2621
2620
2622 @skip_doctest
2621 @skip_doctest
2623 @line_magic
2622 @line_magic
2624 def macro(self, parameter_s=''):
2623 def macro(self, parameter_s=''):
2625 """Define a macro for future re-execution. It accepts ranges of history,
2624 """Define a macro for future re-execution. It accepts ranges of history,
2626 filenames or string objects.
2625 filenames or string objects.
2627
2626
2628 Usage:\\
2627 Usage:\\
2629 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2628 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2630
2629
2631 Options:
2630 Options:
2632
2631
2633 -r: use 'raw' input. By default, the 'processed' history is used,
2632 -r: use 'raw' input. By default, the 'processed' history is used,
2634 so that magics are loaded in their transformed version to valid
2633 so that magics are loaded in their transformed version to valid
2635 Python. If this option is given, the raw input as typed as the
2634 Python. If this option is given, the raw input as typed as the
2636 command line is used instead.
2635 command line is used instead.
2637
2636
2638 This will define a global variable called `name` which is a string
2637 This will define a global variable called `name` which is a string
2639 made of joining the slices and lines you specify (n1,n2,... numbers
2638 made of joining the slices and lines you specify (n1,n2,... numbers
2640 above) from your input history into a single string. This variable
2639 above) from your input history into a single string. This variable
2641 acts like an automatic function which re-executes those lines as if
2640 acts like an automatic function which re-executes those lines as if
2642 you had typed them. You just type 'name' at the prompt and the code
2641 you had typed them. You just type 'name' at the prompt and the code
2643 executes.
2642 executes.
2644
2643
2645 The syntax for indicating input ranges is described in %history.
2644 The syntax for indicating input ranges is described in %history.
2646
2645
2647 Note: as a 'hidden' feature, you can also use traditional python slice
2646 Note: as a 'hidden' feature, you can also use traditional python slice
2648 notation, where N:M means numbers N through M-1.
2647 notation, where N:M means numbers N through M-1.
2649
2648
2650 For example, if your history contains (%hist prints it)::
2649 For example, if your history contains (%hist prints it)::
2651
2650
2652 44: x=1
2651 44: x=1
2653 45: y=3
2652 45: y=3
2654 46: z=x+y
2653 46: z=x+y
2655 47: print x
2654 47: print x
2656 48: a=5
2655 48: a=5
2657 49: print 'x',x,'y',y
2656 49: print 'x',x,'y',y
2658
2657
2659 you can create a macro with lines 44 through 47 (included) and line 49
2658 you can create a macro with lines 44 through 47 (included) and line 49
2660 called my_macro with::
2659 called my_macro with::
2661
2660
2662 In [55]: %macro my_macro 44-47 49
2661 In [55]: %macro my_macro 44-47 49
2663
2662
2664 Now, typing `my_macro` (without quotes) will re-execute all this code
2663 Now, typing `my_macro` (without quotes) will re-execute all this code
2665 in one pass.
2664 in one pass.
2666
2665
2667 You don't need to give the line-numbers in order, and any given line
2666 You don't need to give the line-numbers in order, and any given line
2668 number can appear multiple times. You can assemble macros with any
2667 number can appear multiple times. You can assemble macros with any
2669 lines from your input history in any order.
2668 lines from your input history in any order.
2670
2669
2671 The macro is a simple object which holds its value in an attribute,
2670 The macro is a simple object which holds its value in an attribute,
2672 but IPython's display system checks for macros and executes them as
2671 but IPython's display system checks for macros and executes them as
2673 code instead of printing them when you type their name.
2672 code instead of printing them when you type their name.
2674
2673
2675 You can view a macro's contents by explicitly printing it with::
2674 You can view a macro's contents by explicitly printing it with::
2676
2675
2677 print macro_name
2676 print macro_name
2678
2677
2679 """
2678 """
2680 opts,args = self.parse_options(parameter_s,'r',mode='list')
2679 opts,args = self.parse_options(parameter_s,'r',mode='list')
2681 if not args: # List existing macros
2680 if not args: # List existing macros
2682 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2681 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2683 isinstance(v, Macro))
2682 isinstance(v, Macro))
2684 if len(args) == 1:
2683 if len(args) == 1:
2685 raise UsageError(
2684 raise UsageError(
2686 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2685 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2687 name, codefrom = args[0], " ".join(args[1:])
2686 name, codefrom = args[0], " ".join(args[1:])
2688
2687
2689 #print 'rng',ranges # dbg
2688 #print 'rng',ranges # dbg
2690 try:
2689 try:
2691 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2690 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2692 except (ValueError, TypeError) as e:
2691 except (ValueError, TypeError) as e:
2693 print e.args[0]
2692 print e.args[0]
2694 return
2693 return
2695 macro = Macro(lines)
2694 macro = Macro(lines)
2696 self.shell.define_macro(name, macro)
2695 self.shell.define_macro(name, macro)
2697 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2696 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2698 print '=== Macro contents: ==='
2697 print '=== Macro contents: ==='
2699 print macro,
2698 print macro,
2700
2699
2701
2700
2702 @register_magics
2701 @register_magics
2703 class AutoMagics(Magics):
2702 class AutoMagics(Magics):
2704 """Magics that control various autoX behaviors."""
2703 """Magics that control various autoX behaviors."""
2705
2704
2706 def __init__(self, shell):
2705 def __init__(self, shell):
2707 super(AutoMagics, self).__init__(shell)
2706 super(AutoMagics, self).__init__(shell)
2708 # namespace for holding state we may need
2707 # namespace for holding state we may need
2709 self._magic_state = Bunch()
2708 self._magic_state = Bunch()
2710
2709
2711 @line_magic
2710 @line_magic
2712 def automagic(self, parameter_s=''):
2711 def automagic(self, parameter_s=''):
2713 """Make magic functions callable without having to type the initial %.
2712 """Make magic functions callable without having to type the initial %.
2714
2713
2715 Without argumentsl toggles on/off (when off, you must call it as
2714 Without argumentsl toggles on/off (when off, you must call it as
2716 %automagic, of course). With arguments it sets the value, and you can
2715 %automagic, of course). With arguments it sets the value, and you can
2717 use any of (case insensitive):
2716 use any of (case insensitive):
2718
2717
2719 - on, 1, True: to activate
2718 - on, 1, True: to activate
2720
2719
2721 - off, 0, False: to deactivate.
2720 - off, 0, False: to deactivate.
2722
2721
2723 Note that magic functions have lowest priority, so if there's a
2722 Note that magic functions have lowest priority, so if there's a
2724 variable whose name collides with that of a magic fn, automagic won't
2723 variable whose name collides with that of a magic fn, automagic won't
2725 work for that function (you get the variable instead). However, if you
2724 work for that function (you get the variable instead). However, if you
2726 delete the variable (del var), the previously shadowed magic function
2725 delete the variable (del var), the previously shadowed magic function
2727 becomes visible to automagic again."""
2726 becomes visible to automagic again."""
2728
2727
2729 arg = parameter_s.lower()
2728 arg = parameter_s.lower()
2730 mman = self.shell.magics_manager
2729 mman = self.shell.magics_manager
2731 if arg in ('on', '1', 'true'):
2730 if arg in ('on', '1', 'true'):
2732 val = True
2731 val = True
2733 elif arg in ('off', '0', 'false'):
2732 elif arg in ('off', '0', 'false'):
2734 val = False
2733 val = False
2735 else:
2734 else:
2736 val = not mman.auto_magic
2735 val = not mman.auto_magic
2737 mman.auto_magic = val
2736 mman.auto_magic = val
2738 print '\n' + self.shell.magics_manager.auto_status()
2737 print '\n' + self.shell.magics_manager.auto_status()
2739
2738
2740 @skip_doctest
2739 @skip_doctest
2741 @line_magic
2740 @line_magic
2742 def autocall(self, parameter_s=''):
2741 def autocall(self, parameter_s=''):
2743 """Make functions callable without having to type parentheses.
2742 """Make functions callable without having to type parentheses.
2744
2743
2745 Usage:
2744 Usage:
2746
2745
2747 %autocall [mode]
2746 %autocall [mode]
2748
2747
2749 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
2748 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
2750 value is toggled on and off (remembering the previous state).
2749 value is toggled on and off (remembering the previous state).
2751
2750
2752 In more detail, these values mean:
2751 In more detail, these values mean:
2753
2752
2754 0 -> fully disabled
2753 0 -> fully disabled
2755
2754
2756 1 -> active, but do not apply if there are no arguments on the line.
2755 1 -> active, but do not apply if there are no arguments on the line.
2757
2756
2758 In this mode, you get::
2757 In this mode, you get::
2759
2758
2760 In [1]: callable
2759 In [1]: callable
2761 Out[1]: <built-in function callable>
2760 Out[1]: <built-in function callable>
2762
2761
2763 In [2]: callable 'hello'
2762 In [2]: callable 'hello'
2764 ------> callable('hello')
2763 ------> callable('hello')
2765 Out[2]: False
2764 Out[2]: False
2766
2765
2767 2 -> Active always. Even if no arguments are present, the callable
2766 2 -> Active always. Even if no arguments are present, the callable
2768 object is called::
2767 object is called::
2769
2768
2770 In [2]: float
2769 In [2]: float
2771 ------> float()
2770 ------> float()
2772 Out[2]: 0.0
2771 Out[2]: 0.0
2773
2772
2774 Note that even with autocall off, you can still use '/' at the start of
2773 Note that even with autocall off, you can still use '/' at the start of
2775 a line to treat the first argument on the command line as a function
2774 a line to treat the first argument on the command line as a function
2776 and add parentheses to it::
2775 and add parentheses to it::
2777
2776
2778 In [8]: /str 43
2777 In [8]: /str 43
2779 ------> str(43)
2778 ------> str(43)
2780 Out[8]: '43'
2779 Out[8]: '43'
2781
2780
2782 # all-random (note for auto-testing)
2781 # all-random (note for auto-testing)
2783 """
2782 """
2784
2783
2785 if parameter_s:
2784 if parameter_s:
2786 arg = int(parameter_s)
2785 arg = int(parameter_s)
2787 else:
2786 else:
2788 arg = 'toggle'
2787 arg = 'toggle'
2789
2788
2790 if not arg in (0, 1, 2,'toggle'):
2789 if not arg in (0, 1, 2,'toggle'):
2791 error('Valid modes: (0->Off, 1->Smart, 2->Full')
2790 error('Valid modes: (0->Off, 1->Smart, 2->Full')
2792 return
2791 return
2793
2792
2794 if arg in (0, 1, 2):
2793 if arg in (0, 1, 2):
2795 self.shell.autocall = arg
2794 self.shell.autocall = arg
2796 else: # toggle
2795 else: # toggle
2797 if self.shell.autocall:
2796 if self.shell.autocall:
2798 self._magic_state.autocall_save = self.shell.autocall
2797 self._magic_state.autocall_save = self.shell.autocall
2799 self.shell.autocall = 0
2798 self.shell.autocall = 0
2800 else:
2799 else:
2801 try:
2800 try:
2802 self.shell.autocall = self._magic_state.autocall_save
2801 self.shell.autocall = self._magic_state.autocall_save
2803 except AttributeError:
2802 except AttributeError:
2804 self.shell.autocall = self._magic_state.autocall_save = 1
2803 self.shell.autocall = self._magic_state.autocall_save = 1
2805
2804
2806 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
2805 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
2807
2806
2808
2807
2809 @register_magics
2808 @register_magics
2810 class OSMagics(Magics):
2809 class OSMagics(Magics):
2811 """Magics to interact with the underlying OS (shell-type functionality).
2810 """Magics to interact with the underlying OS (shell-type functionality).
2812 """
2811 """
2813
2812
2814 @skip_doctest
2813 @skip_doctest
2815 @line_magic
2814 @line_magic
2816 def alias(self, parameter_s=''):
2815 def alias(self, parameter_s=''):
2817 """Define an alias for a system command.
2816 """Define an alias for a system command.
2818
2817
2819 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2818 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2820
2819
2821 Then, typing 'alias_name params' will execute the system command 'cmd
2820 Then, typing 'alias_name params' will execute the system command 'cmd
2822 params' (from your underlying operating system).
2821 params' (from your underlying operating system).
2823
2822
2824 Aliases have lower precedence than magic functions and Python normal
2823 Aliases have lower precedence than magic functions and Python normal
2825 variables, so if 'foo' is both a Python variable and an alias, the
2824 variables, so if 'foo' is both a Python variable and an alias, the
2826 alias can not be executed until 'del foo' removes the Python variable.
2825 alias can not be executed until 'del foo' removes the Python variable.
2827
2826
2828 You can use the %l specifier in an alias definition to represent the
2827 You can use the %l specifier in an alias definition to represent the
2829 whole line when the alias is called. For example::
2828 whole line when the alias is called. For example::
2830
2829
2831 In [2]: alias bracket echo "Input in brackets: <%l>"
2830 In [2]: alias bracket echo "Input in brackets: <%l>"
2832 In [3]: bracket hello world
2831 In [3]: bracket hello world
2833 Input in brackets: <hello world>
2832 Input in brackets: <hello world>
2834
2833
2835 You can also define aliases with parameters using %s specifiers (one
2834 You can also define aliases with parameters using %s specifiers (one
2836 per parameter)::
2835 per parameter)::
2837
2836
2838 In [1]: alias parts echo first %s second %s
2837 In [1]: alias parts echo first %s second %s
2839 In [2]: %parts A B
2838 In [2]: %parts A B
2840 first A second B
2839 first A second B
2841 In [3]: %parts A
2840 In [3]: %parts A
2842 Incorrect number of arguments: 2 expected.
2841 Incorrect number of arguments: 2 expected.
2843 parts is an alias to: 'echo first %s second %s'
2842 parts is an alias to: 'echo first %s second %s'
2844
2843
2845 Note that %l and %s are mutually exclusive. You can only use one or
2844 Note that %l and %s are mutually exclusive. You can only use one or
2846 the other in your aliases.
2845 the other in your aliases.
2847
2846
2848 Aliases expand Python variables just like system calls using ! or !!
2847 Aliases expand Python variables just like system calls using ! or !!
2849 do: all expressions prefixed with '$' get expanded. For details of
2848 do: all expressions prefixed with '$' get expanded. For details of
2850 the semantic rules, see PEP-215:
2849 the semantic rules, see PEP-215:
2851 http://www.python.org/peps/pep-0215.html. This is the library used by
2850 http://www.python.org/peps/pep-0215.html. This is the library used by
2852 IPython for variable expansion. If you want to access a true shell
2851 IPython for variable expansion. If you want to access a true shell
2853 variable, an extra $ is necessary to prevent its expansion by
2852 variable, an extra $ is necessary to prevent its expansion by
2854 IPython::
2853 IPython::
2855
2854
2856 In [6]: alias show echo
2855 In [6]: alias show echo
2857 In [7]: PATH='A Python string'
2856 In [7]: PATH='A Python string'
2858 In [8]: show $PATH
2857 In [8]: show $PATH
2859 A Python string
2858 A Python string
2860 In [9]: show $$PATH
2859 In [9]: show $$PATH
2861 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2860 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2862
2861
2863 You can use the alias facility to acess all of $PATH. See the %rehash
2862 You can use the alias facility to acess all of $PATH. See the %rehash
2864 and %rehashx functions, which automatically create aliases for the
2863 and %rehashx functions, which automatically create aliases for the
2865 contents of your $PATH.
2864 contents of your $PATH.
2866
2865
2867 If called with no parameters, %alias prints the current alias table."""
2866 If called with no parameters, %alias prints the current alias table."""
2868
2867
2869 par = parameter_s.strip()
2868 par = parameter_s.strip()
2870 if not par:
2869 if not par:
2871 aliases = sorted(self.shell.alias_manager.aliases)
2870 aliases = sorted(self.shell.alias_manager.aliases)
2872 # stored = self.shell.db.get('stored_aliases', {} )
2871 # stored = self.shell.db.get('stored_aliases', {} )
2873 # for k, v in stored:
2872 # for k, v in stored:
2874 # atab.append(k, v[0])
2873 # atab.append(k, v[0])
2875
2874
2876 print "Total number of aliases:", len(aliases)
2875 print "Total number of aliases:", len(aliases)
2877 sys.stdout.flush()
2876 sys.stdout.flush()
2878 return aliases
2877 return aliases
2879
2878
2880 # Now try to define a new one
2879 # Now try to define a new one
2881 try:
2880 try:
2882 alias,cmd = par.split(None, 1)
2881 alias,cmd = par.split(None, 1)
2883 except:
2882 except:
2884 print oinspect.getdoc(self.magic_alias)
2883 print oinspect.getdoc(self.magic_alias)
2885 else:
2884 else:
2886 self.shell.alias_manager.soft_define_alias(alias, cmd)
2885 self.shell.alias_manager.soft_define_alias(alias, cmd)
2887 # end magic_alias
2886 # end magic_alias
2888
2887
2889 @line_magic
2888 @line_magic
2890 def unalias(self, parameter_s=''):
2889 def unalias(self, parameter_s=''):
2891 """Remove an alias"""
2890 """Remove an alias"""
2892
2891
2893 aname = parameter_s.strip()
2892 aname = parameter_s.strip()
2894 self.shell.alias_manager.undefine_alias(aname)
2893 self.shell.alias_manager.undefine_alias(aname)
2895 stored = self.shell.db.get('stored_aliases', {} )
2894 stored = self.shell.db.get('stored_aliases', {} )
2896 if aname in stored:
2895 if aname in stored:
2897 print "Removing %stored alias",aname
2896 print "Removing %stored alias",aname
2898 del stored[aname]
2897 del stored[aname]
2899 self.shell.db['stored_aliases'] = stored
2898 self.shell.db['stored_aliases'] = stored
2900
2899
2901 @line_magic
2900 @line_magic
2902 def rehashx(self, parameter_s=''):
2901 def rehashx(self, parameter_s=''):
2903 """Update the alias table with all executable files in $PATH.
2902 """Update the alias table with all executable files in $PATH.
2904
2903
2905 This version explicitly checks that every entry in $PATH is a file
2904 This version explicitly checks that every entry in $PATH is a file
2906 with execute access (os.X_OK), so it is much slower than %rehash.
2905 with execute access (os.X_OK), so it is much slower than %rehash.
2907
2906
2908 Under Windows, it checks executability as a match against a
2907 Under Windows, it checks executability as a match against a
2909 '|'-separated string of extensions, stored in the IPython config
2908 '|'-separated string of extensions, stored in the IPython config
2910 variable win_exec_ext. This defaults to 'exe|com|bat'.
2909 variable win_exec_ext. This defaults to 'exe|com|bat'.
2911
2910
2912 This function also resets the root module cache of module completer,
2911 This function also resets the root module cache of module completer,
2913 used on slow filesystems.
2912 used on slow filesystems.
2914 """
2913 """
2915 from IPython.core.alias import InvalidAliasError
2914 from IPython.core.alias import InvalidAliasError
2916
2915
2917 # for the benefit of module completer in ipy_completers.py
2916 # for the benefit of module completer in ipy_completers.py
2918 del self.shell.db['rootmodules']
2917 del self.shell.db['rootmodules']
2919
2918
2920 path = [os.path.abspath(os.path.expanduser(p)) for p in
2919 path = [os.path.abspath(os.path.expanduser(p)) for p in
2921 os.environ.get('PATH','').split(os.pathsep)]
2920 os.environ.get('PATH','').split(os.pathsep)]
2922 path = filter(os.path.isdir,path)
2921 path = filter(os.path.isdir,path)
2923
2922
2924 syscmdlist = []
2923 syscmdlist = []
2925 # Now define isexec in a cross platform manner.
2924 # Now define isexec in a cross platform manner.
2926 if os.name == 'posix':
2925 if os.name == 'posix':
2927 isexec = lambda fname:os.path.isfile(fname) and \
2926 isexec = lambda fname:os.path.isfile(fname) and \
2928 os.access(fname,os.X_OK)
2927 os.access(fname,os.X_OK)
2929 else:
2928 else:
2930 try:
2929 try:
2931 winext = os.environ['pathext'].replace(';','|').replace('.','')
2930 winext = os.environ['pathext'].replace(';','|').replace('.','')
2932 except KeyError:
2931 except KeyError:
2933 winext = 'exe|com|bat|py'
2932 winext = 'exe|com|bat|py'
2934 if 'py' not in winext:
2933 if 'py' not in winext:
2935 winext += '|py'
2934 winext += '|py'
2936 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2935 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2937 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2936 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2938 savedir = os.getcwdu()
2937 savedir = os.getcwdu()
2939
2938
2940 # Now walk the paths looking for executables to alias.
2939 # Now walk the paths looking for executables to alias.
2941 try:
2940 try:
2942 # write the whole loop for posix/Windows so we don't have an if in
2941 # write the whole loop for posix/Windows so we don't have an if in
2943 # the innermost part
2942 # the innermost part
2944 if os.name == 'posix':
2943 if os.name == 'posix':
2945 for pdir in path:
2944 for pdir in path:
2946 os.chdir(pdir)
2945 os.chdir(pdir)
2947 for ff in os.listdir(pdir):
2946 for ff in os.listdir(pdir):
2948 if isexec(ff):
2947 if isexec(ff):
2949 try:
2948 try:
2950 # Removes dots from the name since ipython
2949 # Removes dots from the name since ipython
2951 # will assume names with dots to be python.
2950 # will assume names with dots to be python.
2952 self.shell.alias_manager.define_alias(
2951 self.shell.alias_manager.define_alias(
2953 ff.replace('.',''), ff)
2952 ff.replace('.',''), ff)
2954 except InvalidAliasError:
2953 except InvalidAliasError:
2955 pass
2954 pass
2956 else:
2955 else:
2957 syscmdlist.append(ff)
2956 syscmdlist.append(ff)
2958 else:
2957 else:
2959 no_alias = self.shell.alias_manager.no_alias
2958 no_alias = self.shell.alias_manager.no_alias
2960 for pdir in path:
2959 for pdir in path:
2961 os.chdir(pdir)
2960 os.chdir(pdir)
2962 for ff in os.listdir(pdir):
2961 for ff in os.listdir(pdir):
2963 base, ext = os.path.splitext(ff)
2962 base, ext = os.path.splitext(ff)
2964 if isexec(ff) and base.lower() not in no_alias:
2963 if isexec(ff) and base.lower() not in no_alias:
2965 if ext.lower() == '.exe':
2964 if ext.lower() == '.exe':
2966 ff = base
2965 ff = base
2967 try:
2966 try:
2968 # Removes dots from the name since ipython
2967 # Removes dots from the name since ipython
2969 # will assume names with dots to be python.
2968 # will assume names with dots to be python.
2970 self.shell.alias_manager.define_alias(
2969 self.shell.alias_manager.define_alias(
2971 base.lower().replace('.',''), ff)
2970 base.lower().replace('.',''), ff)
2972 except InvalidAliasError:
2971 except InvalidAliasError:
2973 pass
2972 pass
2974 syscmdlist.append(ff)
2973 syscmdlist.append(ff)
2975 self.shell.db['syscmdlist'] = syscmdlist
2974 self.shell.db['syscmdlist'] = syscmdlist
2976 finally:
2975 finally:
2977 os.chdir(savedir)
2976 os.chdir(savedir)
2978
2977
2979 @skip_doctest
2978 @skip_doctest
2980 @line_magic
2979 @line_magic
2981 def pwd(self, parameter_s=''):
2980 def pwd(self, parameter_s=''):
2982 """Return the current working directory path.
2981 """Return the current working directory path.
2983
2982
2984 Examples
2983 Examples
2985 --------
2984 --------
2986 ::
2985 ::
2987
2986
2988 In [9]: pwd
2987 In [9]: pwd
2989 Out[9]: '/home/tsuser/sprint/ipython'
2988 Out[9]: '/home/tsuser/sprint/ipython'
2990 """
2989 """
2991 return os.getcwdu()
2990 return os.getcwdu()
2992
2991
2993 @skip_doctest
2992 @skip_doctest
2994 @line_magic
2993 @line_magic
2995 def cd(self, parameter_s=''):
2994 def cd(self, parameter_s=''):
2996 """Change the current working directory.
2995 """Change the current working directory.
2997
2996
2998 This command automatically maintains an internal list of directories
2997 This command automatically maintains an internal list of directories
2999 you visit during your IPython session, in the variable _dh. The
2998 you visit during your IPython session, in the variable _dh. The
3000 command %dhist shows this history nicely formatted. You can also
2999 command %dhist shows this history nicely formatted. You can also
3001 do 'cd -<tab>' to see directory history conveniently.
3000 do 'cd -<tab>' to see directory history conveniently.
3002
3001
3003 Usage:
3002 Usage:
3004
3003
3005 cd 'dir': changes to directory 'dir'.
3004 cd 'dir': changes to directory 'dir'.
3006
3005
3007 cd -: changes to the last visited directory.
3006 cd -: changes to the last visited directory.
3008
3007
3009 cd -<n>: changes to the n-th directory in the directory history.
3008 cd -<n>: changes to the n-th directory in the directory history.
3010
3009
3011 cd --foo: change to directory that matches 'foo' in history
3010 cd --foo: change to directory that matches 'foo' in history
3012
3011
3013 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
3012 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
3014 (note: cd <bookmark_name> is enough if there is no
3013 (note: cd <bookmark_name> is enough if there is no
3015 directory <bookmark_name>, but a bookmark with the name exists.)
3014 directory <bookmark_name>, but a bookmark with the name exists.)
3016 'cd -b <tab>' allows you to tab-complete bookmark names.
3015 'cd -b <tab>' allows you to tab-complete bookmark names.
3017
3016
3018 Options:
3017 Options:
3019
3018
3020 -q: quiet. Do not print the working directory after the cd command is
3019 -q: quiet. Do not print the working directory after the cd command is
3021 executed. By default IPython's cd command does print this directory,
3020 executed. By default IPython's cd command does print this directory,
3022 since the default prompts do not display path information.
3021 since the default prompts do not display path information.
3023
3022
3024 Note that !cd doesn't work for this purpose because the shell where
3023 Note that !cd doesn't work for this purpose because the shell where
3025 !command runs is immediately discarded after executing 'command'.
3024 !command runs is immediately discarded after executing 'command'.
3026
3025
3027 Examples
3026 Examples
3028 --------
3027 --------
3029 ::
3028 ::
3030
3029
3031 In [10]: cd parent/child
3030 In [10]: cd parent/child
3032 /home/tsuser/parent/child
3031 /home/tsuser/parent/child
3033 """
3032 """
3034
3033
3035 #bkms = self.shell.persist.get("bookmarks",{})
3034 #bkms = self.shell.persist.get("bookmarks",{})
3036
3035
3037 oldcwd = os.getcwdu()
3036 oldcwd = os.getcwdu()
3038 numcd = re.match(r'(-)(\d+)$',parameter_s)
3037 numcd = re.match(r'(-)(\d+)$',parameter_s)
3039 # jump in directory history by number
3038 # jump in directory history by number
3040 if numcd:
3039 if numcd:
3041 nn = int(numcd.group(2))
3040 nn = int(numcd.group(2))
3042 try:
3041 try:
3043 ps = self.shell.user_ns['_dh'][nn]
3042 ps = self.shell.user_ns['_dh'][nn]
3044 except IndexError:
3043 except IndexError:
3045 print 'The requested directory does not exist in history.'
3044 print 'The requested directory does not exist in history.'
3046 return
3045 return
3047 else:
3046 else:
3048 opts = {}
3047 opts = {}
3049 elif parameter_s.startswith('--'):
3048 elif parameter_s.startswith('--'):
3050 ps = None
3049 ps = None
3051 fallback = None
3050 fallback = None
3052 pat = parameter_s[2:]
3051 pat = parameter_s[2:]
3053 dh = self.shell.user_ns['_dh']
3052 dh = self.shell.user_ns['_dh']
3054 # first search only by basename (last component)
3053 # first search only by basename (last component)
3055 for ent in reversed(dh):
3054 for ent in reversed(dh):
3056 if pat in os.path.basename(ent) and os.path.isdir(ent):
3055 if pat in os.path.basename(ent) and os.path.isdir(ent):
3057 ps = ent
3056 ps = ent
3058 break
3057 break
3059
3058
3060 if fallback is None and pat in ent and os.path.isdir(ent):
3059 if fallback is None and pat in ent and os.path.isdir(ent):
3061 fallback = ent
3060 fallback = ent
3062
3061
3063 # if we have no last part match, pick the first full path match
3062 # if we have no last part match, pick the first full path match
3064 if ps is None:
3063 if ps is None:
3065 ps = fallback
3064 ps = fallback
3066
3065
3067 if ps is None:
3066 if ps is None:
3068 print "No matching entry in directory history"
3067 print "No matching entry in directory history"
3069 return
3068 return
3070 else:
3069 else:
3071 opts = {}
3070 opts = {}
3072
3071
3073
3072
3074 else:
3073 else:
3075 #turn all non-space-escaping backslashes to slashes,
3074 #turn all non-space-escaping backslashes to slashes,
3076 # for c:\windows\directory\names\
3075 # for c:\windows\directory\names\
3077 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
3076 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
3078 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
3077 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
3079 # jump to previous
3078 # jump to previous
3080 if ps == '-':
3079 if ps == '-':
3081 try:
3080 try:
3082 ps = self.shell.user_ns['_dh'][-2]
3081 ps = self.shell.user_ns['_dh'][-2]
3083 except IndexError:
3082 except IndexError:
3084 raise UsageError('%cd -: No previous directory to change to.')
3083 raise UsageError('%cd -: No previous directory to change to.')
3085 # jump to bookmark if needed
3084 # jump to bookmark if needed
3086 else:
3085 else:
3087 if not os.path.isdir(ps) or opts.has_key('b'):
3086 if not os.path.isdir(ps) or opts.has_key('b'):
3088 bkms = self.shell.db.get('bookmarks', {})
3087 bkms = self.shell.db.get('bookmarks', {})
3089
3088
3090 if bkms.has_key(ps):
3089 if bkms.has_key(ps):
3091 target = bkms[ps]
3090 target = bkms[ps]
3092 print '(bookmark:%s) -> %s' % (ps,target)
3091 print '(bookmark:%s) -> %s' % (ps,target)
3093 ps = target
3092 ps = target
3094 else:
3093 else:
3095 if opts.has_key('b'):
3094 if opts.has_key('b'):
3096 raise UsageError("Bookmark '%s' not found. "
3095 raise UsageError("Bookmark '%s' not found. "
3097 "Use '%%bookmark -l' to see your bookmarks." % ps)
3096 "Use '%%bookmark -l' to see your bookmarks." % ps)
3098
3097
3099 # strip extra quotes on Windows, because os.chdir doesn't like them
3098 # strip extra quotes on Windows, because os.chdir doesn't like them
3100 ps = unquote_filename(ps)
3099 ps = unquote_filename(ps)
3101 # at this point ps should point to the target dir
3100 # at this point ps should point to the target dir
3102 if ps:
3101 if ps:
3103 try:
3102 try:
3104 os.chdir(os.path.expanduser(ps))
3103 os.chdir(os.path.expanduser(ps))
3105 if hasattr(self.shell, 'term_title') and self.shell.term_title:
3104 if hasattr(self.shell, 'term_title') and self.shell.term_title:
3106 set_term_title('IPython: ' + abbrev_cwd())
3105 set_term_title('IPython: ' + abbrev_cwd())
3107 except OSError:
3106 except OSError:
3108 print sys.exc_info()[1]
3107 print sys.exc_info()[1]
3109 else:
3108 else:
3110 cwd = os.getcwdu()
3109 cwd = os.getcwdu()
3111 dhist = self.shell.user_ns['_dh']
3110 dhist = self.shell.user_ns['_dh']
3112 if oldcwd != cwd:
3111 if oldcwd != cwd:
3113 dhist.append(cwd)
3112 dhist.append(cwd)
3114 self.shell.db['dhist'] = compress_dhist(dhist)[-100:]
3113 self.shell.db['dhist'] = compress_dhist(dhist)[-100:]
3115
3114
3116 else:
3115 else:
3117 os.chdir(self.shell.home_dir)
3116 os.chdir(self.shell.home_dir)
3118 if hasattr(self.shell, 'term_title') and self.shell.term_title:
3117 if hasattr(self.shell, 'term_title') and self.shell.term_title:
3119 set_term_title('IPython: ' + '~')
3118 set_term_title('IPython: ' + '~')
3120 cwd = os.getcwdu()
3119 cwd = os.getcwdu()
3121 dhist = self.shell.user_ns['_dh']
3120 dhist = self.shell.user_ns['_dh']
3122
3121
3123 if oldcwd != cwd:
3122 if oldcwd != cwd:
3124 dhist.append(cwd)
3123 dhist.append(cwd)
3125 self.shell.db['dhist'] = compress_dhist(dhist)[-100:]
3124 self.shell.db['dhist'] = compress_dhist(dhist)[-100:]
3126 if not 'q' in opts and self.shell.user_ns['_dh']:
3125 if not 'q' in opts and self.shell.user_ns['_dh']:
3127 print self.shell.user_ns['_dh'][-1]
3126 print self.shell.user_ns['_dh'][-1]
3128
3127
3129
3128
3130 @line_magic
3129 @line_magic
3131 def env(self, parameter_s=''):
3130 def env(self, parameter_s=''):
3132 """List environment variables."""
3131 """List environment variables."""
3133
3132
3134 return dict(os.environ)
3133 return dict(os.environ)
3135
3134
3136 @line_magic
3135 @line_magic
3137 def pushd(self, parameter_s=''):
3136 def pushd(self, parameter_s=''):
3138 """Place the current dir on stack and change directory.
3137 """Place the current dir on stack and change directory.
3139
3138
3140 Usage:\\
3139 Usage:\\
3141 %pushd ['dirname']
3140 %pushd ['dirname']
3142 """
3141 """
3143
3142
3144 dir_s = self.shell.dir_stack
3143 dir_s = self.shell.dir_stack
3145 tgt = os.path.expanduser(unquote_filename(parameter_s))
3144 tgt = os.path.expanduser(unquote_filename(parameter_s))
3146 cwd = os.getcwdu().replace(self.shell.home_dir,'~')
3145 cwd = os.getcwdu().replace(self.shell.home_dir,'~')
3147 if tgt:
3146 if tgt:
3148 self.magic_cd(parameter_s)
3147 self.magic_cd(parameter_s)
3149 dir_s.insert(0,cwd)
3148 dir_s.insert(0,cwd)
3150 return self.shell.magic('dirs')
3149 return self.shell.magic('dirs')
3151
3150
3152 @line_magic
3151 @line_magic
3153 def popd(self, parameter_s=''):
3152 def popd(self, parameter_s=''):
3154 """Change to directory popped off the top of the stack.
3153 """Change to directory popped off the top of the stack.
3155 """
3154 """
3156 if not self.shell.dir_stack:
3155 if not self.shell.dir_stack:
3157 raise UsageError("%popd on empty stack")
3156 raise UsageError("%popd on empty stack")
3158 top = self.shell.dir_stack.pop(0)
3157 top = self.shell.dir_stack.pop(0)
3159 self.magic_cd(top)
3158 self.magic_cd(top)
3160 print "popd ->",top
3159 print "popd ->",top
3161
3160
3162 @line_magic
3161 @line_magic
3163 def dirs(self, parameter_s=''):
3162 def dirs(self, parameter_s=''):
3164 """Return the current directory stack."""
3163 """Return the current directory stack."""
3165
3164
3166 return self.shell.dir_stack
3165 return self.shell.dir_stack
3167
3166
3168 @line_magic
3167 @line_magic
3169 def dhist(self, parameter_s=''):
3168 def dhist(self, parameter_s=''):
3170 """Print your history of visited directories.
3169 """Print your history of visited directories.
3171
3170
3172 %dhist -> print full history\\
3171 %dhist -> print full history\\
3173 %dhist n -> print last n entries only\\
3172 %dhist n -> print last n entries only\\
3174 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
3173 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
3175
3174
3176 This history is automatically maintained by the %cd command, and
3175 This history is automatically maintained by the %cd command, and
3177 always available as the global list variable _dh. You can use %cd -<n>
3176 always available as the global list variable _dh. You can use %cd -<n>
3178 to go to directory number <n>.
3177 to go to directory number <n>.
3179
3178
3180 Note that most of time, you should view directory history by entering
3179 Note that most of time, you should view directory history by entering
3181 cd -<TAB>.
3180 cd -<TAB>.
3182
3181
3183 """
3182 """
3184
3183
3185 dh = self.shell.user_ns['_dh']
3184 dh = self.shell.user_ns['_dh']
3186 if parameter_s:
3185 if parameter_s:
3187 try:
3186 try:
3188 args = map(int,parameter_s.split())
3187 args = map(int,parameter_s.split())
3189 except:
3188 except:
3190 self.arg_err(self.dhist)
3189 self.arg_err(self.dhist)
3191 return
3190 return
3192 if len(args) == 1:
3191 if len(args) == 1:
3193 ini,fin = max(len(dh)-(args[0]),0),len(dh)
3192 ini,fin = max(len(dh)-(args[0]),0),len(dh)
3194 elif len(args) == 2:
3193 elif len(args) == 2:
3195 ini,fin = args
3194 ini,fin = args
3196 else:
3195 else:
3197 self.arg_err(self.dhist)
3196 self.arg_err(self.dhist)
3198 return
3197 return
3199 else:
3198 else:
3200 ini,fin = 0,len(dh)
3199 ini,fin = 0,len(dh)
3201 nlprint(dh,
3200 nlprint(dh,
3202 header = 'Directory history (kept in _dh)',
3201 header = 'Directory history (kept in _dh)',
3203 start=ini,stop=fin)
3202 start=ini,stop=fin)
3204
3203
3205 @skip_doctest
3204 @skip_doctest
3206 @line_magic
3205 @line_magic
3207 def sc(self, parameter_s=''):
3206 def sc(self, parameter_s=''):
3208 """Shell capture - execute a shell command and capture its output.
3207 """Shell capture - execute a shell command and capture its output.
3209
3208
3210 DEPRECATED. Suboptimal, retained for backwards compatibility.
3209 DEPRECATED. Suboptimal, retained for backwards compatibility.
3211
3210
3212 You should use the form 'var = !command' instead. Example:
3211 You should use the form 'var = !command' instead. Example:
3213
3212
3214 "%sc -l myfiles = ls ~" should now be written as
3213 "%sc -l myfiles = ls ~" should now be written as
3215
3214
3216 "myfiles = !ls ~"
3215 "myfiles = !ls ~"
3217
3216
3218 myfiles.s, myfiles.l and myfiles.n still apply as documented
3217 myfiles.s, myfiles.l and myfiles.n still apply as documented
3219 below.
3218 below.
3220
3219
3221 --
3220 --
3222 %sc [options] varname=command
3221 %sc [options] varname=command
3223
3222
3224 IPython will run the given command using commands.getoutput(), and
3223 IPython will run the given command using commands.getoutput(), and
3225 will then update the user's interactive namespace with a variable
3224 will then update the user's interactive namespace with a variable
3226 called varname, containing the value of the call. Your command can
3225 called varname, containing the value of the call. Your command can
3227 contain shell wildcards, pipes, etc.
3226 contain shell wildcards, pipes, etc.
3228
3227
3229 The '=' sign in the syntax is mandatory, and the variable name you
3228 The '=' sign in the syntax is mandatory, and the variable name you
3230 supply must follow Python's standard conventions for valid names.
3229 supply must follow Python's standard conventions for valid names.
3231
3230
3232 (A special format without variable name exists for internal use)
3231 (A special format without variable name exists for internal use)
3233
3232
3234 Options:
3233 Options:
3235
3234
3236 -l: list output. Split the output on newlines into a list before
3235 -l: list output. Split the output on newlines into a list before
3237 assigning it to the given variable. By default the output is stored
3236 assigning it to the given variable. By default the output is stored
3238 as a single string.
3237 as a single string.
3239
3238
3240 -v: verbose. Print the contents of the variable.
3239 -v: verbose. Print the contents of the variable.
3241
3240
3242 In most cases you should not need to split as a list, because the
3241 In most cases you should not need to split as a list, because the
3243 returned value is a special type of string which can automatically
3242 returned value is a special type of string which can automatically
3244 provide its contents either as a list (split on newlines) or as a
3243 provide its contents either as a list (split on newlines) or as a
3245 space-separated string. These are convenient, respectively, either
3244 space-separated string. These are convenient, respectively, either
3246 for sequential processing or to be passed to a shell command.
3245 for sequential processing or to be passed to a shell command.
3247
3246
3248 For example::
3247 For example::
3249
3248
3250 # Capture into variable a
3249 # Capture into variable a
3251 In [1]: sc a=ls *py
3250 In [1]: sc a=ls *py
3252
3251
3253 # a is a string with embedded newlines
3252 # a is a string with embedded newlines
3254 In [2]: a
3253 In [2]: a
3255 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3254 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3256
3255
3257 # which can be seen as a list:
3256 # which can be seen as a list:
3258 In [3]: a.l
3257 In [3]: a.l
3259 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3258 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3260
3259
3261 # or as a whitespace-separated string:
3260 # or as a whitespace-separated string:
3262 In [4]: a.s
3261 In [4]: a.s
3263 Out[4]: 'setup.py win32_manual_post_install.py'
3262 Out[4]: 'setup.py win32_manual_post_install.py'
3264
3263
3265 # a.s is useful to pass as a single command line:
3264 # a.s is useful to pass as a single command line:
3266 In [5]: !wc -l $a.s
3265 In [5]: !wc -l $a.s
3267 146 setup.py
3266 146 setup.py
3268 130 win32_manual_post_install.py
3267 130 win32_manual_post_install.py
3269 276 total
3268 276 total
3270
3269
3271 # while the list form is useful to loop over:
3270 # while the list form is useful to loop over:
3272 In [6]: for f in a.l:
3271 In [6]: for f in a.l:
3273 ...: !wc -l $f
3272 ...: !wc -l $f
3274 ...:
3273 ...:
3275 146 setup.py
3274 146 setup.py
3276 130 win32_manual_post_install.py
3275 130 win32_manual_post_install.py
3277
3276
3278 Similarly, the lists returned by the -l option are also special, in
3277 Similarly, the lists returned by the -l option are also special, in
3279 the sense that you can equally invoke the .s attribute on them to
3278 the sense that you can equally invoke the .s attribute on them to
3280 automatically get a whitespace-separated string from their contents::
3279 automatically get a whitespace-separated string from their contents::
3281
3280
3282 In [7]: sc -l b=ls *py
3281 In [7]: sc -l b=ls *py
3283
3282
3284 In [8]: b
3283 In [8]: b
3285 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3284 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3286
3285
3287 In [9]: b.s
3286 In [9]: b.s
3288 Out[9]: 'setup.py win32_manual_post_install.py'
3287 Out[9]: 'setup.py win32_manual_post_install.py'
3289
3288
3290 In summary, both the lists and strings used for output capture have
3289 In summary, both the lists and strings used for output capture have
3291 the following special attributes::
3290 the following special attributes::
3292
3291
3293 .l (or .list) : value as list.
3292 .l (or .list) : value as list.
3294 .n (or .nlstr): value as newline-separated string.
3293 .n (or .nlstr): value as newline-separated string.
3295 .s (or .spstr): value as space-separated string.
3294 .s (or .spstr): value as space-separated string.
3296 """
3295 """
3297
3296
3298 opts,args = self.parse_options(parameter_s,'lv')
3297 opts,args = self.parse_options(parameter_s,'lv')
3299 # Try to get a variable name and command to run
3298 # Try to get a variable name and command to run
3300 try:
3299 try:
3301 # the variable name must be obtained from the parse_options
3300 # the variable name must be obtained from the parse_options
3302 # output, which uses shlex.split to strip options out.
3301 # output, which uses shlex.split to strip options out.
3303 var,_ = args.split('=',1)
3302 var,_ = args.split('=',1)
3304 var = var.strip()
3303 var = var.strip()
3305 # But the command has to be extracted from the original input
3304 # But the command has to be extracted from the original input
3306 # parameter_s, not on what parse_options returns, to avoid the
3305 # parameter_s, not on what parse_options returns, to avoid the
3307 # quote stripping which shlex.split performs on it.
3306 # quote stripping which shlex.split performs on it.
3308 _,cmd = parameter_s.split('=',1)
3307 _,cmd = parameter_s.split('=',1)
3309 except ValueError:
3308 except ValueError:
3310 var,cmd = '',''
3309 var,cmd = '',''
3311 # If all looks ok, proceed
3310 # If all looks ok, proceed
3312 split = 'l' in opts
3311 split = 'l' in opts
3313 out = self.shell.getoutput(cmd, split=split)
3312 out = self.shell.getoutput(cmd, split=split)
3314 if opts.has_key('v'):
3313 if opts.has_key('v'):
3315 print '%s ==\n%s' % (var,pformat(out))
3314 print '%s ==\n%s' % (var,pformat(out))
3316 if var:
3315 if var:
3317 self.shell.user_ns.update({var:out})
3316 self.shell.user_ns.update({var:out})
3318 else:
3317 else:
3319 return out
3318 return out
3320
3319
3321 @line_magic
3320 @line_magic
3322 def sx(self, parameter_s=''):
3321 def sx(self, parameter_s=''):
3323 """Shell execute - run a shell command and capture its output.
3322 """Shell execute - run a shell command and capture its output.
3324
3323
3325 %sx command
3324 %sx command
3326
3325
3327 IPython will run the given command using commands.getoutput(), and
3326 IPython will run the given command using commands.getoutput(), and
3328 return the result formatted as a list (split on '\\n'). Since the
3327 return the result formatted as a list (split on '\\n'). Since the
3329 output is _returned_, it will be stored in ipython's regular output
3328 output is _returned_, it will be stored in ipython's regular output
3330 cache Out[N] and in the '_N' automatic variables.
3329 cache Out[N] and in the '_N' automatic variables.
3331
3330
3332 Notes:
3331 Notes:
3333
3332
3334 1) If an input line begins with '!!', then %sx is automatically
3333 1) If an input line begins with '!!', then %sx is automatically
3335 invoked. That is, while::
3334 invoked. That is, while::
3336
3335
3337 !ls
3336 !ls
3338
3337
3339 causes ipython to simply issue system('ls'), typing::
3338 causes ipython to simply issue system('ls'), typing::
3340
3339
3341 !!ls
3340 !!ls
3342
3341
3343 is a shorthand equivalent to::
3342 is a shorthand equivalent to::
3344
3343
3345 %sx ls
3344 %sx ls
3346
3345
3347 2) %sx differs from %sc in that %sx automatically splits into a list,
3346 2) %sx differs from %sc in that %sx automatically splits into a list,
3348 like '%sc -l'. The reason for this is to make it as easy as possible
3347 like '%sc -l'. The reason for this is to make it as easy as possible
3349 to process line-oriented shell output via further python commands.
3348 to process line-oriented shell output via further python commands.
3350 %sc is meant to provide much finer control, but requires more
3349 %sc is meant to provide much finer control, but requires more
3351 typing.
3350 typing.
3352
3351
3353 3) Just like %sc -l, this is a list with special attributes:
3352 3) Just like %sc -l, this is a list with special attributes:
3354 ::
3353 ::
3355
3354
3356 .l (or .list) : value as list.
3355 .l (or .list) : value as list.
3357 .n (or .nlstr): value as newline-separated string.
3356 .n (or .nlstr): value as newline-separated string.
3358 .s (or .spstr): value as whitespace-separated string.
3357 .s (or .spstr): value as whitespace-separated string.
3359
3358
3360 This is very useful when trying to use such lists as arguments to
3359 This is very useful when trying to use such lists as arguments to
3361 system commands."""
3360 system commands."""
3362
3361
3363 if parameter_s:
3362 if parameter_s:
3364 return self.shell.getoutput(parameter_s)
3363 return self.shell.getoutput(parameter_s)
3365
3364
3366
3365
3367 @line_magic
3366 @line_magic
3368 def bookmark(self, parameter_s=''):
3367 def bookmark(self, parameter_s=''):
3369 """Manage IPython's bookmark system.
3368 """Manage IPython's bookmark system.
3370
3369
3371 %bookmark <name> - set bookmark to current dir
3370 %bookmark <name> - set bookmark to current dir
3372 %bookmark <name> <dir> - set bookmark to <dir>
3371 %bookmark <name> <dir> - set bookmark to <dir>
3373 %bookmark -l - list all bookmarks
3372 %bookmark -l - list all bookmarks
3374 %bookmark -d <name> - remove bookmark
3373 %bookmark -d <name> - remove bookmark
3375 %bookmark -r - remove all bookmarks
3374 %bookmark -r - remove all bookmarks
3376
3375
3377 You can later on access a bookmarked folder with::
3376 You can later on access a bookmarked folder with::
3378
3377
3379 %cd -b <name>
3378 %cd -b <name>
3380
3379
3381 or simply '%cd <name>' if there is no directory called <name> AND
3380 or simply '%cd <name>' if there is no directory called <name> AND
3382 there is such a bookmark defined.
3381 there is such a bookmark defined.
3383
3382
3384 Your bookmarks persist through IPython sessions, but they are
3383 Your bookmarks persist through IPython sessions, but they are
3385 associated with each profile."""
3384 associated with each profile."""
3386
3385
3387 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3386 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3388 if len(args) > 2:
3387 if len(args) > 2:
3389 raise UsageError("%bookmark: too many arguments")
3388 raise UsageError("%bookmark: too many arguments")
3390
3389
3391 bkms = self.shell.db.get('bookmarks',{})
3390 bkms = self.shell.db.get('bookmarks',{})
3392
3391
3393 if opts.has_key('d'):
3392 if opts.has_key('d'):
3394 try:
3393 try:
3395 todel = args[0]
3394 todel = args[0]
3396 except IndexError:
3395 except IndexError:
3397 raise UsageError(
3396 raise UsageError(
3398 "%bookmark -d: must provide a bookmark to delete")
3397 "%bookmark -d: must provide a bookmark to delete")
3399 else:
3398 else:
3400 try:
3399 try:
3401 del bkms[todel]
3400 del bkms[todel]
3402 except KeyError:
3401 except KeyError:
3403 raise UsageError(
3402 raise UsageError(
3404 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3403 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3405
3404
3406 elif opts.has_key('r'):
3405 elif opts.has_key('r'):
3407 bkms = {}
3406 bkms = {}
3408 elif opts.has_key('l'):
3407 elif opts.has_key('l'):
3409 bks = bkms.keys()
3408 bks = bkms.keys()
3410 bks.sort()
3409 bks.sort()
3411 if bks:
3410 if bks:
3412 size = max(map(len,bks))
3411 size = max(map(len,bks))
3413 else:
3412 else:
3414 size = 0
3413 size = 0
3415 fmt = '%-'+str(size)+'s -> %s'
3414 fmt = '%-'+str(size)+'s -> %s'
3416 print 'Current bookmarks:'
3415 print 'Current bookmarks:'
3417 for bk in bks:
3416 for bk in bks:
3418 print fmt % (bk,bkms[bk])
3417 print fmt % (bk,bkms[bk])
3419 else:
3418 else:
3420 if not args:
3419 if not args:
3421 raise UsageError("%bookmark: You must specify the bookmark name")
3420 raise UsageError("%bookmark: You must specify the bookmark name")
3422 elif len(args)==1:
3421 elif len(args)==1:
3423 bkms[args[0]] = os.getcwdu()
3422 bkms[args[0]] = os.getcwdu()
3424 elif len(args)==2:
3423 elif len(args)==2:
3425 bkms[args[0]] = args[1]
3424 bkms[args[0]] = args[1]
3426 self.shell.db['bookmarks'] = bkms
3425 self.shell.db['bookmarks'] = bkms
3427
3426
3428 @line_magic
3427 @line_magic
3429 def pycat(self, parameter_s=''):
3428 def pycat(self, parameter_s=''):
3430 """Show a syntax-highlighted file through a pager.
3429 """Show a syntax-highlighted file through a pager.
3431
3430
3432 This magic is similar to the cat utility, but it will assume the file
3431 This magic is similar to the cat utility, but it will assume the file
3433 to be Python source and will show it with syntax highlighting. """
3432 to be Python source and will show it with syntax highlighting. """
3434
3433
3435 try:
3434 try:
3436 filename = get_py_filename(parameter_s)
3435 filename = get_py_filename(parameter_s)
3437 cont = file_read(filename)
3436 cont = file_read(filename)
3438 except IOError:
3437 except IOError:
3439 try:
3438 try:
3440 cont = eval(parameter_s, self.shell.user_ns)
3439 cont = eval(parameter_s, self.shell.user_ns)
3441 except NameError:
3440 except NameError:
3442 cont = None
3441 cont = None
3443 if cont is None:
3442 if cont is None:
3444 print "Error: no such file or variable"
3443 print "Error: no such file or variable"
3445 return
3444 return
3446
3445
3447 page.page(self.shell.pycolorize(cont))
3446 page.page(self.shell.pycolorize(cont))
3448
3447
3449
3448
3450 @register_magics
3449 @register_magics
3451 class LoggingMagics(Magics):
3450 class LoggingMagics(Magics):
3452 """Magics related to all logging machinery."""
3451 """Magics related to all logging machinery."""
3453
3452
3454 @line_magic
3453 @line_magic
3455 def logstart(self, parameter_s=''):
3454 def logstart(self, parameter_s=''):
3456 """Start logging anywhere in a session.
3455 """Start logging anywhere in a session.
3457
3456
3458 %logstart [-o|-r|-t] [log_name [log_mode]]
3457 %logstart [-o|-r|-t] [log_name [log_mode]]
3459
3458
3460 If no name is given, it defaults to a file named 'ipython_log.py' in your
3459 If no name is given, it defaults to a file named 'ipython_log.py' in your
3461 current directory, in 'rotate' mode (see below).
3460 current directory, in 'rotate' mode (see below).
3462
3461
3463 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
3462 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
3464 history up to that point and then continues logging.
3463 history up to that point and then continues logging.
3465
3464
3466 %logstart takes a second optional parameter: logging mode. This can be one
3465 %logstart takes a second optional parameter: logging mode. This can be one
3467 of (note that the modes are given unquoted):\\
3466 of (note that the modes are given unquoted):\\
3468 append: well, that says it.\\
3467 append: well, that says it.\\
3469 backup: rename (if exists) to name~ and start name.\\
3468 backup: rename (if exists) to name~ and start name.\\
3470 global: single logfile in your home dir, appended to.\\
3469 global: single logfile in your home dir, appended to.\\
3471 over : overwrite existing log.\\
3470 over : overwrite existing log.\\
3472 rotate: create rotating logs name.1~, name.2~, etc.
3471 rotate: create rotating logs name.1~, name.2~, etc.
3473
3472
3474 Options:
3473 Options:
3475
3474
3476 -o: log also IPython's output. In this mode, all commands which
3475 -o: log also IPython's output. In this mode, all commands which
3477 generate an Out[NN] prompt are recorded to the logfile, right after
3476 generate an Out[NN] prompt are recorded to the logfile, right after
3478 their corresponding input line. The output lines are always
3477 their corresponding input line. The output lines are always
3479 prepended with a '#[Out]# ' marker, so that the log remains valid
3478 prepended with a '#[Out]# ' marker, so that the log remains valid
3480 Python code.
3479 Python code.
3481
3480
3482 Since this marker is always the same, filtering only the output from
3481 Since this marker is always the same, filtering only the output from
3483 a log is very easy, using for example a simple awk call::
3482 a log is very easy, using for example a simple awk call::
3484
3483
3485 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
3484 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
3486
3485
3487 -r: log 'raw' input. Normally, IPython's logs contain the processed
3486 -r: log 'raw' input. Normally, IPython's logs contain the processed
3488 input, so that user lines are logged in their final form, converted
3487 input, so that user lines are logged in their final form, converted
3489 into valid Python. For example, %Exit is logged as
3488 into valid Python. For example, %Exit is logged as
3490 _ip.magic("Exit"). If the -r flag is given, all input is logged
3489 _ip.magic("Exit"). If the -r flag is given, all input is logged
3491 exactly as typed, with no transformations applied.
3490 exactly as typed, with no transformations applied.
3492
3491
3493 -t: put timestamps before each input line logged (these are put in
3492 -t: put timestamps before each input line logged (these are put in
3494 comments)."""
3493 comments)."""
3495
3494
3496 opts,par = self.parse_options(parameter_s,'ort')
3495 opts,par = self.parse_options(parameter_s,'ort')
3497 log_output = 'o' in opts
3496 log_output = 'o' in opts
3498 log_raw_input = 'r' in opts
3497 log_raw_input = 'r' in opts
3499 timestamp = 't' in opts
3498 timestamp = 't' in opts
3500
3499
3501 logger = self.shell.logger
3500 logger = self.shell.logger
3502
3501
3503 # if no args are given, the defaults set in the logger constructor by
3502 # if no args are given, the defaults set in the logger constructor by
3504 # ipython remain valid
3503 # ipython remain valid
3505 if par:
3504 if par:
3506 try:
3505 try:
3507 logfname,logmode = par.split()
3506 logfname,logmode = par.split()
3508 except:
3507 except:
3509 logfname = par
3508 logfname = par
3510 logmode = 'backup'
3509 logmode = 'backup'
3511 else:
3510 else:
3512 logfname = logger.logfname
3511 logfname = logger.logfname
3513 logmode = logger.logmode
3512 logmode = logger.logmode
3514 # put logfname into rc struct as if it had been called on the command
3513 # put logfname into rc struct as if it had been called on the command
3515 # line, so it ends up saved in the log header Save it in case we need
3514 # line, so it ends up saved in the log header Save it in case we need
3516 # to restore it...
3515 # to restore it...
3517 old_logfile = self.shell.logfile
3516 old_logfile = self.shell.logfile
3518 if logfname:
3517 if logfname:
3519 logfname = os.path.expanduser(logfname)
3518 logfname = os.path.expanduser(logfname)
3520 self.shell.logfile = logfname
3519 self.shell.logfile = logfname
3521
3520
3522 loghead = '# IPython log file\n\n'
3521 loghead = '# IPython log file\n\n'
3523 try:
3522 try:
3524 logger.logstart(logfname, loghead, logmode, log_output, timestamp,
3523 logger.logstart(logfname, loghead, logmode, log_output, timestamp,
3525 log_raw_input)
3524 log_raw_input)
3526 except:
3525 except:
3527 self.shell.logfile = old_logfile
3526 self.shell.logfile = old_logfile
3528 warn("Couldn't start log: %s" % sys.exc_info()[1])
3527 warn("Couldn't start log: %s" % sys.exc_info()[1])
3529 else:
3528 else:
3530 # log input history up to this point, optionally interleaving
3529 # log input history up to this point, optionally interleaving
3531 # output if requested
3530 # output if requested
3532
3531
3533 if timestamp:
3532 if timestamp:
3534 # disable timestamping for the previous history, since we've
3533 # disable timestamping for the previous history, since we've
3535 # lost those already (no time machine here).
3534 # lost those already (no time machine here).
3536 logger.timestamp = False
3535 logger.timestamp = False
3537
3536
3538 if log_raw_input:
3537 if log_raw_input:
3539 input_hist = self.shell.history_manager.input_hist_raw
3538 input_hist = self.shell.history_manager.input_hist_raw
3540 else:
3539 else:
3541 input_hist = self.shell.history_manager.input_hist_parsed
3540 input_hist = self.shell.history_manager.input_hist_parsed
3542
3541
3543 if log_output:
3542 if log_output:
3544 log_write = logger.log_write
3543 log_write = logger.log_write
3545 output_hist = self.shell.history_manager.output_hist
3544 output_hist = self.shell.history_manager.output_hist
3546 for n in range(1,len(input_hist)-1):
3545 for n in range(1,len(input_hist)-1):
3547 log_write(input_hist[n].rstrip() + '\n')
3546 log_write(input_hist[n].rstrip() + '\n')
3548 if n in output_hist:
3547 if n in output_hist:
3549 log_write(repr(output_hist[n]),'output')
3548 log_write(repr(output_hist[n]),'output')
3550 else:
3549 else:
3551 logger.log_write('\n'.join(input_hist[1:]))
3550 logger.log_write('\n'.join(input_hist[1:]))
3552 logger.log_write('\n')
3551 logger.log_write('\n')
3553 if timestamp:
3552 if timestamp:
3554 # re-enable timestamping
3553 # re-enable timestamping
3555 logger.timestamp = True
3554 logger.timestamp = True
3556
3555
3557 print ('Activating auto-logging. '
3556 print ('Activating auto-logging. '
3558 'Current session state plus future input saved.')
3557 'Current session state plus future input saved.')
3559 logger.logstate()
3558 logger.logstate()
3560
3559
3561 @line_magic
3560 @line_magic
3562 def logstop(self, parameter_s=''):
3561 def logstop(self, parameter_s=''):
3563 """Fully stop logging and close log file.
3562 """Fully stop logging and close log file.
3564
3563
3565 In order to start logging again, a new %logstart call needs to be made,
3564 In order to start logging again, a new %logstart call needs to be made,
3566 possibly (though not necessarily) with a new filename, mode and other
3565 possibly (though not necessarily) with a new filename, mode and other
3567 options."""
3566 options."""
3568 self.logger.logstop()
3567 self.logger.logstop()
3569
3568
3570 @line_magic
3569 @line_magic
3571 def logoff(self, parameter_s=''):
3570 def logoff(self, parameter_s=''):
3572 """Temporarily stop logging.
3571 """Temporarily stop logging.
3573
3572
3574 You must have previously started logging."""
3573 You must have previously started logging."""
3575 self.shell.logger.switch_log(0)
3574 self.shell.logger.switch_log(0)
3576
3575
3577 @line_magic
3576 @line_magic
3578 def logon(self, parameter_s=''):
3577 def logon(self, parameter_s=''):
3579 """Restart logging.
3578 """Restart logging.
3580
3579
3581 This function is for restarting logging which you've temporarily
3580 This function is for restarting logging which you've temporarily
3582 stopped with %logoff. For starting logging for the first time, you
3581 stopped with %logoff. For starting logging for the first time, you
3583 must use the %logstart function, which allows you to specify an
3582 must use the %logstart function, which allows you to specify an
3584 optional log filename."""
3583 optional log filename."""
3585
3584
3586 self.shell.logger.switch_log(1)
3585 self.shell.logger.switch_log(1)
3587
3586
3588 @line_magic
3587 @line_magic
3589 def logstate(self, parameter_s=''):
3588 def logstate(self, parameter_s=''):
3590 """Print the status of the logging system."""
3589 """Print the status of the logging system."""
3591
3590
3592 self.shell.logger.logstate()
3591 self.shell.logger.logstate()
3593
3592
3594
3593
3595 @register_magics
3594 @register_magics
3596 class ExtensionsMagics(Magics):
3595 class ExtensionsMagics(Magics):
3597 """Magics to manage the IPython extensions system."""
3596 """Magics to manage the IPython extensions system."""
3598
3597
3599 @line_magic
3598 @line_magic
3600 def install_ext(self, parameter_s=''):
3599 def install_ext(self, parameter_s=''):
3601 """Download and install an extension from a URL, e.g.::
3600 """Download and install an extension from a URL, e.g.::
3602
3601
3603 %install_ext https://bitbucket.org/birkenfeld/ipython-physics/raw/d1310a2ab15d/physics.py
3602 %install_ext https://bitbucket.org/birkenfeld/ipython-physics/raw/d1310a2ab15d/physics.py
3604
3603
3605 The URL should point to an importable Python module - either a .py file
3604 The URL should point to an importable Python module - either a .py file
3606 or a .zip file.
3605 or a .zip file.
3607
3606
3608 Parameters:
3607 Parameters:
3609
3608
3610 -n filename : Specify a name for the file, rather than taking it from
3609 -n filename : Specify a name for the file, rather than taking it from
3611 the URL.
3610 the URL.
3612 """
3611 """
3613 opts, args = self.parse_options(parameter_s, 'n:')
3612 opts, args = self.parse_options(parameter_s, 'n:')
3614 try:
3613 try:
3615 filename = self.shell.extension_manager.install_extension(args,
3614 filename = self.shell.extension_manager.install_extension(args,
3616 opts.get('n'))
3615 opts.get('n'))
3617 except ValueError as e:
3616 except ValueError as e:
3618 print e
3617 print e
3619 return
3618 return
3620
3619
3621 filename = os.path.basename(filename)
3620 filename = os.path.basename(filename)
3622 print "Installed %s. To use it, type:" % filename
3621 print "Installed %s. To use it, type:" % filename
3623 print " %%load_ext %s" % os.path.splitext(filename)[0]
3622 print " %%load_ext %s" % os.path.splitext(filename)[0]
3624
3623
3625
3624
3626 @line_magic
3625 @line_magic
3627 def load_ext(self, module_str):
3626 def load_ext(self, module_str):
3628 """Load an IPython extension by its module name."""
3627 """Load an IPython extension by its module name."""
3629 return self.shell.extension_manager.load_extension(module_str)
3628 return self.shell.extension_manager.load_extension(module_str)
3630
3629
3631 @line_magic
3630 @line_magic
3632 def unload_ext(self, module_str):
3631 def unload_ext(self, module_str):
3633 """Unload an IPython extension by its module name."""
3632 """Unload an IPython extension by its module name."""
3634 self.shell.extension_manager.unload_extension(module_str)
3633 self.shell.extension_manager.unload_extension(module_str)
3635
3634
3636 @line_magic
3635 @line_magic
3637 def reload_ext(self, module_str):
3636 def reload_ext(self, module_str):
3638 """Reload an IPython extension by its module name."""
3637 """Reload an IPython extension by its module name."""
3639 self.shell.extension_manager.reload_extension(module_str)
3638 self.shell.extension_manager.reload_extension(module_str)
3640
3639
3641
3640
3642 @register_magics
3641 @register_magics
3643 class PylabMagics(Magics):
3642 class PylabMagics(Magics):
3644 """Magics related to matplotlib's pylab support"""
3643 """Magics related to matplotlib's pylab support"""
3645
3644
3646 @skip_doctest
3645 @skip_doctest
3647 @line_magic
3646 @line_magic
3648 def pylab(self, parameter_s=''):
3647 def pylab(self, parameter_s=''):
3649 """Load numpy and matplotlib to work interactively.
3648 """Load numpy and matplotlib to work interactively.
3650
3649
3651 %pylab [GUINAME]
3650 %pylab [GUINAME]
3652
3651
3653 This function lets you activate pylab (matplotlib, numpy and
3652 This function lets you activate pylab (matplotlib, numpy and
3654 interactive support) at any point during an IPython session.
3653 interactive support) at any point during an IPython session.
3655
3654
3656 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3655 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3657 pylab and mlab, as well as all names from numpy and pylab.
3656 pylab and mlab, as well as all names from numpy and pylab.
3658
3657
3659 If you are using the inline matplotlib backend for embedded figures,
3658 If you are using the inline matplotlib backend for embedded figures,
3660 you can adjust its behavior via the %config magic::
3659 you can adjust its behavior via the %config magic::
3661
3660
3662 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3661 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3663 In [1]: %config InlineBackend.figure_format = 'svg'
3662 In [1]: %config InlineBackend.figure_format = 'svg'
3664
3663
3665 # change the behavior of closing all figures at the end of each
3664 # change the behavior of closing all figures at the end of each
3666 # execution (cell), or allowing reuse of active figures across
3665 # execution (cell), or allowing reuse of active figures across
3667 # cells:
3666 # cells:
3668 In [2]: %config InlineBackend.close_figures = False
3667 In [2]: %config InlineBackend.close_figures = False
3669
3668
3670 Parameters
3669 Parameters
3671 ----------
3670 ----------
3672 guiname : optional
3671 guiname : optional
3673 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk',
3672 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk',
3674 'osx' or 'tk'). If given, the corresponding Matplotlib backend is
3673 'osx' or 'tk'). If given, the corresponding Matplotlib backend is
3675 used, otherwise matplotlib's default (which you can override in your
3674 used, otherwise matplotlib's default (which you can override in your
3676 matplotlib config file) is used.
3675 matplotlib config file) is used.
3677
3676
3678 Examples
3677 Examples
3679 --------
3678 --------
3680 In this case, where the MPL default is TkAgg::
3679 In this case, where the MPL default is TkAgg::
3681
3680
3682 In [2]: %pylab
3681 In [2]: %pylab
3683
3682
3684 Welcome to pylab, a matplotlib-based Python environment.
3683 Welcome to pylab, a matplotlib-based Python environment.
3685 Backend in use: TkAgg
3684 Backend in use: TkAgg
3686 For more information, type 'help(pylab)'.
3685 For more information, type 'help(pylab)'.
3687
3686
3688 But you can explicitly request a different backend::
3687 But you can explicitly request a different backend::
3689
3688
3690 In [3]: %pylab qt
3689 In [3]: %pylab qt
3691
3690
3692 Welcome to pylab, a matplotlib-based Python environment.
3691 Welcome to pylab, a matplotlib-based Python environment.
3693 Backend in use: Qt4Agg
3692 Backend in use: Qt4Agg
3694 For more information, type 'help(pylab)'.
3693 For more information, type 'help(pylab)'.
3695 """
3694 """
3696
3695
3697 if Application.initialized():
3696 if Application.initialized():
3698 app = Application.instance()
3697 app = Application.instance()
3699 try:
3698 try:
3700 import_all_status = app.pylab_import_all
3699 import_all_status = app.pylab_import_all
3701 except AttributeError:
3700 except AttributeError:
3702 import_all_status = True
3701 import_all_status = True
3703 else:
3702 else:
3704 import_all_status = True
3703 import_all_status = True
3705
3704
3706 self.shell.enable_pylab(parameter_s, import_all=import_all_status)
3705 self.shell.enable_pylab(parameter_s, import_all=import_all_status)
3707
3706
3708
3707
3709 @register_magics
3708 @register_magics
3710 class DeprecatedMagics(Magics):
3709 class DeprecatedMagics(Magics):
3711 """Magics slated for later removal."""
3710 """Magics slated for later removal."""
3712
3711
3713 @line_magic
3712 @line_magic
3714 def install_profiles(self, parameter_s=''):
3713 def install_profiles(self, parameter_s=''):
3715 """%install_profiles has been deprecated."""
3714 """%install_profiles has been deprecated."""
3716 print '\n'.join([
3715 print '\n'.join([
3717 "%install_profiles has been deprecated.",
3716 "%install_profiles has been deprecated.",
3718 "Use `ipython profile list` to view available profiles.",
3717 "Use `ipython profile list` to view available profiles.",
3719 "Requesting a profile with `ipython profile create <name>`",
3718 "Requesting a profile with `ipython profile create <name>`",
3720 "or `ipython --profile=<name>` will start with the bundled",
3719 "or `ipython --profile=<name>` will start with the bundled",
3721 "profile of that name if it exists."
3720 "profile of that name if it exists."
3722 ])
3721 ])
3723
3722
3724 @line_magic
3723 @line_magic
3725 def install_default_config(self, parameter_s=''):
3724 def install_default_config(self, parameter_s=''):
3726 """%install_default_config has been deprecated."""
3725 """%install_default_config has been deprecated."""
3727 print '\n'.join([
3726 print '\n'.join([
3728 "%install_default_config has been deprecated.",
3727 "%install_default_config has been deprecated.",
3729 "Use `ipython profile create <name>` to initialize a profile",
3728 "Use `ipython profile create <name>` to initialize a profile",
3730 "with the default config files.",
3729 "with the default config files.",
3731 "Add `--reset` to overwrite already existing config files with defaults."
3730 "Add `--reset` to overwrite already existing config files with defaults."
3732 ])
3731 ])
General Comments 0
You need to be logged in to leave comments. Login now