mabshoff
unread,Dec 16, 2008, 6:15:17 AM12/16/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to sage-nt
Hello folks,
while chasing a leak you could drive a truck through in sparse linear
matrix multiplication I also poked around the logs for issues in
mwrank and eclib since when testing the point counting code John did
mention some problems with RAM being eaten up. Below are issues from
three different files. None of those has tickets yet, but if anybody
wants to look into this I can open them. I myself won't have time to
work on this probably for a while.
Cheers,
Michael
=======================================================================================
ell_rational_field.py:
Issue: This __dealloc__ method in mwrank.pyx doesn't clean up 100%:
cdef class _mw:
cdef mw* x
cdef Curvedata* curve
def __init__(self, _Curvedata curve, verb=False, pp=1, maxr=999):
self.curve = curve.x
self.x = mw_new(curve.x, verb, pp, maxr)
def __dealloc__(self):
mw_del(self.x)
mw_del in turn is in wrap.cc:
void mw_del(struct mw* m)
{
delete m;
}
Not sure why this leaks, but I have to poke around.
==12261== 28,816 bytes in 2 blocks are possibly lost in loss record
26,368 of 26,668
==12261== at 0x4A1C2F7: operator new[](unsigned long)
(vg_replace_malloc.c:274)
==12261== by 0x1B7873DD: mw::mw(Curvedata*, int, int, int)
(mwprocs.cc:245)
==12261== by 0x21066D28: mw_new (wrap.cc:140)
==12261== by 0x21066850:
__pyx_pf_4sage_4libs_6mwrank_6mwrank_3_mw___init__ (mwrank.c:1756)
==12261== by 0x459350: type_call (typeobject.c:436)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x4CF3F7: function_call (funcobject.c:517)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x4565D7: slot_tp_init (typeobject.c:4943)
==12261== by 0x459350: type_call (typeobject.c:436)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x4CF3F7: function_call (funcobject.c:517)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
Issue: We call
def do_descent(self, _Curvedata curve,
int verb = 1,
int sel = 0,
int firstlim = 20,
int secondlim = 8,
int n_aux = -1,
int second_descent = 1):
_sig_on
self.x = two_descent_new(curve.x, verb, sel, firstlim,
secondlim, n_aux, second_descent)
_sig_off
In this class in mwrank.pyx:
cdef class _two_descent:
cdef two_descent* x
def __init__(self):
self.x = <two_descent*> 0
def __dealloc__(self):
if self.x:
two_descent_del(self.x)
So either two_descent_del is not cleaning something up or we are it
leaking somehow in Cython. This is probably similar to the issue above
in wrap.cc
==12261== 28,816 bytes in 2 blocks are possibly lost in loss record
26,369 of 26,668
==12261== at 0x4A1C2F7: operator new[](unsigned long)
(vg_replace_malloc.c:274)
==12261== by 0x1B7873DD: mw::mw(Curvedata*, int, int, int)
(mwprocs.cc:245)
==12261== by 0x211FEE0C: two_descent::do_the_descent(long, long,
long, int) (descent.cc:104)
==12261== by 0x212000F1: two_descent::two_descent(Curvedata*, int,
int, long, long, long, int) (descent.cc:59)
==12261== by 0x21066C97: two_descent_new (wrap.cc:239)
==12261== by 0x21063AEC:
__pyx_pf_4sage_4libs_6mwrank_6mwrank_12_two_descent_do_descent
(mwrank.c:2704)
==12261== by 0x483E46: PyEval_EvalFrameEx (ceval.c:3573)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==12261== by 0x48491B: PyEval_EvalFrameEx (ceval.c:3659)
==12261== by 0x48491B: PyEval_EvalFrameEx (ceval.c:3659)
==12261== by 0x48491B: PyEval_EvalFrameEx (ceval.c:3659)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x4CF3F7: function_call (funcobject.c:517)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
==12261== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==12261== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==12261== by 0x4CF3F7: function_call (funcobject.c:517)
==12261== by 0x415832: PyObject_Call (abstract.c:1861)
While I am complaining:
/scratch/mabshoff/release-cycle/sage-3.2.2.rc1/devel/sage/sage/libs/
mwrank/mwrank.pyx
ERROR: Please define a s == loads(dumps(s)) doctest.
SCORE /scratch/mabshoff/release-cycle/sage-3.2.2.rc1/devel/sage/sage/
libs/mwrank/mwrank.pyx: 3% (1 of 29)
Missing documentation:
* set_precision(n):
* __init__(self, x="0"):
* __repr__(self):
* __init__(self, a1, a2, a3, a4, a6, min_on_init=0):
* __repr__(self):
* silverman_bound(self):
* cps_bound(self):
* height_constant(self):
* discriminant(self):
* conductor(self):
* isogeny_class(self, verbose=False):
* __init__(self, _Curvedata curve, verb=False, pp=1, maxr=999):
* __repr__(self):
* process(self, point, sat=True):
* getbasis(self):
* regulator(self):
* rank(self):
* saturate(self, int sat_bd=-1, int odd_primes_only=0):
* search(self, h_lim, int moduli_option=0, int verb=0):
* __init__(self):
* do_descent(self, _Curvedata curve, int verb = 1, int sel = 0, int
firstlim = 20, int secondlim = 8, int n_aux = -1, int second_descent =
1):
* getrank(self):
* getselmer(self):
* ok(self):
* getcertain(self):
* saturate(self, saturation_bound=0):
* getbasis(self):
* regulator(self):
But the code is ancient (i.e. it was written before SageX had C++
support, so you should get the idea) and IIRC William did once rewrite
it from scratch to a 95% finish. So it might be better to wait if
William can find that code.
=======================================================================================
newforms.pyx:
The issue: cdef class ECModularSymbol has an __init__ method, but no
deallocation code [This is SD 6 from Bristol and in the end William's
fault :)]
==30126== 208 (40 direct, 168 indirect) bytes in 1 blocks are
definitely lost in loss record 2,130 of 14,459
==30126== at 0x4A1C679: operator new(unsigned long)
(vg_replace_malloc.c:230)
==30126== by 0x1AFE6E2A: std::_Rb_tree<int, std::pair<int const,
int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,
std::all
ocator<std::pair<int const, int> > >::_M_copy
(std::_Rb_tree_node<std::pair<int const, int> > const*,
std::_Rb_tree_node<std::pair<int const, in
t> >*) (new_allocator.h:88)
==30126== by 0x1B1DCCD2: std::vector<svec_i, std::allocator<svec_i>
>::operator=(std::vector<svec_i, std::allocator<svec_i> > const&)
(stl_t
ree.h:570)
==30126== by 0x1B1D6B0F: smat_i::operator=(smat_i const&) (smat.cc:
42)
==30126== by 0x1AFE3CC4: homspace::homspace(long, int, int, int)
(homspace.cc:348)
==30126== by 0x1AFEE6C9: newforms::makeh1() (newforms.cc:467)
==30126== by 0x1AFF1FE2: newforms::createfromcurves
(std::vector<CurveRed, std::allocator<CurveRed> >, int) (newforms.cc:
937)
==30126== by 0x1AFF28F1: newforms::createfromcurve(CurveRed, int)
(newforms.cc:929)
==30126== by 0x1AEBD930:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1663
)
==30126== by 0x459350: type_call (typeobject.c:436)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== 256 bytes in 1 blocks are possibly lost in loss record 9,655
of 14,459
==30126== at 0x4A1C679: operator new(unsigned long)
(vg_replace_malloc.c:230)
==30126== by 0x1AFEC34A: std::vector<long, std::allocator<long>
>::_M_insert_aux(__gnu_cxx::__normal_iterator<long*, std::vector<long,
std::
allocator<long> > >, long const&) (new_allocator.h:88)
==30126== by 0x1AFEB415: level::level(long, long) (stl_vector.h:
610)
==30126== by 0x1AFEBAEA: moddata::moddata(long) (moddata.cc:67)
==30126== by 0x1AFE9595: symbdata::symbdata(long) (symb.cc:134)
==30126== by 0x1AFE2944: homspace::homspace(long, int, int, int)
(homspace.cc:67)
==30126== by 0x1AFEE6C9: newforms::makeh1() (newforms.cc:467)
==30126== by 0x1AFF1FE2: newforms::createfromcurves
(std::vector<CurveRed, std::allocator<CurveRed> >, int) (newforms.cc:
937)
==30126== by 0x1AFF28F1: newforms::createfromcurve(CurveRed, int)
(newforms.cc:929)
==30126== by 0x1AEBD930:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1663
)
==30126== by 0x459350: type_call (typeobject.c:436)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== 1,040 (40 direct, 1,000 indirect) bytes in 1 blocks are
definitely lost in loss record 12,597 of 14,459
==30126== at 0x4A1C679: operator new(unsigned long)
(vg_replace_malloc.c:230)
==30126== by 0x1AFE6E2A: std::_Rb_tree<int, std::pair<int const,
int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,
std::all
ocator<std::pair<int const, int> > >::_M_copy
(std::_Rb_tree_node<std::pair<int const, int> > const*,
std::_Rb_tree_node<std::pair<int const, in
t> >*) (new_allocator.h:88)
==30126== by 0x1AFE6F76: std::_Rb_tree<int, std::pair<int const,
int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,
std::all
ocator<std::pair<int const, int> > >::operator=(std::_Rb_tree<int,
std::pair<int const, int>, std::_Select1st<std::pair<int const, int>
>, std:
:less<int>, std::allocator<std::pair<int const, int> > > const&)
(stl_tree.h:800)
==30126== by 0x1AFE32B6: homspace::homspace(long, int, int, int)
(stl_map.h:227)
==30126== by 0x1AFEE6C9: newforms::makeh1() (newforms.cc:467)
==30126== by 0x1AFF1FE2: newforms::createfromcurves
(std::vector<CurveRed, std::allocator<CurveRed> >, int) (newforms.cc:
937)
==30126== by 0x1AFF28F1: newforms::createfromcurve(CurveRed, int)
(newforms.cc:929)
==30126== by 0x1AEBD930:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1663
)
==30126== by 0x459350: type_call (typeobject.c:436)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==30126== 1,904 bytes in 1 blocks are possibly lost in loss record
14,016 of 14,459
==30126== at 0x4A1C679: operator new(unsigned long)
(vg_replace_malloc.c:230)
==30126== by 0x1B1DCC5F: std::vector<svec_i, std::allocator<svec_i>
>::operator=(std::vector<svec_i, std::allocator<svec_i> > const&)
(new_a
llocator.h:88)
==30126== by 0x1B1D6B0F: smat_i::operator=(smat_i const&) (smat.cc:
42)
==30126== by 0x1AFE3CC4: homspace::homspace(long, int, int, int)
(homspace.cc:348)
==30126== by 0x1AFEE6C9: newforms::makeh1() (newforms.cc:467)
==30126== by 0x1AFF1FE2: newforms::createfromcurves
(std::vector<CurveRed, std::allocator<CurveRed> >, int) (newforms.cc:
937)
==30126== by 0x1AFF28F1: newforms::createfromcurve(CurveRed, int)
(newforms.cc:929)
==30126== by 0x1AEBD930:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1663
)
==30126== by 0x459350: type_call (typeobject.c:436)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==30126== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==30126== by 0x4CF3F7: function_call (funcobject.c:517)
==30126== by 0x415832: PyObject_Call (abstract.c:1861)
==30126== by 0x41BF6C: instancemethod_call (classobject.c:2519)
=======================================================================================
padics.pyx - this exposes the same problem as in newforms.pyx
==4475== 232 (40 direct, 192 indirect) bytes in 1 blocks are
definitely lost in loss record 11,355 of 25,692
==4475== at 0x4A1C679: operator new(unsigned long)
(vg_replace_malloc.c:230)
==4475== by 0x1AEBD6C4:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1600)
==4475== by 0x459350: type_call (typeobject.c:436)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x4CF390: function_call (funcobject.c:517)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x4565D7: slot_tp_init (typeobject.c:4943)
==4475== by 0x459350: type_call (typeobject.c:436)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x4CF3F7: function_call (funcobject.c:517)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== 944 (200 direct, 744 indirect) bytes in 1 blocks are
definitely lost in loss record 18,977 of 25,692
==4475== at 0x4A1C679: operator new(unsigned long)
(vg_replace_malloc.c:230)
==4475== by 0x1AEBD772:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1618)
==4475== by 0x459350: type_call (typeobject.c:436)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x4CF390: function_call (funcobject.c:517)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x4565D7: slot_tp_init (typeobject.c:4943)
==4475== by 0x459350: type_call (typeobject.c:436)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x484AF1: PyEval_EvalFrameEx (ceval.c:494)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x4CF3F7: function_call (funcobject.c:517)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== 440 bytes in 1 blocks are possibly lost in loss record 18,981
of 25,692
==4475== at 0x4A1BE1B: malloc (vg_replace_malloc.c:207)
==4475== by 0x4B1539: _PyObject_GC_Malloc (gcmodule.c:1321)
==4475== by 0x4B162F: _PyObject_GC_NewVar (gcmodule.c:1353)
==4475== by 0x4CEA3D: PyFrame_New (frameobject.c:614)
==4475== by 0x485875: PyEval_EvalCodeEx (ceval.c:2631)
==4475== by 0x4CF3F7: function_call (funcobject.c:517)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x1AEBD5BD:
__pyx_pf_4sage_4libs_7cremona_8newforms_15ECModularSymbol___init__
(_object*, _object*, _object*) (newforms.cpp:1582)
==4475== by 0x459350: type_call (typeobject.c:436)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x4CF390: function_call (funcobject.c:517)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x41BF6C: instancemethod_call (classobject.c:2519)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x4565D7: slot_tp_init (typeobject.c:4943)
==4475== by 0x459350: type_call (typeobject.c:436)
==4475== by 0x415832: PyObject_Call (abstract.c:1861)
==4475== by 0x482DB9: PyEval_EvalFrameEx (ceval.c:3784)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)
==4475== by 0x483F76: PyEval_EvalFrameEx (ceval.c:3669)
==4475== by 0x485DB1: PyEval_EvalCodeEx (ceval.c:2836)