Author: Ilya Osadchiy <[email protected]>
Branch:
Changeset: r44895:4ca2780763fd
Date: 2011-06-01 01:16 +0300
http://bitbucket.org/pypy/pypy/changeset/4ca2780763fd/
Log: numpy: deleting sources when computation ends in VirtualArray
diff --git a/pypy/module/micronumpy/interp_numarray.py
b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -134,6 +134,10 @@
self.forced_result = None
self.signature = signature
+ def _del_sources(self):
+ # Function for deleting references to source arrays, to allow
garbage-collecting them
+ raise NotImplementedError
+
def compute(self):
i = 0
signature = self.signature
@@ -150,6 +154,7 @@
def force_if_needed(self):
if self.forced_result is None:
self.forced_result = self.compute()
+ self._del_sources()
def get_concrete(self):
self.force_if_needed()
@@ -160,6 +165,13 @@
return self.forced_result.eval(i)
return self._eval(i)
+ def find_size(self):
+ if self.forced_result is not None:
+ # The result has been computed and sources may be unavailable
+ return self.forced_result.find_size()
+ return self._find_size()
+
+
class Call1(VirtualArray):
_immutable_fields_ = ["function", "values"]
@@ -168,7 +180,10 @@
self.function = function
self.values = values
- def find_size(self):
+ def _del_sources(self):
+ self.values = None
+
+ def _find_size(self):
return self.values.find_size()
def _eval(self, i):
@@ -185,7 +200,11 @@
self.left = left
self.right = right
- def find_size(self):
+ def _del_sources(self):
+ self.left = None
+ self.right = None
+
+ def _find_size(self):
try:
return self.left.find_size()
except ValueError:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit