#18897: Memory leak in eigenvalues method
-----------------------+----------------------------
   Reporter:  slabbe   |            Owner:
       Type:  defect   |           Status:  new
   Priority:  major    |        Milestone:  sage-6.8
  Component:  memleak  |         Keywords:
  Merged in:           |          Authors:
  Reviewers:           |  Report Upstream:  N/A
Work issues:           |           Branch:
     Commit:           |     Dependencies:
   Stopgaps:           |
-----------------------+----------------------------
 This method, inspired from the code of Nils Bruin posted in the sage-devel
 post [https://groups.google.com/d/msg/sage-devel/Jqi5f60j_lY/M7esZcJliZoJ
 Memory leaks on matrix creation?], shows some leak in the eigenvalues
 method for 4x4 and 5x5 integer matrices. Examples are below.

 {{{
 #!python
 def test(L, dim):
     import gc
     from collections import Counter
     gc.collect()
     pre={id(c) for c in gc.get_objects()}
     for _ in range(100):
         matrix(dim, L).eigenvalues()
     gc.collect()
     post=Counter(type(o) for o in gc.get_objects() if id(o) not in pre)
     return [(k,v) for (k,v) in post.iteritems() if v>10]
 }}}

 An example with no leak::
 {{{
 #!python
     sage: L = [1,0,0,1,0,0,1,1,0,0,0,1,2,0,0,1,0,0,2,0,0,0,0,0,1]
     sage: test(L, 5)
     []
 }}}
 Five forgotten polynomials::
 {{{
 #!python
     sage: L = [1,1,0,1,0,1,2,1,1,0,0,1,2,0,0,1,1,0,2,0,0,0,0,0,1]
     sage: test(L, 5)
     [(<type 'sage.rings.polynomial.polynomial_compiled.univar_pd'>, 500)]
 }}}
 Twelve forgotten polynomials::

 {{{
 #!python
     sage: L = [0,1,2,0,0,2,1,2,1,1,1,0,1,1,2,1,1,1,2,0,0,2,0,2,0]
     sage: test(L, 5)
     [(<type 'sage.rings.polynomial.polynomial_compiled.univar_pd'>, 1200)]
 }}}
 A 4 by 4 matrix with five forgotten polynomials::
 {{{
 #!python
     sage: L = [0, 2, 0, 2, 2, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
     sage: test(L, 4)
     [(<type 'sage.rings.polynomial.polynomial_compiled.univar_pd'>, 500)]
 }}}

 Random ones::

 {{{
 #!python
     sage: test([randint(0,100) for _ in range(9)], 3)
     []
     sage: test([randint(0,100) for _ in range(16)], 4)
     [(<type 'sage.rings.polynomial.polynomial_compiled.univar_pd'>, 500)]
     sage: test([randint(0,2) for _ in range(25)], 5)
     [(<type 'sage.rings.polynomial.polynomial_compiled.univar_pd'>, 500)]
     sage: test([randint(0,2) for _ in range(25)], 5)
     [(<type 'sage.rings.polynomial.polynomial_compiled.univar_pd'>, 1200)]
     sage: test([randint(0,2) for _ in range(25)], 5)
     []
 }}}

--
Ticket URL: <http://trac.sagemath.org/ticket/18897>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to