def _reduce_argmax_argmin_impl(op_name): reduce_driver = jit.JitDriver( greens=['shapelen', 'sig'], reds=['result', 'idx', 'frame', 'self', 'cur_best', 'dtype'], get_printable_location=signature.new_printable_location(op_name), name='numpy_' + op_name, ) def loop(self): sig = self.find_sig() frame = sig.create_frame(self) cur_best = sig.eval(frame, self) shapelen = len(self.shape) frame.next(shapelen) dtype = self.find_dtype() result = 0 idx = 1 while not frame.done(): reduce_driver.jit_merge_point(sig=sig, shapelen=shapelen, self=self, dtype=dtype, frame=frame, result=result, idx=idx, cur_best=cur_best) new_best = getattr(dtype.itemtype, op_name)(cur_best, sig.eval(frame, self)) if dtype.itemtype.ne(new_best, cur_best): result = idx cur_best = new_best frame.next(shapelen) idx += 1 return result def impl(self, space): if self.size == 0: raise OperationError( space.w_ValueError, space.wrap("Can't call %s on zero-size arrays" % op_name)) return space.wrap(loop(self)) return func_with_new_name(impl, "reduce_arg%s_impl" % op_name)
def _reduce_argmax_argmin_impl(op_name): reduce_driver = jit.JitDriver( greens=['shapelen', 'sig'], reds=['result', 'idx', 'frame', 'self', 'cur_best', 'dtype'], get_printable_location=signature.new_printable_location(op_name), name='numpy_' + op_name, ) def loop(self): sig = self.find_sig() frame = sig.create_frame(self) cur_best = sig.eval(frame, self) shapelen = len(self.shape) frame.next(shapelen) dtype = self.find_dtype() result = 0 idx = 1 while not frame.done(): reduce_driver.jit_merge_point(sig=sig, shapelen=shapelen, self=self, dtype=dtype, frame=frame, result=result, idx=idx, cur_best=cur_best) new_best = getattr(dtype.itemtype, op_name)(cur_best, sig.eval(frame, self)) if dtype.itemtype.ne(new_best, cur_best): result = idx cur_best = new_best frame.next(shapelen) idx += 1 return result def impl(self, space): if self.size == 0: raise OperationError(space.w_ValueError, space.wrap("Can't call %s on zero-size arrays" % op_name)) return space.wrap(loop(self)) return func_with_new_name(impl, "reduce_arg%s_impl" % op_name)
from pypy.interpreter.gateway import interp2app, NoneNotWrapped from pypy.interpreter.typedef import TypeDef, GetSetProperty from pypy.module.micronumpy import interp_ufuncs, interp_dtype, signature from pypy.module.micronumpy.strides import calculate_slice_strides from pypy.rlib import jit from pypy.rpython.lltypesystem import lltype, rffi from pypy.tool.sourcetools import func_with_new_name from pypy.rlib.rstring import StringBuilder from pypy.module.micronumpy.interp_iter import ArrayIterator, OneDimIterator,\ SkipLastAxisIterator numpy_driver = jit.JitDriver( greens=['shapelen', 'sig'], virtualizables=['frame'], reds=['result_size', 'frame', 'ri', 'self', 'result'], get_printable_location=signature.new_printable_location('numpy'), name='numpy', ) all_driver = jit.JitDriver( greens=['shapelen', 'sig'], virtualizables=['frame'], reds=['frame', 'self', 'dtype'], get_printable_location=signature.new_printable_location('all'), name='numpy_all', ) any_driver = jit.JitDriver( greens=['shapelen', 'sig'], virtualizables=['frame'], reds=['frame', 'self', 'dtype'], get_printable_location=signature.new_printable_location('any'), name='numpy_any',
from pypy.interpreter.baseobjspace import Wrappable from pypy.interpreter.error import OperationError, operationerrfmt from pypy.interpreter.gateway import interp2app from pypy.interpreter.typedef import TypeDef, GetSetProperty, interp_attrproperty from pypy.module.micronumpy import interp_boxes, interp_dtype from pypy.module.micronumpy.signature import ReduceSignature,\ find_sig, new_printable_location, AxisReduceSignature, ScalarSignature from pypy.rlib import jit from pypy.rlib.rarithmetic import LONG_BIT from pypy.tool.sourcetools import func_with_new_name reduce_driver = jit.JitDriver( greens=['shapelen', "sig"], virtualizables=["frame"], reds=["frame", "self", "dtype", "value", "obj"], get_printable_location=new_printable_location('reduce'), name='numpy_reduce', ) axisreduce_driver = jit.JitDriver( greens=['shapelen', 'sig'], virtualizables=['frame'], reds=['self', 'arr', 'identity', 'frame'], name='numpy_axisreduce', get_printable_location=new_printable_location('axisreduce'), ) class W_Ufunc(Wrappable): _attrs_ = ["name", "promote_to_float", "promote_bools", "identity"] _immutable_fields_ = ["promote_to_float", "promote_bools", "name"]
from pypy.interpreter.baseobjspace import Wrappable from pypy.interpreter.error import OperationError, operationerrfmt from pypy.interpreter.gateway import interp2app from pypy.interpreter.typedef import TypeDef, GetSetProperty, interp_attrproperty from pypy.module.micronumpy import interp_boxes, interp_dtype from pypy.module.micronumpy.signature import ReduceSignature,\ find_sig, new_printable_location, AxisReduceSignature, ScalarSignature from pypy.rlib import jit from pypy.rlib.rarithmetic import LONG_BIT from pypy.tool.sourcetools import func_with_new_name reduce_driver = jit.JitDriver( greens=['shapelen', "sig"], virtualizables=["frame"], reds=["frame", "self", "dtype", "value", "obj"], get_printable_location=new_printable_location('reduce'), name='numpy_reduce', ) axisreduce_driver = jit.JitDriver( greens=['shapelen', 'sig'], virtualizables=['frame'], reds=['self','arr', 'identity', 'frame'], name='numpy_axisreduce', get_printable_location=new_printable_location('axisreduce'), ) class W_Ufunc(Wrappable): _attrs_ = ["name", "promote_to_float", "promote_bools", "identity"] _immutable_fields_ = ["promote_to_float", "promote_bools", "name"]