Author: Ilya Osadchiy <osadchiy.i...@gmail.com> 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 pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit