use of catdata.fql.decl.TransExp.Return in project fql by CategoricalData.
the class FQLParser method toTrans.
@SuppressWarnings("rawtypes")
private static TransExp toTrans(Object o) {
try {
Tuple4 p = (Tuple4) o;
String src = p.b.toString();
String dst = p.c.toString();
TransExp h = toTrans(p.d);
String kind = p.a.toString();
switch(kind) {
case "delta":
return new TransExp.Delta(h, src, dst);
case "pi":
return new TransExp.Pi(h, src, dst);
case "sigma":
return new TransExp.Sigma(h, src, dst);
case "relationalize":
return new TransExp.Relationalize(h, src, dst);
default:
throw new RuntimeException(o.toString());
}
} catch (RuntimeException ex) {
}
try {
Tuple4 p = (Tuple4) o;
String src = p.b.toString();
String dst = p.c.toString();
String name = p.d.toString();
String kind = p.a.toString();
switch(kind) {
case "external":
return new TransExp.External(src, dst, name);
case "SIGMA":
return new TransExp.FullSigma(name, src, dst);
default:
throw new RuntimeException(o.toString());
}
} catch (RuntimeException ex) {
}
try {
Tuple4 p = (Tuple4) o;
String obj = p.a.toString();
String dst = p.d.toString();
if (p.c.toString().equals("void")) {
return new TransExp.FF(obj, dst);
} else if (p.c.toString().equals("unit")) {
return new TransExp.TT(obj, dst);
} else if (p.c.toString().equals("curry")) {
return new TransCurry(obj, dst);
} else if (p.c.toString().equals("true")) {
return new Bool(true, dst, obj);
} else if (p.c.toString().equals("false")) {
return new Bool(false, dst, obj);
} else if (p.c.toString().equals("char")) {
return new Chi(obj, dst);
}
} catch (RuntimeException re) {
}
try {
Tuple3 p = (Tuple3) o;
Object p2 = p.b;
Object p3 = p.c;
Object o1 = p.a;
String p1 = p.a.toString();
if (p1.equals("iso1")) {
return new TransIso(true, p2.toString(), p3.toString());
} else if (p1.equals("iso2")) {
return new TransIso(false, p2.toString(), p3.toString());
} else if (p3.toString().equals("fst")) {
return new TransExp.Fst(p1);
} else if (p3.toString().equals("not")) {
return new Not(p1);
} else if (p3.toString().equals("and")) {
return new And(p1);
} else if (p3.toString().equals("or")) {
return new Or(p1);
} else if (p3.toString().equals("implies")) {
return new Implies(p1);
} else if (p3.toString().equals("eval")) {
return new TransEval(p1);
} else if (p3.toString().equals("relationalize")) {
return new Squash(p1);
} else if (p3.toString().equals("snd")) {
return new TransExp.Snd(p1);
} else if (p3.toString().equals("return")) {
return new Return(p1);
} else if (p3.toString().equals("coreturn")) {
return new Coreturn(p1);
} else if (p3.toString().equals("inl")) {
return new TransExp.Inl(p1);
} else if (p3.toString().equals("kernel")) {
return new UnChi(p1);
} else if (p3.toString().equals("inr")) {
return new TransExp.Inr(p1);
} else if (p2.toString().equals("then")) {
return new TransExp.Comp(toTrans(o1), toTrans(p3));
} else if (p3 instanceof Tuple3) {
Tuple3 y = (Tuple3) p3;
String x = y.b.toString();
switch(x) {
case "+":
return new TransExp.Case(p1, toTrans(y.a), toTrans(y.c));
case "*":
return new TransExp.Prod(p1, toTrans(y.a), toTrans(y.c));
// return new TransExp.(p1, toTrans(y.a), toTrans(y.c));
default:
throw new RuntimeException("foo");
}
}
} catch (RuntimeException re) {
}
try {
Tuple5 p = (Tuple5) o;
Object p2 = p.c;
Object p3 = p.e;
Object o1 = p.a;
return toTransConst(o1, p2.toString(), p3.toString());
} catch (RuntimeException re) {
}
try {
org.jparsec.functors.Pair p = (org.jparsec.functors.Pair) o;
String p1 = p.a.toString();
Object p2 = p.b;
if (p1.equals("id")) {
return new TransExp.Id(p2.toString());
}
} catch (RuntimeException re) {
}
if (o instanceof String) {
return new TransExp.Var(o.toString());
}
throw new RuntimeException();
}
use of catdata.fql.decl.TransExp.Return in project fql by CategoricalData.
the class InstOps method visit.
@Override
public Pair<List<PSM>, Object> visit(String dst, Plus e) {
SigExp k = e.type(prog);
Signature s = k.toSig(prog);
List<PSM> ret = new LinkedList<>();
for (Node n : s.nodes) {
List<Flower> l = new LinkedList<>();
l.add(new CopyFlower(e.a + "_" + n.string, "c0", "c1"));
l.add(new CopyFlower(e.b + "_" + n.string, "c0", "c1"));
ret.add(new InsertSQL(dst + "_" + n.string, new Union(l), "c0", "c1"));
}
for (Attribute<Node> n : s.attrs) {
List<Flower> l = new LinkedList<>();
l.add(new CopyFlower(e.a + "_" + n.name, "c0", "c1"));
l.add(new CopyFlower(e.b + "_" + n.name, "c0", "c1"));
ret.add(new InsertSQL(dst + "_" + n.name, new Union(l), "c0", "c1"));
}
for (Edge n : s.edges) {
List<Flower> l = new LinkedList<>();
l.add(new CopyFlower(e.a + "_" + n.name, "c0", "c1"));
l.add(new CopyFlower(e.b + "_" + n.name, "c0", "c1"));
ret.add(new InsertSQL(dst + "_" + n.name, new Union(l), "c0", "c1"));
}
ret.addAll(PSMGen.guidify(dst, s, true));
ret.addAll(PSMGen.makeTables(dst + "_inl", s, false));
ret.addAll(PSMGen.makeTables(dst + "_inr", s, false));
for (Node n : s.nodes) {
SQL f = PSMGen.compose(e.a + "_" + n.string, dst + "_" + n.string + "_subst");
ret.add(new InsertSQL(dst + "_inl_" + n.string, f, "c0", "c1"));
SQL f0 = PSMGen.compose(e.b + "_" + n.string, dst + "_" + n.string + "_subst");
ret.add(new InsertSQL(dst + "_inr_" + n.string, f0, "c0", "c1"));
}
// (f+g) : A+B -> C f : A -> C g : B -> C
Fn<Quad<String, String, String, String>, List<PSM>> fn = x -> {
// e.a -> x.third
String f = x.first;
// e.b -> x.third
String g = x.second;
// String C = x.third;
String dst0 = x.fourth;
// must be a map dst -> x.third
List<PSM> ret1 = new LinkedList<>();
for (Node n : s.nodes) {
Flower sql1 = PSMGen.compose(dst + "_" + n.string + "_subst_inv", f + "_" + n.string);
Flower sql2 = PSMGen.compose(dst + "_" + n.string + "_subst_inv", g + "_" + n.string);
List<Flower> flowers = new LinkedList<>();
flowers.add(sql1);
flowers.add(sql2);
ret1.add(new InsertSQL(dst0 + "_" + n.string, new Union(flowers), "c0", "c1"));
}
return ret1;
};
return new Pair<>(ret, fn);
}
use of catdata.fql.decl.TransExp.Return in project fql by CategoricalData.
the class InstOps method visit.
@Override
public Pair<List<PSM>, Object> visit(String dst, Times e) {
try {
SigExp k = e.type(prog);
Signature s = k.toSig(prog);
List<PSM> ret = new LinkedList<>();
ret.addAll(PSMGen.makeTables(dst + "_fst", s, false));
ret.addAll(PSMGen.makeTables(dst + "_snd", s, false));
Pair<Map<Node, List<Pair<Path, Attribute<Node>>>>, List<PSM>> l_obs = Relationalizer.observations(s, dst + "_l_obs", e.a, false);
Pair<Map<Node, List<Pair<Path, Attribute<Node>>>>, List<PSM>> r_obs = Relationalizer.observations(s, dst + "_r_obs", e.b, false);
if (!(l_obs.first.equals(r_obs.first))) {
throw new RuntimeException("Internal error, please report.");
}
ret.addAll(PSMGen.makeTables(dst + "_l_obs", s, false));
ret.addAll(l_obs.second);
ret.addAll(PSMGen.dropTables(dst + "_l_obs", s));
ret.addAll(PSMGen.makeTables(dst + "_r_obs", s, false));
ret.addAll(r_obs.second);
ret.addAll(PSMGen.dropTables(dst + "_r_obs", s));
for (Node n : s.nodes) {
List<Pair<Path, Attribute<Node>>> lats = l_obs.first.get(n);
// List<Pair<Path, Attribute<Node>>> rats = r_obs.first.get(n);
LinkedHashMap<String, Pair<String, String>> select = new LinkedHashMap<>();
Map<String, String> from = new HashMap<>();
List<String> attrs = new LinkedList<>();
Map<String, String> attrsM = new HashMap<>();
List<Pair<Pair<String, String>, Pair<String, String>>> where = new LinkedList<>();
from.put("lft", dst + "_l_obs_" + n.string + "_observables");
from.put("rght", dst + "_r_obs_" + n.string + "_observables");
attrs.add("lft");
attrs.add("rght");
attrsM.put("lft", PSM.VARCHAR());
attrsM.put("rght", PSM.VARCHAR());
select.put("lft", new Pair<>("lft", "id"));
select.put("rght", new Pair<>("rght", "id"));
int idx = 0;
for (Pair<Path, Attribute<Node>> aa : lats) {
Attribute<Node> a = aa.second;
where.add(new Pair<>(new Pair<>("lft", "c" + idx), new Pair<>("rght", "c" + idx)));
select.put("c" + idx, new Pair<>("lft", "c" + idx));
attrs.add("c" + idx);
attrsM.put("c" + idx, a.target.psm());
idx++;
}
Flower f = new Flower(select, from, where);
ret.add(new CreateTable(dst + "_prod_temp_" + n.string, attrsM, false));
ret.add(new InsertSQL2(dst + "_prod_temp_" + n.string, f, attrs));
Map<String, String> attrsM0 = new HashMap<>(attrsM);
attrsM0.put("gguid", PSM.VARCHAR());
ret.add(new CreateTable(dst + "_prod_guid_" + n.string, attrsM0, false));
ret.add(new InsertKeygen(dst + "_prod_guid_" + n.string, "gguid", dst + "_prod_temp_" + n.string, attrs));
List<Pair<Pair<String, String>, Pair<String, String>>> where0 = new LinkedList<>();
from = new HashMap<>();
from.put("t", dst + "_prod_guid_" + n.string);
select = new LinkedHashMap<>();
select.put("c0", new Pair<>("t", "gguid"));
select.put("c1", new Pair<>("t", "lft"));
f = new Flower(select, from, where0);
ret.add(new InsertSQL(dst + "_fst_" + n, f, "c0", "c1"));
from = new HashMap<>();
from.put("t", dst + "_prod_guid_" + n.string);
select = new LinkedHashMap<>();
select.put("c0", new Pair<>("t", "gguid"));
select.put("c1", new Pair<>("t", "rght"));
f = new Flower(select, from, where0);
ret.add(new InsertSQL(dst + "_snd_" + n, f, "c0", "c1"));
LinkedHashMap<String, Pair<String, String>> select0 = new LinkedHashMap<>();
select0.put("c0", new Pair<>("t", "gguid"));
select0.put("c1", new Pair<>("t", "gguid"));
Map<String, String> from0 = new HashMap<>();
from0.put("t", dst + "_prod_guid_" + n.string);
Flower sql = new Flower(select0, from0, where0);
ret.add(new InsertSQL(dst + "_" + n.string, sql, "c0", "c1"));
for (Attribute<Node> a : s.attrsFor(n)) {
select0 = new LinkedHashMap<>();
select0.put("c0", new Pair<>("t", "gguid"));
Arr<Node, Path> ppp = s.toCategory2().first.id(n);
int ppp0 = lats.indexOf(new Pair<>(ppp.arr, a));
select0.put("c1", new Pair<>("t", "c" + ppp0));
from0 = new HashMap<>();
from0.put("t", dst + "_prod_guid_" + n.string);
sql = new Flower(select0, from0, where0);
ret.add(new InsertSQL(dst + "_" + a.name, sql, "c0", "c1"));
}
// ret.add(new DropTable(dst + "_prod_temp_" + n));
}
for (Edge edge : s.edges) {
Map<String, String> from = new HashMap<>();
from.put("leftEdge", e.a + "_" + edge.name);
from.put("rightEdge", e.b + "_" + edge.name);
from.put("srcGuid", dst + "_prod_guid_" + edge.source);
from.put("dstGuid", dst + "_prod_guid_" + edge.target);
List<Pair<Pair<String, String>, Pair<String, String>>> where = new LinkedList<>();
where.add(new Pair<>(new Pair<>("leftEdge", "c0"), new Pair<>("srcGuid", "lft")));
where.add(new Pair<>(new Pair<>("rightEdge", "c0"), new Pair<>("srcGuid", "rght")));
where.add(new Pair<>(new Pair<>("leftEdge", "c1"), new Pair<>("dstGuid", "lft")));
where.add(new Pair<>(new Pair<>("rightEdge", "c1"), new Pair<>("dstGuid", "rght")));
LinkedHashMap<String, Pair<String, String>> select = new LinkedHashMap<>();
select.put("c0", new Pair<>("srcGuid", "gguid"));
select.put("c1", new Pair<>("dstGuid", "gguid"));
Flower f = new Flower(select, from, where);
ret.add(new InsertSQL(dst + "_" + edge.name, f, "c0", "c1"));
}
Fn<Quad<String, String, String, String>, List<PSM>> fn = x -> {
// x.third -> e.a
String f = x.first;
// x.third -> e.b
String g = x.second;
// String C = x.third;
String dst0 = x.fourth;
// must be a map x.third -> dst
List<PSM> ret1 = new LinkedList<>();
for (Node n : s.nodes) {
List<Pair<Pair<String, String>, Pair<String, String>>> where = new LinkedList<>();
Map<String, String> from = new HashMap<>();
from.put("f", f + "_" + n.string);
from.put("g", g + "_" + n.string);
from.put("lim", dst + "_prod_guid_" + n.string);
where.add(new Pair<>(new Pair<>("f", "c0"), new Pair<>("g", "c0")));
where.add(new Pair<>(new Pair<>("lim", "lft"), new Pair<>("f", "c1")));
where.add(new Pair<>(new Pair<>("lim", "rght"), new Pair<>("g", "c1")));
LinkedHashMap<String, Pair<String, String>> select = new LinkedHashMap<>();
select.put("c0", new Pair<>("f", "c0"));
select.put("c1", new Pair<>("lim", "gguid"));
Flower flower = new Flower(select, from, where);
ret1.add(new InsertSQL(dst0 + "_" + n.string, flower, "c0", "c1"));
}
return ret1;
};
return new Pair<>(ret, fn);
} catch (FQLException fe) {
throw new RuntimeException(fe.getLocalizedMessage());
}
}
Aggregations