def from_parts(name2ndp, connections, fnames, rnames): c = Context() c.names = name2ndp c.connections = connections c.fnames = fnames c.rnames = rnames return CompositeNamedDP(c)
def clone_context(c): c2 = Context() c2.names = dict(**c.names) c2.connections = list(c.connections) c2.fnames = list(c.fnames) c2.rnames = list(c.rnames) return c2
def __copy__(self): c = Context() c.names = dict(**self.context.names) c.connections = list(self.context.connections) c.fnames = list(self.context.fnames) c.rnames = list(self.context.rnames) return CompositeNamedDP(c)
def dpgraph_translate_rn(context, name, rn, rn2): def translate_connections(c): if c.dp1 == name and c.s1 == rn: c = Connection(name, rn2, c.dp2, c.s2) return c connections2 = map(translate_connections, context.connections) names2 = context.names.copy() names2[name] = wrap_change_name_resource(context.names[name], rn, rn2) c2 = Context() c2.rnames = context.rnames c2.fnames = context.fnames c2.connections = connections2 c2.names = names2 return dpgraph_making_sure_no_reps(c2)
def dpgraph_translate_fn(context, name, fn, fn2): def translate_connections(c): if c.dp2 == name and c.s2 == fn: c = Connection(c.dp1, c.s1, name, fn2) return c connections2 = map(translate_connections, context.connections) names2 = context.names.copy() names2[name] = wrap_change_name_function(context.names[name], fn, fn2) c2 = Context() c2.rnames = context.rnames c2.fnames = context.fnames c2.connections = connections2 c2.names = names2 return dpgraph_making_sure_no_reps(c2)
def visit(recname, ndp): if isinstance(ndp, CompositeNamedDP): # NOTE: Does not label CompositeNamedDP context = Context() for child_name, child_ndp in ndp.get_name2ndp().items(): child_ndp2 = visit(recname + (child_name, ), child_ndp) context.add_ndp(child_name, child_ndp2) for c in ndp.get_connections(): context.add_connection(c) context.fnames = ndp.get_fnames() context.rnames = ndp.get_rnames() res = CompositeNamedDP.from_context(context) return res # res2 = LabelerNDP(res, recname) # return res2 elif isinstance(ndp, SimpleWrap): ndp2 = LabelerNDP(ndp, recname) return ndp2 elif isinstance(ndp, NamedDPCoproduct): assert len(ndp.ndps) == len(ndp.labels), ndp children = [] labels = [] for child_ndp, child_label in zip(ndp.ndps, ndp.labels): child2 = visit(recname + (child_label, ), child_ndp) children.append(child2) labels.append(child_label) res = NamedDPCoproduct(tuple(children), tuple(labels)) res2 = LabelerNDP(res, recname) return res2 elif isinstance(ndp, LabelerNDP): msg = 'Trying to re-label this as {}'.format(recname) raise_desc(DPInternalError, msg, ndp=ndp) else: raise NotImplementedError(type(ndp))