def test_dataflow_state_get_data(): df = DataFlow() vid1 = df.add_vertex() pid10 = df.add_in_port(vid1, "in") pid11 = df.add_out_port(vid1, "out") vid2 = df.add_vertex() pid21 = df.add_out_port(vid2, "out") vid5 = df.add_vertex() pid51 = df.add_out_port(vid5, "out") vid3 = df.add_vertex() pid31 = df.add_in_port(vid3, "in1") pid32 = df.add_in_port(vid3, "in2") pid33 = df.add_out_port(vid3, "res") vid4 = df.add_vertex() pid41 = df.add_in_port(vid4, "in") df.connect(pid11, pid31) df.connect(pid21, pid32) df.connect(pid33, pid41) df.connect(pid51, pid32) dfs = DataflowState(df) for pid in df.ports(): raises(KeyError, lambda: dfs.get_data(pid)) for i, pid in enumerate([pid11, pid21, pid33, pid51]): dfs.set_data(pid, i) raises(KeyError, lambda: dfs.get_data(pid10)) dfs.set_data(pid10, 'a') assert dfs.get_data(pid10) == 'a' for i, pid in enumerate([pid11, pid21, pid33, pid51]): assert dfs.get_data(pid) == i assert dfs.get_data(pid31) == 0 assert tuple(dfs.get_data(pid32)) == (1, 3) assert dfs.get_data(pid41) == 2 n2 = Node() df.set_actor(vid2, n2) assert tuple(dfs.get_data(pid32)) == (1, 3) n5 = Node() df.set_actor(vid5, n5) assert tuple(dfs.get_data(pid32)) == (1, 3) n2.get_ad_hoc_dict().set_metadata('position', [10, 0]) n5.get_ad_hoc_dict().set_metadata('position', [0, 0]) assert tuple(dfs.get_data(pid32)) == (3, 1)
def create_fake_node(self, vid): """ Return an empty node with the correct number of inputs and output """ # Count in and out needed ins = 0 outs = 0 for eid, link in self.connections.iteritems(): (source_vid, source_port, target_vid, target_port) = link if(source_vid == vid): outs = max(outs, source_port) elif(target_vid == vid): ins = max(ins, target_port) node = Node() attributes = copy.deepcopy(self.elt_data[vid]) ad_hoc = copy.deepcopy(self.elt_ad_hoc.get(vid, None)) self.load_ad_hoc_data(node, attributes, ad_hoc) # copy node input data if any values = copy.deepcopy(self.elt_value.get(vid, ())) for p in range(ins+1): port = node.add_input(name="In"+str(p)) for p in range(outs+1): port = node.add_output(name="Out"+str(p)) for vs in values: try: #the two first elements are the historical #values : port Id and port value #beyond that are extensions added by gengraph: #the ad_hoc_dict representation is third. port, v = vs[:2] node.set_input(port, eval(v)) if(len(vs)>2): d = MetaDataDict(vs[2]) node.input_desc[port].get_ad_hoc_dict().update(d) except: continue return node