Author: Justin Peel <notmuchtot...@gmail.com> Branch: numpy-ndim-size Changeset: r45706:0b020cb8d109 Date: 2011-07-18 00:06 -0600 http://bitbucket.org/pypy/pypy/changeset/0b020cb8d109/
Log: Changed size and ndim on FloatWrapper to not use exceptions. Instead, size and ndim are -1 on such types. 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 @@ -88,18 +88,12 @@ signature = Signature() def impl(self, space, w_other): w_other = convert_to_array(space, w_other) - try: - w_other_size = w_other.find_size() - self_size = self.find_size() - except ValueError: - # this will be raised if one of the arrays is a scalar. - pass - else: + w_other_size = w_other.find_size() + if w_other_size != -1 and w_other_size != self.find_size(): # Need a better dimension check here for N-dim arrays - if w_other_size != self_size: - raise OperationError(space.w_ValueError, - space.wrap("Cannot %s arrays of unequal dimensions" \ - % function.__name__)) + raise OperationError(space.w_ValueError, + space.wrap("Cannot %s arrays of unequal dimensions" \ + % function.__name__)) new_sig = self.signature.transition(signature) res = Call2( function, @@ -257,6 +251,8 @@ return self.get_concrete().descr_len(space) def descr_get_size(self, space): + # for arrays generated by things like arr[arr>0] we will need + # to have find_size force them to be concrete return space.wrap(self.find_size()) def descr_get_ndim(self, space): @@ -303,10 +299,10 @@ self.float_value = float_value def find_size(self): - raise ValueError + return -1 def find_ndim(self): - raise ValueError + return -1 def eval(self, i): return self.float_value @@ -401,18 +397,16 @@ self.right = None def _find_size(self): - try: - return self.left.find_size() - except ValueError: - pass - return self.right.find_size() + size = self.left.find_size() + if size == -1: + return self.right.find_size() + return size def _find_ndim(self): - try: - return self.left.find_ndim() - except ValueError: - pass - return self.right.find_ndim() + ndim = self.left.find_ndim() + if ndim == -1: + return self.right.find_ndim() + return ndim def _eval(self, i): lhs, rhs = self.left.eval(i), self.right.eval(i) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit