def test_xreplace_constrained_time_varying(tu, tv, tw, ti0, ti1, t0, t1, exprs, expected): exprs = EVAL(exprs, tu, tv, tw, ti0, ti1, t0, t1) make = lambda i: Scalar(name='r%d' % i).indexify() processed, found = xreplace_constrained( exprs, make, iq_timevarying(TemporariesGraph(exprs)), lambda i: estimate_cost(i) > 0) assert len(found) == len(expected) assert all(str(i.rhs) == j for i, j in zip(found, expected))
def test_xreplace_constrained_time_varying(tu, tv, tw, ti0, ti1, t0, t1, exprs, expected): exprs = EVAL(exprs, tu, tv, tw, ti0, ti1, t0, t1) counter = generator() make = lambda: Scalar(name='r%d' % counter()).indexify() processed, found = xreplace_constrained(exprs, make, iq_timevarying(FlowGraph(exprs)), lambda i: estimate_cost(i) > 0) assert len(found) == len(expected) assert all(str(i.rhs) == j for i, j in zip(found, expected))
def _extract_time_varying(self, cluster, template, **kwargs): """ Extract time-varying subexpressions, and assign them to temporaries. Time varying subexpressions arise for example when approximating derivatives through finite differences. """ make = lambda i: Scalar(name=template(i)).indexify() rule = iq_timevarying(cluster.trace) costmodel = lambda i: estimate_cost(i) > 0 processed, _ = xreplace_constrained(cluster.exprs, make, rule, costmodel) return cluster.rebuild(processed)
def _extract_time_varying(self, cluster, template, **kwargs): """ Extract time-varying subexpressions, and assign them to temporaries. Time varying subexpressions arise for example when approximating derivatives through finite differences. """ make = lambda: Scalar(name=template(), dtype=cluster.dtype).indexify() rule = iq_timevarying(cluster.trace) costmodel = lambda i: estimate_cost(i) > 0 processed, _ = xreplace_constrained(cluster.exprs, make, rule, costmodel) return cluster.rebuild(processed)