use of catdata.fql.sql.CopyFlower in project fql by CategoricalData.
the class InstOps method visit.
@Override
public List<PSM> visit(String dst, Inl e) {
List<PSM> ret = new LinkedList<>();
InstExp k = prog.insts.get(e.obj);
Signature t = k.type(prog).toSig(prog);
for (Node n : t.nodes) {
ret.add(new InsertSQL(dst + "_" + n.string, new CopyFlower(e.obj + "_inl_" + n.string, "c0", "c1"), "c0", "c1"));
}
return ret;
}
use of catdata.fql.sql.CopyFlower in project fql by CategoricalData.
the class InstOps method visit.
@Override
public List<PSM> visit(String env, UnChi e) {
List<PSM> ret = new LinkedList<>();
Signature sig = prog.insts.get(e.a).type(prog).toSig(prog);
for (Node n : sig.nodes) {
ret.add(new InsertSQL(env + "_" + n.string, new CopyFlower(e.a + "_trans_" + n, "c0", "c1"), "c0", "c1"));
}
return ret;
}
use of catdata.fql.sql.CopyFlower in project fql by CategoricalData.
the class InstOps method visit.
@Override
public List<PSM> visit(String dst, Fst e) {
List<PSM> ret = new LinkedList<>();
InstExp k = prog.insts.get(e.obj);
Signature t = k.type(prog).toSig(prog);
for (Node n : t.nodes) {
ret.add(new InsertSQL(dst + "_" + n.string, new CopyFlower(e.obj + "_fst_" + n.string, "c0", "c1"), "c0", "c1"));
}
return ret;
}
use of catdata.fql.sql.CopyFlower in project fql by CategoricalData.
the class InstOps method visit.
@Override
public List<PSM> visit(String dst, TransExp.Sigma e) {
List<PSM> ret = new LinkedList<>();
Pair<String, String> ht = e.h.type(prog);
Signature sig = prog.insts.get(ht.first).type(prog).toSig(prog);
Mapping F = ((Sigma) prog.insts.get(e.src)).F.toMap(prog);
String next = next();
ret.addAll(PSMGen.makeTables(next, sig, false));
ret.addAll(e.h.accept(next, this));
Signature sig2 = prog.insts.get(e.src).type(prog).toSig(prog);
String xxx = "sigfunc";
ret.addAll(PSMGen.makeTables(xxx, sig2, false));
for (Node n : sig2.nodes) {
List<Flower> l = new LinkedList<>();
for (Node m : F.source.nodes) {
if (F.nm.get(m).equals(n)) {
l.add(new CopyFlower(next + "_" + m.string, "c0", "c1"));
}
}
String yyy = xxx + "_" + n.string;
if (l.isEmpty()) {
ret.add(new InsertSQL(yyy, l.get(0), "c0", "c1"));
} else {
ret.add(new InsertSQL(yyy, new Union(l), "c0", "c1"));
}
ret.add(new InsertSQL(dst + "_" + n.string, PSMGen.compose(e.src + "_" + n.string + "_subst_inv", yyy, e.dst + "_" + n.string + "_subst"), "c0", "c1"));
}
ret.addAll(PSMGen.dropTables(xxx, sig2));
ret.addAll(PSMGen.dropTables(next, sig));
return ret;
}
use of catdata.fql.sql.CopyFlower 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);
}
Aggregations