async def update(info, model_ref, dmodel_ref, update_rule_ref): new_model = model_ref.node dmodel = dmodel_ref.node update_rule = update_rule_ref.node p = new_model g = dmodel p = (P.record_getitem, p, 'W') g = (P.record_getitem, g, 'W') p_node = sexp_to_node(p, info.graph) g_node = sexp_to_node(g, info.graph) pn = info.graph.apply(update_rule, p_node, g_node) new_model = sexp_to_node(setter_from_getter(p, pn), info.graph) return new_model
async def update(info, self_ref, param_names_ref, model_ref, dmodel_ref, update_rule_ref): param_names_cst = build_value(await param_names_ref.get()) #self = build_value(await self_ref.get()) new_model = model_ref.node dmodel = dmodel_ref.node update_rule = update_rule_ref.node model_abs = await model_ref.get() for k in param_names_cst: p = new_model g = dmodel for c in k: p = (P.record_getitem, p, c) g = (P.record_getitem, g, c) p_node = sexp_to_node(p, info.graph) g_node = sexp_to_node(g, info.graph) pn = info.graph.apply(update_rule, p_node, g_node) new_model = sexp_to_node(setter_from_getter(p, pn), info.graph) return new_model
def make_handle_to_make_cell(g): """Replace uset(*make_handle(typ), value) by make_cell(value, U). This is because RefCreate both creates the reference and sets it. """ mng = manage(g) for node in list(mng.all_nodes): equiv = node.match(( P.universe_setitem, (P.tuple_getitem, X, 0), (P.tuple_getitem, X, 1), Y, )) if equiv: x = equiv[X] if x.is_apply(P.make_handle): new_handle_node = sexp_to_node( (make_cell, equiv[Y], x.inputs[2]), node.graph) mng.replace(x, new_handle_node) mng.replace(node, node.inputs[1])