use of edu.cmu.ml.proppr.prove.wam.StateProofGraph in project ProPPR by TeamCohen.
the class SimpleProgramProverTest method testFill.
@Test
public void testFill() throws IOException, LogicProgramException {
WamProgram program = WamBaseProgram.load(new File(PROGRAM));
Query q = new Query(new Goal("coworker", new ConstantArgument("steve"), new ConstantArgument("X")));
System.out.println("Query: " + q.toString());
ProofGraph p = new StateProofGraph(q, apr, program);
Prover prover = new DfsProver(apr);
Map<State, Double> sols = prover.prove(p, new StatusLogger());
// assertEquals(2,sols.size());
HashMap<String, Integer> expected = new HashMap<String, Integer>();
expected.put("steve", 0);
expected.put("sven", 0);
System.out.println("Query: " + q.toString());
for (State s : sols.keySet()) {
if (!s.isCompleted())
continue;
System.out.println(s);
Query a = p.fill(s);
System.out.println(a);
String v = a.getRhs()[0].getArg(1).getName();
System.out.println("Got solution: " + v);
if (expected.containsKey(v))
expected.put(v, expected.get(v) + 1);
}
for (Map.Entry<String, Integer> e : expected.entrySet()) assertEquals(e.getKey(), 1, e.getValue().intValue());
}
use of edu.cmu.ml.proppr.prove.wam.StateProofGraph in project ProPPR by TeamCohen.
the class UngroundedSolutionsTest method test.
@Test
public void test() throws IOException, LogicProgramException {
WamProgram program = WamBaseProgram.load(new File(PROGRAM));
APROptions apr = new APROptions("depth=20");
WamPlugin facts = LightweightGraphPlugin.load(apr, new File(FACTS));
Query q = new Query(new Goal("grandparent", new ConstantArgument("X"), new ConstantArgument("Y")));
// q.variabilize();
StateProofGraph pg = new StateProofGraph(q, apr, program, facts);
Prover p = new DfsProver(apr);
Map<State, Double> ans = p.prove(pg, new StatusLogger());
// Map<LogicProgramState,Double> ans = p.proveState(program, new ProPPRLogicProgramState(Goal.decompile("grandparent,-1,-2")));
System.out.println("===");
for (State s : ans.keySet()) {
if (s.isCompleted()) {
System.out.println(s);
Map<Argument, String> dict = pg.asDict(s);
System.out.println(Dictionary.buildString(dict, new StringBuilder(), "\n\t").substring(1));
for (String a : dict.values()) {
// a = a.substring(a.indexOf(":"));
assertFalse(a.startsWith("X"));
}
}
}
// System.out.println("===");
// for (String s : Prover.filterSolutions(ans).keySet()) {
// System.out.println(s);
// assertFalse("Filtered solutions contain variables",s.contains("v["));
// }
}
use of edu.cmu.ml.proppr.prove.wam.StateProofGraph in project ProPPR by TeamCohen.
the class WeightedEdgeTest method testOne.
public void testOne(APROptions apr, WamPlugin plug) throws IOException, LogicProgramException {
Prover p = new DprProver(apr);
WamProgram program = WamBaseProgram.load(RULES);
WamPlugin[] plugins = new WamPlugin[] { plug };
Grounder grounder = new Grounder(apr, p, program, plugins);
assertTrue("Missing weighted functor", plugins[0].claim("hasWord#/3"));
Query query = Query.parse("words(p1,W)");
ProofGraph pg = new StateProofGraph(new InferenceExample(query, new Query[] { Query.parse("words(p1,good)") }, new Query[] { Query.parse("words(p1,thing)") }), apr, new SimpleSymbolTable<Feature>(), program, plugins);
// Map<String,Double> m = p.solutions(pg);
// System.out.println(Dictionary.buildString(m, new StringBuilder(), "\n").toString());
GroundedExample ex = grounder.groundExample(p, pg);
String serialized = ex.getGraph().serialize(true).replaceAll("\t", "\n");
//String serialized = grounder.serializeGroundedExample(pg, ex).replaceAll("\t", "\n");
System.out.println(serialized);
assertTrue("Label weights must appear in ground graph (0.9)", serialized.indexOf("0.9") >= 0);
assertTrue("Label weights must appear in ground graph (0.1)", serialized.indexOf("0.1") >= 0);
// Map<String,Double> m = p.solvedQueries(pg);
// System.out.println(Dictionary.buildString(m, new StringBuilder(), "\n"));
Query query2 = Query.parse("words2(p1,W)");
ProofGraph pg2 = new StateProofGraph(new InferenceExample(query2, new Query[] { Query.parse("words(p1,good)") }, new Query[] { Query.parse("words(p1,thing)") }), apr, new SimpleSymbolTable<Feature>(), program, plugins);
// Map<String,Double> m = p.solutions(pg);
// System.out.println(Dictionary.buildString(m, new StringBuilder(), "\n").toString());
GroundedExample ex2 = grounder.groundExample(p, pg2);
String serialized2 = ex2.getGraph().serialize(true).replaceAll("\t", "\n");
//String serialized = grounder.serializeGroundedExample(pg, ex).replaceAll("\t", "\n");
System.out.println(serialized2);
assertTrue("Label weights must appear in ground graph (0.9)", serialized2.indexOf("0.9") >= 0);
assertTrue("Label weights must appear in ground graph (0.1)", serialized2.indexOf("0.1") >= 0);
}
use of edu.cmu.ml.proppr.prove.wam.StateProofGraph in project ProPPR by TeamCohen.
the class WeightedFeaturesTest method testAsGraph.
@Test
public void testAsGraph() throws IOException, LogicProgramException {
APROptions apr = new APROptions();
Prover p = new DprProver(apr);
WamProgram program = WamBaseProgram.load(RULES);
WamPlugin[] plugins = new WamPlugin[] { FactsPlugin.load(apr, LABELS, false), LightweightGraphPlugin.load(apr, WORDSGRAPH, -1) };
Grounder grounder = new Grounder(apr, p, program, plugins);
assertTrue(plugins[1].claim("hasWord#/3"));
Query query = Query.parse("predict(p1,Y)");
ProofGraph pg = new StateProofGraph(new InferenceExample(query, new Query[] { Query.parse("predict(p1,pos)") }, new Query[] { Query.parse("predict(p1,neg)") }), apr, new SimpleSymbolTable<Feature>(), program, plugins);
GroundedExample ex = grounder.groundExample(p, pg);
String serialized = grounder.serializeGroundedExample(pg, ex).replaceAll("\t", "\n");
System.out.println(serialized);
// hack
assertTrue("Word weights must appear in ground graph", serialized.indexOf("0.9") > 0);
assertTrue("Word weights must appear in ground graph", serialized.indexOf("0.1") > 0);
}
use of edu.cmu.ml.proppr.prove.wam.StateProofGraph in project ProPPR by TeamCohen.
the class BoundVariableGraphTest method test.
@Test
public void test() throws IOException, LogicProgramException {
APROptions apr = new APROptions();
Prover p = new DprProver(apr);
// Prover p = new TracingDfsProver(apr);
WamProgram program = WamBaseProgram.load(RULES);
WamPlugin[] plugins = new WamPlugin[] { LightweightGraphPlugin.load(apr, GRAPH) };
Grounder grounder = new Grounder(apr, p, program, plugins);
Query query = Query.parse("hasWord(p1,good)");
ProofGraph pg = new StateProofGraph(new InferenceExample(query, new Query[] { Query.parse("hasWord(p1,good)") }, new Query[0]), apr, new SimpleSymbolTable<Feature>(), program, plugins);
// Map<String,Double> m = p.solutions(pg);
// System.out.println(Dictionary.buildString(m, new StringBuilder(), "\n").toString());
GroundedExample ex = grounder.groundExample(p, pg);
ex.getGraph().serialize();
String serialized = grounder.serializeGroundedExample(pg, ex).replaceAll("\t", "\n");
System.out.println(serialized);
assertEquals("Too many edges", 4, ex.getGraph().edgeSize());
// Map<String,Double> m = p.solvedQueries(pg);
// System.out.println(Dictionary.buildString(m, new StringBuilder(), "\n"));
}
Aggregations