def clone_as_dag(self, instances = True): """ Return a copy of the AMR as DAG. """ new = Dag() for triple in self.triples(instances = False): new._add_triple(*copy.copy(triple)) new.roots = copy.copy(self.roots) new.external_nodes = copy.copy(self.external_nodes) return new
def test_add_raise(self): dag = Dag() self.assertRaises(Exception, dag.add, -1, "filename") self.assertRaises(Exception, dag.add, 2, "filename") self.assertRaises(Exception, dag.add, 3, "filename") dag.add(1, "filename") self.assertRaises(Exception, dag.add, 3, "filename") self.assertRaises(Exception, dag.add, 4, "filename")
def test_add_raise( self ): dag = Dag() self.assertRaises( Exception, dag.add, -1, "filename" ) self.assertRaises( Exception, dag.add, 2, "filename" ) self.assertRaises( Exception, dag.add, 3, "filename" ) dag.add( 1, "filename" ) self.assertRaises( Exception, dag.add, 3, "filename" ) self.assertRaises( Exception, dag.add, 4, "filename" )
def scheduler(self): self._refresh_once_() while True: for dag_row in self.dags: succ = dag_info.update_dag_status_and_starttime(dag_row) if not succ: continue dag = Dag(dag_row) dag.daemon = True dag.start() logger.info('Start refresh once') time.sleep(self.refresh_interval) self._refresh_once_() logger.info('Success refresh once')
def __init__(self): self.dagen = { 2: Dag('2'), 3: Dag('3 '), 4: Dag('4'), 5: Dag('5'), 6: Dag('6'), 7: Dag('7'), 8: Dag('8'), 9: Dag('9'), 10: Dag('10'), 11: Dag('11'), } self.personen = []
def gen_level(): print("Initializing DAG...", file=sys.stderr) dag = Dag.loads_from(ID_HIERARCHY_FILE) print("Generating level.txt ...", file=sys.stderr) fout = open(LEVEL_FILE, 'w') level_list = dag.level_list() for i in range(len(level_list)): fout.write("{0}\t{1}".format(i, level_list[i]) + "\n") fout.close()
def test_1(self): dag = Dag() # . a # . b # . c self._a = dag.add(1, "a") self._b = dag.add(1, "b") self._c = dag.add(1, "c") tSorter = TopologicalSorter(dag) self.assertEqual(self._a.getColor(), DfsNode.White) self.assertEqual(self._b.getColor(), DfsNode.White) self.assertEqual(self._c.getColor(), DfsNode.White) self.assertEqual([i.getData() for i in tSorter.getNodes()], ["b", "c", "a"])
def from_triples(cls, triples, concepts, roots=None, warn=sys.stderr): """ Initialize a new abstract meaning representation from a collection of triples and a node to concept map. """ amr = Dag.from_triples(triples, roots, warn=warn) amr.__class__ = Amr amr.node_to_concepts = concepts amr.__cached_triples = None return amr
def test_cycle( self ): dag = Dag() # filename_1_1 # filename_2_1 # filename_1_1 filename_1_1 = DagNode( "filename_1_1" ) filename_2_1 = DagNode( "filename_2_1" ) dag.add( 1, "filename_1_1" ) dag.add( 2, "filename_2_1" ) dag.add( 3, "filename_1_1" ) self.assertEqual( dag.get( "filename_1_1" ).getChildren(), set( [ filename_2_1 ] ) ) self.assertEqual( dag.get( "filename_1_1" ).getParents(), set( [ dag.getRoot() ] ) ) self.assertEqual( dag.get( "filename_2_1" ).getChildren(), set() ) self.assertEqual( dag.get( "filename_2_1" ).getParents(), set( [ filename_1_1 ] ) )
def test_djikstra(self): dag = Dag() a, b, c, d = dag.add_vertices(4) dag.add_edge(a, b, 3) dag.add_edge(a, c, 4) dag.add_edge(b, d, 4) dag.add_edge(c, d, 1) self.assertEqual(dag.djikstra(a, d), (5, [a, c, d]))
def apply_node_map(self, node_map, *args, **kwargs): new = Dag.apply_node_map(self, node_map, *args, **kwargs) new.__class__ = Amr new.node_to_concepts = {} new.__cached_triples = None for node in self.node_to_concepts: if node in node_map: new.node_to_concepts[node_map[node]] = self.node_to_concepts[node] else: new.node_to_concepts[node] = self.node_to_concepts[node] return new
def apply_node_map(self, node_map): """ Needed for smatch. """ new = Dag.apply_node_map(self, node_map) new.__class__ = Amr new.node_to_concepts = {} new.__cached_triples = None for n in self.node_to_concepts: if n in node_map: new.node_to_concepts[node_map[n]] = self.node_to_concepts[n] else: new.node_to_concepts[n] = self.node_to_concepts[n] return new
def category2ancestor(): print("Initializing DAG...", file=sys.stderr) dag = Dag.loads_from(ID_HIERARCHY_FILE) print("Generating entity2ancestor.txt ...", file=sys.stderr) fin = open(ENTITY2CATEGORY_FILE) fout = open(ENTITY2ANCESTOR_FILE, 'w') count = 0 for line in fin: if count % 1000 == 0: print("{0}\r".format(count), file=sys.stderr, end="") info = line.split('\t') entity = info[0] clist = [int(c) for c in info[1:]] stats = dag.ancestor_path(clist) fout.write("\t".join([entity] + ["{0}:{1}".format(c[0], c[1]) for c in stats]) + "\n"); count += 1 fout.close() fin.close()
def category2ancestor(): print("Initializing DAG...", file=sys.stderr) dag = Dag.loads_from(ID_HIERARCHY_FILE) print("Generating entity2ancestor.txt ...", file=sys.stderr) fin = open(ENTITY2CATEGORY_FILE) fout = open(ENTITY2ANCESTOR_FILE, 'w') count = 0 for line in fin: if count % 1000 == 0: print("{0}\r".format(count), file=sys.stderr, end="") info = line.split('\t') entity = info[0] clist = [int(c) for c in info[1:]] stats = dag.ancestor_path(clist) fout.write("\t".join([entity] + ["{0}:{1}".format(c[0], c[1]) for c in stats]) + "\n") count += 1 fout.close() fin.close()
import random from dag import Dag #Create a random graph n_nodes = 10 n_edges = 20 randseed = 18 graph_is_dag = True dag1 = Dag() random.seed(randseed) for i in range(n_nodes): dag1.add_node(i) for i in range(n_edges): node1 = random.randint(0,n_nodes-1) node2 = random.randint(0,n_nodes-1) dag1.add_edge(node1, node2) if graph_is_dag: while not dag1.validate(): node1 = random.randint(0,n_nodes-1) node2 = random.randint(0,n_nodes-1) dag1.add_edge(node1, node2) # remove an edge between two nodes that are known to be connected print dag1.graph print dag1.graph
def update(self, depth, header): return Dag.add(self, depth, header)
def add(self, depth, header): node = Dag.add(self, depth, header) node.setIncludedRecursively(True) return node
def __init__(self): Dag.__init__(self, HeaderNode)
def update( self, depth, header ): return Dag.add( self, depth, header )
def test_add_2( self ): dag = Dag() # filename_1_1 # filename_2_1 # filename_leaf # filename_leaf filename_1_1 = DagNode( "filename_1_1" ) filename_2_1 = DagNode( "filename_2_1" ) filename_leaf = DagNode( "filename_leaf" ) dag.add( 1, "filename_1_1" ) dag.add( 2, "filename_2_1" ) dag.add( 3, "filename_leaf" ) dag.add( 1, "filename_leaf" ) self.assertEqual( dag.getRoot().getChildren(), set( [ filename_1_1, filename_leaf ] ) ) self.assertEqual( dag.get( "filename_1_1" ).getChildren(), set( [ filename_2_1 ] ) ) self.assertEqual( dag.get( "filename_1_1" ).getParents(), set( [ dag.getRoot() ] ) ) self.assertEqual( dag.get( "filename_2_1" ).getChildren(), set( [ filename_leaf, ] ) ) self.assertEqual( dag.get( "filename_2_1" ).getParents(), set( [ filename_1_1 ] ) ) self.assertEqual( dag.get( "filename_leaf" ).getChildren(), set() ) self.assertEqual( \ dag.get( "filename_leaf" ).getParents()\ , set( [ filename_2_1, dag.getRoot() ] )\ )
def test_add_1( self ): dag = Dag() # filename_1_1 # filename_2_1 # filename_3_1 # filename_2_2 # filename_3_2 # filename_1_2 filename_1_1 = DagNode( "filename_1_1" ) filename_2_1 = DagNode( "filename_2_1" ) filename_3_1 = DagNode( "filename_3_1" ) filename_2_2 = DagNode( "filename_2_2" ) filename_3_2 = DagNode( "filename_3_2" ) filename_1_2 = DagNode( "filename_1_2" ) dag.add( 1, "filename_1_1" ) dag.add( 2, "filename_2_1" ) dag.add( 3, "filename_3_1" ) dag.add( 2, "filename_2_2" ) dag.add( 3, "filename_3_2" ) dag.add( 1, "filename_1_2" ) self.assertEqual( dag.getRoot().getChildren(), set( [ filename_1_1, filename_1_2 ] ) ) self.assertEqual( dag.get( "filename_1_1" ).getChildren(), set( [ filename_2_1, filename_2_2 ] ) ) self.assertEqual( dag.get( "filename_1_1" ).getParents(), set( [ dag.getRoot() ] ) ) self.assertEqual( dag.get( "filename_1_2" ).getChildren(), set() ) self.assertEqual( dag.get( "filename_1_2" ).getParents(), set( [ dag.getRoot() ] ) ) self.assertEqual( dag.get( "filename_2_1" ).getChildren(), set( [ filename_3_1, ] ) ) self.assertEqual( dag.get( "filename_2_1" ).getParents(), set( [ dag.get( "filename_1_1" ) ] ) ) self.assertEqual( dag.get( "filename_2_2" ).getChildren(), set( [ filename_3_2, ] ) ) self.assertEqual( dag.get( "filename_2_2" ).getParents(), set( [ dag.get( "filename_1_1" ) ] ) ) self.assertEqual( dag.get( "filename_3_1" ).getChildren(), set() ) self.assertEqual( dag.get( "filename_3_1" ).getParents(), set( [ dag.get( "filename_2_1" ) ] ) ) self.assertEqual( dag.get( "filename_3_2" ).getChildren(), set() ) self.assertEqual( dag.get( "filename_3_2" ).getParents(), set( [ dag.get( "filename_2_2" ) ] ) )
# Dag for dagnummer, dag in app.dagen.items(): dag.aanwezig = len(app.personen) # Personen for persoon in app.personen: persoon.tag = '' attempts = 1 # Voorkeuren for voorkeur in persoon.get_voorkeuren(dagnummer): if not voorkeur: continue groepnaam = Dag.get_groep_naam(voorkeur) if groepnaam == Dag.NIET_AANWEZIG_NAAM: dag.aanwezig -= 1 break if groepnaam == Dag.GEEN_VOORKEUR_NAAM: print('geen voork') print(persoon) dag.addTo(persoon, Dag.OVER_NAAM) break if dag.addTo(persoon, groepnaam): persoon.tag = 'V' break
def add( self, depth, header ): node = Dag.add( self, depth, header ) node.setIncludedRecursively( True ) return node
''' Python script to create a randomised directed acyclic graph (DAG) that is guaranteed to be topologically sorted ''' from dag import Dag from random import randrange import numpy as np #Construct a random DAG n = 10 # no. of nodes p = 0.2 # probability of adding an edge m = 50 # max. no. of edge-adding attempts dag1 = Dag() for i in range(n): dag1.add_node(i) for i in range(m): addedge = np.random.choice(a=[True, False], p=[p,1-p]) if addedge: j = randrange(0,n-2) k = j while k <= j: k = randrange(0,n-1) dag1.add_edge(j,k) else: continue #if there are any independent nodes (other than the first), add a dependency while dag1.ind_nodes() != [0]: i = dag1.ind_nodes()[-1] if i != 1: dag1.add_edge(randrange(0,i-1),i) elif i == 1: dag1.add_edge(0,i)
def test_add_3(self): dag = Dag() # filename_1_1 # filename_2_1 # filename_3_1 # filename_2_2 # filename_3_1 filename_1_1 = DagNode("filename_1_1") filename_2_1 = DagNode("filename_2_1") filename_3_1 = DagNode("filename_3_1") filename_2_2 = DagNode("filename_2_2") dag.add(1, "filename_1_1") dag.add(2, "filename_2_1") dag.add(3, "filename_3_1") dag.add(2, "filename_2_2") dag.add(3, "filename_3_1") self.assertEqual(dag.getRoot().getChildren(), set([filename_1_1])) self.assertEqual( dag.get("filename_1_1").getChildren(), set([filename_2_1, filename_2_2])) self.assertEqual( dag.get("filename_1_1").getParents(), set([dag.getRoot()])) self.assertEqual( dag.get("filename_2_1").getChildren(), set([ filename_3_1, ])) self.assertEqual( dag.get("filename_2_1").getParents(), set([filename_1_1])) self.assertEqual( dag.get("filename_2_2").getChildren(), set([ filename_3_1, ])) self.assertEqual( dag.get("filename_2_2").getParents(), set([filename_1_1])) self.assertEqual(dag.get("filename_3_1").getChildren(), set()) self.assertEqual( dag.get("filename_3_1").getParents(), set([filename_2_1, filename_2_2]))
for sheet in sheets: uge = [] ugenr = sheet.title #mandag shifttakers = [] for y in range(5, 100): vagt = sheet['I' + str(y)].value if vagt != None: navn = sheet['A' + str(y)].value nr = sheet['H' + str(y)].value if nr != None: shifttakers.append(ShiftTaker(navn, vagt, nr)) mandag = Dag(ugenr, sheet['I1'].value, sheet['I2'].value, sheet['I3'].value) mandag.shifttakers = shiftSorter(shifttakers) uge.append(mandag) #tirsdag shifttakers = [] for y in range(5, 100): vagt = sheet['J' + str(y)].value if vagt != None: navn = sheet['A' + str(y)].value nr = sheet['H' + str(y)].value if nr != None: shifttakers.append(ShiftTaker(navn, vagt, nr)) tirsdag = Dag(ugenr, sheet['J1'].value, sheet['J2'].value,
def test_difficult_dag(self): dag = Dag() v = dag.add_vertices(10) dag.add_edge(v[0], v[1], 1) dag.add_edge(v[0], v[2], 2) dag.add_edge(v[1], v[2], 5) dag.add_edge(v[1], v[3], 1) dag.add_edge(v[2], v[4], 2) dag.add_edge(v[3], v[2], 3) dag.add_edge(v[3], v[4], 1) dag.add_edge(v[4], v[5], 2) self.assertEqual(dag.djikstra(v[0], v[5]), (5, [v[0], v[1], v[3], v[4], v[5]])) dag.add_edge(v[2], v[5], 1) self.assertEqual(dag.djikstra(v[0], v[5]), (3, [v[0], v[2], v[5]]))
def __init__( self ): Dag.__init__( self, HeaderNode )
def test_add_2(self): dag = Dag() # filename_1_1 # filename_2_1 # filename_leaf # filename_leaf filename_1_1 = DagNode("filename_1_1") filename_2_1 = DagNode("filename_2_1") filename_leaf = DagNode("filename_leaf") dag.add(1, "filename_1_1") dag.add(2, "filename_2_1") dag.add(3, "filename_leaf") dag.add(1, "filename_leaf") self.assertEqual(dag.getRoot().getChildren(), set([filename_1_1, filename_leaf])) self.assertEqual( dag.get("filename_1_1").getChildren(), set([filename_2_1])) self.assertEqual( dag.get("filename_1_1").getParents(), set([dag.getRoot()])) self.assertEqual( dag.get("filename_2_1").getChildren(), set([ filename_leaf, ])) self.assertEqual( dag.get("filename_2_1").getParents(), set([filename_1_1])) self.assertEqual(dag.get("filename_leaf").getChildren(), set()) self.assertEqual( \ dag.get( "filename_leaf" ).getParents()\ , set( [ filename_2_1, dag.getRoot() ] )\ )
def addLinkToParentNode(link, nodes): parent = Dag.findByNameStatic(nodes, link.parent) parent.addLink(link) return nodes
def test_one_node_twice(self): dag = Dag() # filename_1_1 # filename_2_1 # filename_1_1 # filename_3_1 filename_1_1 = DagNode("filename_1_1") filename_2_1 = DagNode("filename_2_1") filename_3_1 = DagNode("filename_3_1") dag.add(1, "filename_1_1") dag.add(2, "filename_2_1") dag.add(3, "filename_1_1") dag.add(4, "filename_3_1") self.assertEqual( dag.get("filename_1_1").getChildren(), set([filename_2_1, filename_3_1])) self.assertEqual( dag.get("filename_1_1").getParents(), set([dag.getRoot()])) self.assertEqual(dag.get("filename_2_1").getChildren(), set()) self.assertEqual( dag.get("filename_2_1").getParents(), set([filename_1_1])) self.assertEqual(dag.get("filename_3_1").getChildren(), set()) self.assertEqual( dag.get("filename_3_1").getParents(), set([filename_1_1]))
def generateGraph(input): return Dag(generateNodes(input))