Dear all, There seems to be a memory leak in some code below, in at least versions 4.5 and 4.5.3. For example, if I call it with
sage: L = find_candidates_for_large_value(5000) It prints something like: current memory usage: 836.73046875 current memory usage: 836.73046875 current memory usage: 836.73046875 current memory usage: 836.73046875 current memory usage: 836.73046875 current memory usage: 836.73046875 current memory usage: 836.73046875 current memory usage: 836.98046875 current memory usage: 836.98046875 current memory usage: 836.98046875 current memory usage: 836.98046875 current memory usage: 836.98046875 current memory usage: 836.98046875 current memory usage: 836.98046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.23046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.48046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.73046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 837.98046875 current memory usage: 838.2578125 current memory usage: 838.2578125 current memory usage: 838.2578125 current memory usage: 838.2578125 current memory usage: 838.2578125 current memory usage: 838.515625 current memory usage: 838.515625 current memory usage: 838.515625 current memory usage: 838.515625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 838.81640625 current memory usage: 839.06640625 current memory usage: 839.06640625 current memory usage: 839.1953125 current memory usage: 839.1953125 current memory usage: 839.1953125 current memory usage: 839.1953125 current memory usage: 839.1953125 current memory usage: 839.1953125 current memory usage: 839.1953125 current memory usage: 839.453125 current memory usage: 839.453125 current memory usage: 839.453125 current memory usage: 839.6796875 current memory usage: 839.6796875 current memory usage: 839.6796875 current memory usage: 839.6796875 current memory usage: 839.6796875 current memory usage: 839.6796875 current memory usage: 839.6796875 current memory usage: 839.9375 current memory usage: 839.9375 current memory usage: 840.06640625 [...] It is a little complicated, so we need a smaller example to figure out what is causing the memory leak. Before I try making a smaller example, I thought I would write here to see if anyone happens to know what is leaking memory, or at least to see if anyone has a good guess. Some things used are: prime_range() nth_prime() symbolic arithmetic fast_callable(domain=ComplexField(250)) ZZ.random_element() RR.random_element() copy(MatrixSpace(ZZ, n).zero()) A.LLL(), where A is a modification of the above copy(MatrixSpace(ZZ, n).zero()) import sys def find_candidates_for_large_value(repeat=1): """ Find values of t where zeta(1/2 + it) is expected to be big. """ possible_t = [] X = var('X') p_start = 20 p_end = 40 euler_product1 = 1 euler_product2 = 1 for p in prime_range(nth_prime(p_start) + 1): euler_product1 = euler_product1 / (1 - 1/p^(1/2 + i * X)) euler_product2 = euler_product1 for p in prime_range(nth_prime(p_start) + 1, nth_prime(p_end) + 1): euler_product2 = euler_product2 / (1 - 1/p^(1/2 + i * X)) euler_product1 = fast_callable(euler_product1, domain=ComplexField(250), vars='X') euler_product2 = fast_callable(euler_product2, domain=ComplexField(250), vars='X') for l in xrange(repeat): n = ZZ.random_element(p_start, p_end) m = ZZ.random_element(120, 150) r = ZZ.random_element(40, 50) delta = RR.random_element(.9, .9999) last_prime = nth_prime(n) primes = prime_range(last_prime + 1) weights = [p^(-1/4) for p in primes] #print weights A = copy(MatrixSpace(ZZ, n+1).zero()) for k in xrange(0, n): A[0,k] = floor(weights[k] * primes[k].log() * 2^(m - r)) A[0,n] = 1 for k in xrange(0, n): A[k + 1, k] = floor(2 * pi * weights[k] * 2^m) B = A.LLL(delta=delta) R = RealField(250) for k in xrange(0, n + 1): t = R(abs(B[n,k])/2^r) v1 = euler_product1(t) v2 = euler_product2(t) possible_t.append( (abs(v2), abs(v1), t, floor(abs(t)) - 20) ) possible_t.sort() possible_t = possible_t[-10:] #print "On try number", l, " best candidates so far are" #for _ in possible_t[-10:]: # print _ print "current memory usage:", get_memory_usage() sys.stdout.flush() return possible_t -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org