def run(self, name): space = FakeSpace() i = self.code_mapping[name] codes = self.codes def f(i): interp = InterpreterState(codes[i]) interp.run(space) if not len(interp.results): raise Exception("need results") w_res = interp.results[-1] if isinstance(w_res, BaseArray): concr = w_res.get_concrete_or_scalar() sig = concr.find_sig() frame = sig.create_frame(concr) w_res = sig.eval(frame, concr) if isinstance(w_res, interp_boxes.W_Float64Box): return w_res.value if isinstance(w_res, interp_boxes.W_Int64Box): return float(w_res.value) elif isinstance(w_res, interp_boxes.W_BoolBox): return float(w_res.value) raise TypeError(w_res) if self.graph is None: interp, graph = self.meta_interp(f, [i], listops=True, backendopt=True, graph_and_interp_only=True) self.__class__.interp = interp self.__class__.graph = graph reset_stats() pyjitpl._warmrunnerdesc.memory_manager.alive_loops.clear() return self.interp.eval_graph(self.graph, [i])
def compile_graph(self): if self.graph is not None: return space = FakeSpace() codes = self.codes def f(i): interp = InterpreterState(codes[i]) interp.run(space) if not len(interp.results): raise Exception("need results") w_res = interp.results[-1] if isinstance(w_res, W_NDimArray): i, s = w_res.create_iter() w_res = i.getitem(s) if isinstance(w_res, boxes.W_Float64Box): return w_res.value elif isinstance(w_res, boxes.W_Int64Box): return float(w_res.value) elif isinstance(w_res, boxes.W_LongBox): return float(w_res.value) elif isinstance(w_res, boxes.W_BoolBox): return float(w_res.value) raise TypeError(w_res) if self.graph is None: interp, graph = self.meta_interp(f, [0], listops=True, listcomp=True, backendopt=True, graph_and_interp_only=True) self.__class__.interp = interp self.__class__.graph = graph
def setup_class(cls): py.test.skip("old") from pypy.module.micronumpy.compile import FakeSpace from pypy.module.micronumpy.interp_dtype import get_dtype_cache cls.space = FakeSpace() cls.float64_dtype = get_dtype_cache(cls.space).w_float64dtype
def run(self, code): interp = numpy_compile(code) space = FakeSpace() interp.run(space) return interp