config.ilp.solver="CPLEX" cyanide = Graph.fromGMLString("""graph [ node [ id 0 label "H" ] node [ id 1 label "C" ] node [ id 2 label "N" ] edge [ source 0 target 1 label "-" ] edge [ source 1 target 2 label "#" ] ]""", name="Cyanide") adenine = Graph.fromGMLString( """graph [ node [ id 1 label "C" ] node [ id 2 label "C" ] node [ id 3 label "N" ] node [ id 4 label "C" ] node [ id 5 label "N" ] node [ id 6 label "N" ] node [ id 7 label "C" ] node [ id 8 label "N" ] node [ id 9 label "C" ] node [ id 10 label "N" ] node [ id 11 label "H" ] node [ id 12 label "H" ] node [ id 13 label "H" ] node [ id 14 label "H" ] node [ id 15 label "H" ] edge [ source 6 target 2 label "-" ] edge [ source 2 target 1 label "=" ] edge [ source 1 target 9 label "-" ] edge [ source 9 target 10 label "-" ] edge [ source 10 target 12 label "-" ] edge [ source 10 target 11 label "-" ] edge [ source 9 target 8 label "=" ] edge [ source 8 target 7 label "-" ] edge [ source 7 target 6 label "=" ] edge [ source 2 target 3 label "-" ] edge [ source 4 target 3 label "-" ] edge [ source 5 target 4 label "=" ] edge [ source 1 target 5 label "-" ] edge [ source 4 target 13 label "-" ] edge [ source 7 target 14 label "-" ] edge [ source 15 target 3 label "-" ] ]""" , name="Adenine") chainN = Rule.fromGMLString( """rule [ left [ edge [ source 1 target 2 label "-" ] edge [ source 1 target 3 label "-" ] edge [ source 4 target 5 label "#" ] ] context [ node [ id 1 label "N" ] node [ id 2 label "H"] node [ id 3 label "H"] node [ id 4 label "C"] node [ id 5 label "N"] ] right [ edge [ source 1 target 4 label "=" ] edge [ source 4 target 5 label "-" ] edge [ source 5 target 2 label "-" ] edge [ source 5 target 3 label "-" ] ] ]""" ) chainC = Rule.fromGMLString( """rule [ left [ edge [ source 1 target 2 label "-" ] edge [ source 1 target 3 label "-" ] edge [ source 3 target 4 label "#" ] edge [ source 5 target 7 label "-" ] ] context [ node [ id 1 label "C" ] node [ id 2 label "H"] node [ id 3 label "C"] node [ id 4 label "N"] node [ id 5 label "H"] node [ id 6 label "H"] node [ id 7 label "N"] edge [ source 6 target 7 label "-" ] ] right [ edge [ source 1 target 3 label "=" ] edge [ source 3 target 4 label "-" ] edge [ source 3 target 7 label "-" ] edge [ source 4 target 2 label "-" ] edge [ source 4 target 5 label "-" ] ] ]""" ) branchtriple = Rule.fromGMLString( """rule [ left [ edge [ source 2 target 3 label "#" ] edge [ source 5 target 6 label "-" ] ] context [ node [ id 1 label "_X" ] node [ id 2 label "C"] node [ id 3 label "N"] node [ id 4 label "N"] node [ id 5 label "C"] node [ id 6 label "_X"] edge [ source 1 target 2 label "-" ] edge [ source 4 target 5 label "#" ] ] right [ edge [ source 2 target 3 label "=" ] edge [ source 3 target 6 label "-" ] edge [ source 2 target 5 label "-" ] ] constrainLabelAny [ label "_X" labels [ label "H" label "C" ] ] ]""" ) branchdouble = Rule.fromGMLString( """rule [ left [ edge [ source 2 target 3 label "=" ] edge [ source 5 target 6 label "-" ] ] context [ node [ id 1 label "_X" ] node [ id 2 label "C"] node [ id 3 label "N"] node [ id 4 label "N"] node [ id 5 label "C"] node [ id 6 label "_X"] edge [ source 1 target 2 label "-" ] edge [ source 4 target 5 label "#" ] ] right [ edge [ source 2 target 3 label "-" ] edge [ source 3 target 6 label "-" ] edge [ source 2 target 5 label "-" ] ] constrainLabelAny [ label "_X" labels [ label "H" label "C" ] ] ]""" ) ##branchtripleH = Rule.fromGMLString( """rule [ left [ edge [ source 2 target 3 label "#" ] edge [ source 5 target 6 label "-" ] ] context [ node [ id 1 label "H" ] node [ id 2 label "C"] node [ id 3 label "N"] node [ id 4 label "N"] node [ id 5 label "C"] node [ id 6 label "H"] edge [ source 1 target 2 label "-" ] edge [ source 4 target 5 label "#" ] ] right [ edge [ source 2 target 3 label "=" ] edge [ source 3 target 6 label "-" ] edge [ source 2 target 5 label "-" ] ] ]""" #) #branchdoubleH = Rule.fromGMLString( """rule [ left [ edge [ source 2 target 3 label "=" ] edge [ source 5 target 6 label "-" ] ] context [ node [ id 1 label "H" ] node [ id 2 label "C"] node [ id 3 label "N"] node [ id 4 label "N"] node [ id 5 label "C"] node [ id 6 label "H"] edge [ source 1 target 2 label "-" ] edge [ source 4 target 5 label "#" ] ] right [ edge [ source 2 target 3 label "-" ] edge [ source 3 target 6 label "-" ] edge [ source 2 target 5 label "-" ] ] ]""" #) #branchtripleC = Rule.fromGMLString( """rule [ left [ edge [ source 2 target 3 label "#" ] edge [ source 5 target 6 label "-" ] ] context [ node [ id 1 label "H" ] node [ id 2 label "C"] node [ id 3 label "N"] node [ id 4 label "N"] node [ id 5 label "C"] node [ id 6 label "C"] edge [ source 1 target 2 label "-" ] edge [ source 4 target 5 label "#" ] ] right [ edge [ source 2 target 3 label "=" ] edge [ source 3 target 6 label "-" ] edge [ source 2 target 5 label "-" ] ] ]""" #) #branchdoubleC = Rule.fromGMLString( """rule [ left [ edge [ source 2 target 3 label "=" ] edge [ source 5 target 6 label "-" ] ] context [ node [ id 1 label "H" ] node [ id 2 label "C"] node [ id 3 label "N"] node [ id 4 label "N"] node [ id 5 label "C"] node [ id 6 label "C"] edge [ source 1 target 2 label "-" ] edge [ source 4 target 5 label "#" ] ] right [ edge [ source 2 target 3 label "-" ] edge [ source 3 target 6 label "-" ] edge [ source 2 target 5 label "-" ] ] ]""" #) flowPrinter = FlowPrinter() flowPrinter.printUnfiltered = False postSection("Loaded Graphs") for a in inputGraphs: a.print() postSection("Loaded Rules") for a in inputRules: a.print() dg = DG(graphDatabase=inputGraphs) dg.build().execute( addSubset(inputGraphs) >> rightPredicate[ lambda d: all(g.vLabelCount("C") + g.vLabelCount("N") <= 10 for g in d.right) ]( repeat(revive(inputRules)) #Revive not necessary ) ) dg.print() postSection("Product Graphs") for a in dg.vertices: a.graph.print() flow = Flow(dg) flow.addSource(cyanide) flow.addSink(adenine) flow.findSolutions(maxNumSolutions=2) #flow.findSolutions() flow.solutions.list() flow.solutions.print(flowPrinter) sys.exit(0) rc = rcEvaluator(inputRules) for dRef in dg.derivations: der = dRef.derivation educt = rcId(der.left[0]) for i in range(1, len(der.left)): educt = educt *rcParallel* rcId(der.left[i]) product = rcId(der.right[0]) for i in range(1, len(der.right)): product = product *rcParallel* rcId(der.right[i]) rcExp = educt *rcSuper(allowPartial=False)* der.rule *rcSuper(allowPartial=False)* product res = rc.eval(rcExp) dRef.print() for a in res: a.print() a.printGML()