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