Ticket #7449 (closed defect: fixed)
Some doc request hangs sage eating all memory
| Reported by: | hivert | Owned by: | mvngu |
|---|---|---|---|
| Priority: | major | Milestone: | sage-4.3 |
| Component: | documentation | Keywords: | doc |
| Cc: | hivert, nthiery | Work issues: | |
| Report Upstream: | N/A | Reviewers: | Florent Hivert |
| Authors: | William Stein | Merged in: | sage-4.3.alpha0 |
| Dependencies: | Stopgaps: |
Description
If I type
sage: MS = MatrixSpace(QQ,6,6,sparse=True); MS Full MatrixSpace of 6 by 6 sparse matrices over Rational Field sage: MS?
Then sage hangs eating all the memory. I don't have the less idea why it happens with MatrixSpace. I didn't try very hard but I can't manage any other request with the same effect. I checked that this is not a problem of installation on my computer: It happens as well on boxen. Though, on the contrary to my own computer, I didn't check that it effectively eat all the memory on boxen ;-)
Cheers,
Florent
Attachments
Change History
comment:2 in reply to: ↑ 1 Changed 4 years ago by hivert
Replying to was:
I can confirm this bug on the command line. However, not interestingly that it does *not* happen in the Sage notebook. So it is an Ipython bug.
So what should we do ? Try to figure out a smaller file that triggers the problem and report to the ipython community ? I've no idea how to debug ipython. Any better suggestion ?
comment:3 follow-up: ↓ 5 Changed 4 years ago by was
Fernando Perez solved the problem:
On Mon, Nov 16, 2009 at 2:31 AM, Fernando Perez
<> 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
comment:4 Changed 4 years ago by was
- Status changed from new to needs_review
- Milestone set to sage-4.3
comment:5 in reply to: ↑ 3 Changed 4 years ago by hivert
- Cc hivert, nthiery added
- Reviewers set to Florent Hivert
- Status changed from needs_review to positive_review
Replying to was:
It seems that the ms object implements len, but this function never returns. It's just that ipython was calling len() on it.
Good remark ! This indicate that there should be a generic test in the base category Objects() checking that for the current object __len__ is either not defined either returns a correct int object or else raise an exception. Any other behavior (loop, returning a sage Integer or any fancy object should be reported as an error).
Those bugs seems therefore catchable by TestSuite if the object correctly inherits from the good category. I'll try it.
Otherwise positive review.
Cheers,
Florent


I can confirm this bug on the command line. However, not interestingly that it does *not* happen in the Sage notebook. So it is an Ipython bug.
http://wstein.org/home/wstein/patches/trac_7449.png