Package: python-numpy Version: 1:1.1.0-3 Severity: minor Raising zero to a negative power sometimes leaks memory, depending on the types involved. While this is easy to work around (check for zero and deal with it separately), it shouldn't happen.
In particular, with the following combinations of types (where the base is 0 and the exponent is -3 or -3.5), one object is leaked: float ** numpy.float64 int ** numpy.float64 int ** numpy.int32 int ** numpy.int64 numpy.float32 ** numpy.float32 numpy.float64 ** float numpy.float64 ** int numpy.float64 ** numpy.float32 numpy.float64 ** numpy.float64 numpy.float64 ** numpy.int32 numpy.float64 ** numpy.int64 numpy.int32 ** int numpy.int32 ** numpy.int32 numpy.int64 ** int numpy.int64 ** numpy.int32 numpy.int64 ** numpy.int64 (In addition, float ** numpy.int32 raises an exception; however, strictly speaking, that would be a separate issue.) Code to reproduce this is enclosed below. -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (500, 'testing'), (500, 'stable') Architecture: i386 (i686) Kernel: Linux 2.6.24-1-686 (SMP w/1 CPU core) Locale: LANG=en_AU, LC_CTYPE=en_AU (charmap=ISO-8859-1) Shell: /bin/sh linked to /bin/bash Versions of packages python-numpy depends on: ii libblas3gf [libblas.so.3gf] 1.2-2 Basic Linear Algebra Subroutines 3 ii libc6 2.7-15 GNU C Library: Shared libraries ii libgcc1 1:4.3.2-1 GCC support library ii libgfortran3 4.3.2-1 Runtime library for GNU Fortran ap ii liblapack3gf [liblapack.so.3g 3.1.1-1 library of linear algebra routines ii python 2.5.2-3 An interactive high-level object-o ii python-central 0.6.8 register and build utility for Pyt python-numpy recommends no packages. Versions of packages python-numpy suggests: pn python-numpy-dbg <none> (no description available) pn python-numpy-doc <none> (no description available) -- no debconf information -- Code to reproduce the problem: #!/usr/bin/python import gc, numpy def mem(): gc.collect() return len(gc.get_objects()) for zt in int, float, numpy.int32, numpy.int64, numpy.float32, numpy.float64: z = zt(0) for pt in int, float, numpy.int32, numpy.int64, numpy.float32, numpy.float64: if zt in (int, float) and pt in (int, float): continue p = pt(-3.5) try: before = mem() z**p if mem()>before: print 'leak: ', type(z), '**', type(p) else: print 'OK: ', type(z), '**', type(p) except: print 'error:', type(z), '**', type(p) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]