[IPython-dev] weird bug -- any ideas
Fernando Perez
Fernando.Perez at berkeley.edu
Mon Nov 16 06:28:54 EST 2009
On Mon, Nov 16, 2009 at 2:31 AM, Fernando Perez
<Fernando.Perez at berkeley.edu> wrote:
> The fact that Ctrl-C cleanly stops the crazy loop *without* a
> KeyboardInterrupt makes me think that ipython is trying to introspect
> the MS object and some C code is going into a mad loop (otherwise we'd
> see the Python signal handler showing a traceback). Do you have any
> other bugs related to this type of object that sound along those
> lines?
Half-right. IPython is swallowing the kbd interrupt, but the bug is in
sage, it's the fact that len(MS) never returns:
sage: MS = MatrixSpace(QQ,6,6,sparse=True); MS
Full MatrixSpace of 6 by 6 sparse matrices over Rational Field
sage: len(MS)
^C---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
/home/fperez/ipython/repo/kernel-config-lp/docs/<ipython console> in <module>()
/opt/sage/local/lib/python2.6/site-packages/sage/structure/parent.so
in sage.structure.parent.Parent.__len__
(sage/structure/parent.c:5533)()
/opt/sage/local/lib/python2.6/site-packages/sage/structure/parent.so
in sage.structure.parent.Parent.list (sage/structure/parent.c:4995)()
/opt/sage/local/lib/python2.6/site-packages/sage/matrix/matrix_space.pyc
in __iter__(self)
751 while True:
752 for iv in
sage.combinat.integer_vector.IntegerVectors(weight,
number_of_entries):
--> 753 yield self(entries=[base_elements[i] for i
in iv], rows=True)
754
755 weight += 1
/opt/sage/local/lib/python2.6/site-packages/sage/matrix/matrix_space.pyc
in __call__(self, entries, coerce, copy, rows)
371 copy = False
372 elif self.__is_sparse and isinstance(entries, (list, tuple)):
--> 373 entries = list_to_dict(entries, self.__nrows,
self.__ncols, rows=rows)
374 coerce = True
375 copy = False
/opt/sage/local/lib/python2.6/site-packages/sage/matrix/matrix_space.pyc
in list_to_dict(entries, nrows, ncols, rows)
1240 d[(row,col)] = x
1241 else:
-> 1242 d[(col,row)] = x
1243 return d
1244
/opt/sage/local/lib/python2.6/site-packages/sage/interfaces/get_sigs.pyc
in my_sigint(x, n)
7
8 def my_sigint(x, n):
----> 9 raise KeyboardInterrupt
10
11 def my_sigfpe(x, n):
KeyboardInterrupt:
It seems that the ms object implements __len__, but this function
never returns. It's just that ipython was calling len() on it.
Cheers,
f
More information about the IPython-dev
mailing list