Show More
@@ -181,7 +181,6 b' def quick_completer(cmd, completions):' | |||
|
181 | 181 | |
|
182 | 182 | get_ipython().set_hook('complete_command',do_complete, str_key = cmd) |
|
183 | 183 | |
|
184 | ||
|
185 | 184 | def module_completion(line): |
|
186 | 185 | """ |
|
187 | 186 | Returns a list containing the completion possibilities for an import line. |
@@ -316,3 +315,7 b' def cd_completer(self, event):' | |||
|
316 | 315 | raise TryNext |
|
317 | 316 | |
|
318 | 317 | return [compress_user(p, tilde_expand, tilde_val) for p in found] |
|
318 | ||
|
319 | def reset_completer(self, event): | |
|
320 | "A completer for %reset magic" | |
|
321 | return '-f -s in out array dhist'.split() |
@@ -1840,7 +1840,7 b' class InteractiveShell(SingletonConfigurable, Magic):' | |||
|
1840 | 1840 | """ |
|
1841 | 1841 | from IPython.core.completer import IPCompleter |
|
1842 | 1842 | from IPython.core.completerlib import (module_completer, |
|
1843 |
|
|
|
1843 | magic_run_completer, cd_completer, reset_completer) | |
|
1844 | 1844 | |
|
1845 | 1845 | self.Completer = IPCompleter(shell=self, |
|
1846 | 1846 | namespace=self.user_ns, |
@@ -1860,6 +1860,7 b' class InteractiveShell(SingletonConfigurable, Magic):' | |||
|
1860 | 1860 | self.set_hook('complete_command', module_completer, str_key = 'from') |
|
1861 | 1861 | self.set_hook('complete_command', magic_run_completer, str_key = '%run') |
|
1862 | 1862 | self.set_hook('complete_command', cd_completer, str_key = '%cd') |
|
1863 | self.set_hook('complete_command', reset_completer, str_key = '%reset') | |
|
1863 | 1864 | |
|
1864 | 1865 | # Only configure readline if we truly are using readline. IPython can |
|
1865 | 1866 | # do tab-completion over the network, in GUIs, etc, where readline |
@@ -25,6 +25,7 b' import sys' | |||
|
25 | 25 | import shutil |
|
26 | 26 | import re |
|
27 | 27 | import time |
|
28 | import gc | |
|
28 | 29 | from StringIO import StringIO |
|
29 | 30 | from getopt import getopt,GetoptError |
|
30 | 31 | from pprint import pformat |
@@ -959,16 +960,31 b' Currently the magic system has the following functions:\\n"""' | |||
|
959 | 960 | print vstr[:25] + "<...>" + vstr[-25:] |
|
960 | 961 | |
|
961 | 962 | def magic_reset(self, parameter_s=''): |
|
962 |
"""Resets the namespace by removing all names defined by the user |
|
|
963 | """Resets the namespace by removing all names defined by the user, if | |
|
964 | called without arguments, or by removing some types of objects, such | |
|
965 | as everything currently in IPython's In[] and Out[] containers (see | |
|
966 | the parameters for details). | |
|
963 | 967 | |
|
964 | 968 | Parameters |
|
965 | 969 | ---------- |
|
966 |
|
|
|
970 | -f : force reset without asking for confirmation. | |
|
971 | ||
|
972 | -s : 'Soft' reset: Only clears your namespace, leaving history intact. | |
|
973 | References to objects may be kept. By default (without this option), | |
|
974 | we do a 'hard' reset, giving you a new session and removing all | |
|
975 | references to objects from the current session. | |
|
976 | ||
|
977 | in : reset input history | |
|
978 | ||
|
979 | out : reset output history | |
|
980 | ||
|
981 | dhist : reset directory history | |
|
982 | ||
|
983 | array : reset only variables that are NumPy arrays | |
|
967 | 984 | |
|
968 | -s : 'Soft' reset: Only clears your namespace, leaving history intact. | |
|
969 | References to objects may be kept. By default (without this option), | |
|
970 | we do a 'hard' reset, giving you a new session and removing all | |
|
971 | references to objects from the current session. | |
|
985 | See Also | |
|
986 | -------- | |
|
987 | %reset_selective | |
|
972 | 988 | |
|
973 | 989 | Examples |
|
974 | 990 | -------- |
@@ -985,13 +1001,20 b' Currently the magic system has the following functions:\\n"""' | |||
|
985 | 1001 | In [1]: 'a' in _ip.user_ns |
|
986 | 1002 | Out[1]: False |
|
987 | 1003 | |
|
1004 | In [2]: %reset -f in | |
|
1005 | Flushing input history | |
|
1006 | ||
|
1007 | In [3]: %reset -f dhist in | |
|
1008 | Flushing directory history | |
|
1009 | Flushing input history | |
|
1010 | ||
|
988 | 1011 | Notes |
|
989 | 1012 | ----- |
|
990 | 1013 | Calling this magic from clients that do not implement standard input, |
|
991 | 1014 | such as the ipython notebook interface, will reset the namespace |
|
992 | 1015 | without confirmation. |
|
993 | 1016 | """ |
|
994 | opts, args = self.parse_options(parameter_s,'sf') | |
|
1017 | opts, args = self.parse_options(parameter_s,'sf', mode='list') | |
|
995 | 1018 | if 'f' in opts: |
|
996 | 1019 | ans = True |
|
997 | 1020 | else: |
@@ -1008,11 +1031,55 b' Currently the magic system has the following functions:\\n"""' | |||
|
1008 | 1031 | user_ns = self.shell.user_ns |
|
1009 | 1032 | for i in self.magic_who_ls(): |
|
1010 | 1033 | del(user_ns[i]) |
|
1011 | ||
|
1012 | else: # Hard reset | |
|
1034 | elif len(args) == 0: # Hard reset | |
|
1013 | 1035 | self.shell.reset(new_session = False) |
|
1036 | ||
|
1037 | # reset in/out/dhist/array: previously extensinions/clearcmd.py | |
|
1038 | ip = self.shell | |
|
1039 | user_ns = self.user_ns # local lookup, heavily used | |
|
1040 | ||
|
1041 | for target in args: | |
|
1042 | target = target.lower() # make matches case insensitive | |
|
1043 | if target == 'out': | |
|
1044 | print "Flushing output cache (%d entries)" % len(user_ns['_oh']) | |
|
1045 | self.displayhook.flush() | |
|
1046 | ||
|
1047 | elif target == 'in': | |
|
1048 | print "Flushing input history" | |
|
1049 | pc = self.displayhook.prompt_count + 1 | |
|
1050 | for n in range(1, pc): | |
|
1051 | key = '_i'+repr(n) | |
|
1052 | user_ns.pop(key,None) | |
|
1053 | user_ns.update(dict(_i=u'',_ii=u'',_iii=u'')) | |
|
1054 | hm = ip.history_manager | |
|
1055 | # don't delete these, as %save and %macro depending on the length | |
|
1056 | # of these lists to be preserved | |
|
1057 | hm.input_hist_parsed[:] = [''] * pc | |
|
1058 | hm.input_hist_raw[:] = [''] * pc | |
|
1059 | # hm has internal machinery for _i,_ii,_iii, clear it out | |
|
1060 | hm._i = hm._ii = hm._iii = hm._i00 = u'' | |
|
1061 | ||
|
1062 | elif target == 'array': | |
|
1063 | # Support cleaning up numpy arrays | |
|
1064 | try: | |
|
1065 | from numpy import ndarray | |
|
1066 | # This must be done with items and not iteritems because we're | |
|
1067 | # going to modify the dict in-place. | |
|
1068 | for x,val in user_ns.items(): | |
|
1069 | if isinstance(val,ndarray): | |
|
1070 | del user_ns[x] | |
|
1071 | except ImportError: | |
|
1072 | print "reset array only works if Numpy is available." | |
|
1073 | ||
|
1074 | elif target == 'dhist': | |
|
1075 | print "Flushing directory history" | |
|
1076 | del user_ns['_dh'][:] | |
|
1014 | 1077 | |
|
1078 | else: | |
|
1079 | print "Don't know how to reset ", | |
|
1080 | print target + ", please run `%reset?` for details" | |
|
1015 | 1081 | |
|
1082 | gc.collect() | |
|
1016 | 1083 | |
|
1017 | 1084 | def magic_reset_selective(self, parameter_s=''): |
|
1018 | 1085 | """Resets the namespace by removing names defined by the user. |
@@ -1026,6 +1093,10 b' Currently the magic system has the following functions:\\n"""' | |||
|
1026 | 1093 | Options |
|
1027 | 1094 | -f : force reset without asking for confirmation. |
|
1028 | 1095 | |
|
1096 | See Also | |
|
1097 | -------- | |
|
1098 | %reset | |
|
1099 | ||
|
1029 | 1100 | Examples |
|
1030 | 1101 | -------- |
|
1031 | 1102 |
@@ -183,20 +183,50 b' def test_macro_run():' | |||
|
183 | 183 | with tt.AssertPrints("13"): |
|
184 | 184 | ip.run_cell("test") |
|
185 | 185 | |
|
186 | ||
|
187 | # XXX failing for now, until we get clearcmd out of quarantine. But we should | |
|
188 | # fix this and revert the skip to happen only if numpy is not around. | |
|
189 | #@dec.skipif_not_numpy | |
|
190 | @dec.skip_known_failure | |
|
191 | def test_numpy_clear_array_undec(): | |
|
192 | from IPython.extensions import clearcmd | |
|
193 | 186 | |
|
187 | @dec.skipif_not_numpy | |
|
188 | def test_numpy_reset_array_undec(): | |
|
189 | "Test '%reset array' functionality" | |
|
194 | 190 | _ip.ex('import numpy as np') |
|
195 | 191 | _ip.ex('a = np.empty(2)') |
|
196 | 192 | yield (nt.assert_true, 'a' in _ip.user_ns) |
|
197 |
_ip.magic(' |
|
|
193 | _ip.magic('reset -f array') | |
|
198 | 194 | yield (nt.assert_false, 'a' in _ip.user_ns) |
|
199 | ||
|
195 | ||
|
196 | def test_reset_out(): | |
|
197 | "Test '%reset out' magic" | |
|
198 | _ip.run_cell("parrot = 'dead'", store_history=True) | |
|
199 | # test '%reset -f out', make an Out prompt | |
|
200 | _ip.run_cell("parrot", store_history=True) | |
|
201 | nt.assert_true('dead' in [_ip.user_ns[x] for x in '_','__','___']) | |
|
202 | _ip.magic('reset -f out') | |
|
203 | nt.assert_false('dead' in [_ip.user_ns[x] for x in '_','__','___']) | |
|
204 | nt.assert_true(len(_ip.user_ns['Out']) == 0) | |
|
205 | ||
|
206 | def test_reset_in(): | |
|
207 | "Test '%reset in' magic" | |
|
208 | # test '%reset -f in' | |
|
209 | _ip.run_cell("parrot", store_history=True) | |
|
210 | nt.assert_true('parrot' in [_ip.user_ns[x] for x in '_i','_ii','_iii']) | |
|
211 | _ip.magic('%reset -f in') | |
|
212 | nt.assert_false('parrot' in [_ip.user_ns[x] for x in '_i','_ii','_iii']) | |
|
213 | nt.assert_true(len(set(_ip.user_ns['In'])) == 1) | |
|
214 | ||
|
215 | def test_reset_dhist(): | |
|
216 | "Test '%reset dhist' magic" | |
|
217 | _ip.run_cell("tmp = [d for d in _dh]") # copy before clearing | |
|
218 | _ip.magic('cd ' + os.path.dirname(nt.__file__)) | |
|
219 | _ip.magic('cd -') | |
|
220 | nt.assert_true(len(_ip.user_ns['_dh']) > 0) | |
|
221 | _ip.magic('reset -f dhist') | |
|
222 | nt.assert_true(len(_ip.user_ns['_dh']) == 0) | |
|
223 | _ip.run_cell("_dh = [d for d in tmp]") #restore | |
|
224 | ||
|
225 | def test_reset_in_length(): | |
|
226 | "Test that '%reset in' preserves In[] length" | |
|
227 | _ip.run_cell("print 'foo'") | |
|
228 | _ip.run_cell("reset -f in") | |
|
229 | nt.assert_true(len(_ip.user_ns['In']) == _ip.displayhook.prompt_count+1) | |
|
200 | 230 | |
|
201 | 231 | def test_time(): |
|
202 | 232 | _ip.magic('time None') |
@@ -116,8 +116,6 b" def jot_obj(self, obj, name, comment=''):" | |||
|
116 | 116 | |
|
117 | 117 | uname = 'jot/'+name+suffix |
|
118 | 118 | |
|
119 | # which one works better? | |
|
120 | #all = ip.shadowhist.all() | |
|
121 | 119 | all = ip.shell.history_manager.input_hist_parsed |
|
122 | 120 | |
|
123 | 121 | # We may actually want to make snapshot of files that are run-ned. |
|
1 | NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now