diff --git a/mod/cyanide/cyanideWildcard.py b/mod/cyanide/cyanideWildcard.py new file mode 100644 index 0000000..859ec3a --- /dev/null +++ b/mod/cyanide/cyanideWildcard.py @@ -0,0 +1,303 @@ +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 "_" ] + node [ id 2 label "C"] + node [ id 3 label "N"] + node [ id 4 label "N"] + node [ id 5 label "C"] + node [ id 6 label "_"] + 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 "_" 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 "_" ] + node [ id 2 label "C"] + node [ id 3 label "N"] + node [ id 4 label "N"] + node [ id 5 label "C"] + node [ id 6 label "_"] + 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 "_" 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 "-" ] + ] +]""" +#) + +def restriction(dg): + for a in dg.right: + if a.vLabelCount("C") + a.vLabelCount("N") > 8: + return False + return True + +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, + labelSettings=LabelSettings( + LabelType.Term, + LabelRelation.Specialisation, + LabelRelation.Specialisation)) +dg.build().execute( + addSubset(inputGraphs) + >> rightPredicate[ + restriction + ]( + 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() \ No newline at end of file