use of catdata.fql.decl.Node in project fql by CategoricalData.
the class PSMGen method gather.
public static List<Pair<String, List<Pair<Object, Object>>>> gather(String pre, Signature sig, Map<String, Set<Map<Object, Object>>> state) {
List<Pair<String, List<Pair<Object, Object>>>> ret = new LinkedList<>();
for (Node n : sig.nodes) {
Set<Map<Object, Object>> v = state.get(pre + "_" + n.string);
if (v == null) {
throw new RuntimeException("Missing: " + pre + "_" + n.string + " in " + state.keySet());
}
ret.add(new Pair<>(n.string, gather0(v)));
}
for (Edge e : sig.edges) {
Set<Map<Object, Object>> v = state.get(pre + "_" + e.name);
ret.add(new Pair<>(e.name, gather0(v)));
}
for (Attribute<Node> a : sig.attrs) {
Set<Map<Object, Object>> v = state.get(pre + "_" + a.name);
ret.add(new Pair<>(a.name, gather0(v)));
}
return ret;
}
use of catdata.fql.decl.Node in project fql by CategoricalData.
the class PSMGen method shred.
public static void shred(String pre, Transform I, Map<String, Set<Map<Object, Object>>> state) {
for (Node n : I.src.thesig.nodes) {
Set<Map<Object, Object>> m = new HashSet<>();
for (Pair<Object, Object> k : I.data.get(n.string)) {
Map<Object, Object> map = new HashMap<>();
map.put("c0", k.first);
map.put("c1", k.second);
m.add(map);
}
state.put(pre + "_" + n.string, m);
}
for (Edge n : I.src.thesig.edges) {
state.put(pre + "_" + n.name, new HashSet<>());
}
for (Attribute<Node> n : I.src.thesig.attrs) {
state.put(pre + "_" + n.name, new HashSet<>());
}
}
use of catdata.fql.decl.Node in project fql by CategoricalData.
the class PSMNot method calcSub.
private Instance calcSub(Signature sig0, Triple<Instance, Map<Object, Path>, Map<Path, Object>> Hc, Instance A) throws FQLException {
Map<String, Set<Pair<Object, Object>>> notA_data = new HashMap<>();
for (Node d : sig.nodes) {
Set<Pair<Object, Object>> dd = new HashSet<>();
xxx: for (Object f : Hc.first.getNode(d)) {
Path ff = Hc.second.get(f);
// boolean b = true;
for (Node d0 : sig.nodes) {
for (Arr<Node, Path> g : sig.toCategory2().first.hom(d, d0)) {
Arr<Node, Path> fg = sig.toCategory2().first.compose(sig.toCategory2().second.of(ff), g);
Object xxx = Hc.third.get(fg.arr);
if (xxx == null) {
throw new RuntimeException();
}
if (A.getNode(d0).contains(xxx)) {
continue xxx;
}
}
}
dd.add(new Pair<>(f, f));
}
notA_data.put(d.string, dd);
}
for (Edge h : sig.edges) {
Set<Pair<Object, Object>> dd = new HashSet<>();
for (Pair<Object, Object> oo : notA_data.get(h.source.string)) {
Object f = oo.first;
Path ff = Hc.second.get(f);
Arr<Node, Path> fg = sig.toCategory2().first.compose(sig.toCategory2().second.of(ff), sig.toCategory2().second.of(new Path(sig, h)));
Object xxx = Hc.third.get(fg.arr);
dd.add(new Pair<>(f, xxx));
}
notA_data.put(h.name, dd);
}
Instance notA = new Instance(sig0, notA_data);
return notA;
}
use of catdata.fql.decl.Node in project fql by CategoricalData.
the class PropPSM method exec.
@Override
public void exec(PSMInterp interp, Map<String, Set<Map<Object, Object>>> state) {
try {
IntRef ref = new IntRef(interp.guid);
Signature sigX = new Signature(sig.nodes, sig.edges, new LinkedList<>(), sig.eqs);
Map<Node, List<Pair<Arr<Node, Path>, Attribute<Node>>>> obs = sig.obs();
Pair<FinCat<Node, Path>, Fn<Path, Arr<Node, Path>>> ooo = sig.toCategory2();
Fn<Path, Arr<Node, Path>> fn = ooo.second;
Pair<Pair<Map<Node, Triple<Instance, Map<Object, Path>, Map<Path, Object>>>, Map<Edge, Transform>>, Pair<Instance, Map<Node, Pair<Map<Object, Instance>, Map<Instance, Object>>>>> xxx = sigX.omega(ref);
interp.prop1.put(pre, xxx.first);
interp.prop2.put(pre, xxx.second);
Instance old = xxx.second.first;
Map<Node, List<LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>>> m = sig.obsbar();
Map<String, Set<Pair<Object, Object>>> data = new HashMap<>();
Map<Node, Map<Object, Pair<Object, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>>>> m1 = new HashMap<>();
Map<Node, Map<Pair<Object, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>>, Object>> m2 = new HashMap<>();
for (Node n : sig.nodes) {
Map<Object, Pair<Object, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>>> map1 = new HashMap<>();
Map<Pair<Object, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>>, Object> map2 = new HashMap<>();
Set<Pair<Object, Object>> set = new HashSet<>();
m1.put(n, map1);
m2.put(n, map2);
for (Pair<Object, Object> i1 : old.data.get(n.string)) {
for (LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> i2 : m.get(n)) {
Object o = Integer.toString(++ref.i);
map1.put(o, new Pair<>(i1.first, i2));
map2.put(new Pair<>(i1.first, i2), o);
set.add(new Pair<>(o, o));
}
}
data.put(n.string, set);
}
for (Attribute<Node> a : sig.attrs) {
Set<Pair<Object, Object>> set = new HashSet<>();
for (Pair<Object, Object> k : data.get(a.source.string)) {
Pair<Object, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>> kk = m1.get(a.source).get(k.first);
// Object old_id = kk.first;
LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> new_id = kk.second;
set.add(new Pair<>(k.first, new_id.get(new Pair<>(new Arr<>(new Path(sig, a.source), a.source, a.source), a))));
}
data.put(a.name, set);
}
for (Edge a : sig.edges) {
Set<Pair<Object, Object>> set = new HashSet<>();
for (Pair<Object, Object> k : data.get(a.source.string)) {
Pair<Object, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>> kk = m1.get(a.source).get(k.first);
Object old_id = kk.first;
Object old_id0 = lookup(old.data.get(a.name), old_id);
LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> new_id = kk.second;
LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> new_id0 = truncate2(sig, new_id, fn.of(new Path(sig, a)), obs.get(a.target));
Object o = m2.get(a.target).get(new Pair<>(old_id0, new_id0));
set.add(new Pair<>(k.first, o));
}
data.put(a.name, set);
}
interp.prop3.put(pre, m1);
interp.prop4.put(pre, m2);
Instance ne = new Instance(sig, data);
PSMGen.shred(pre, ne, state);
interp.guid = ref.i;
} catch (FQLException fe) {
fe.printStackTrace();
throw new RuntimeException(fe.getMessage());
}
}
use of catdata.fql.decl.Node in project fql by CategoricalData.
the class Relationalizer method applySubst.
private static Collection<PSM> applySubst(Signature sig, Node N, String out) {
List<PSM> ret = new LinkedList<>();
Map<String, String> attrs = new HashMap<>();
attrs.put("c0", PSM.VARCHAR());
attrs.put("c1", PSM.VARCHAR());
List<Pair<Pair<String, String>, Pair<String, String>>> where = new LinkedList<>();
Map<String, String> from = new HashMap<>();
LinkedHashMap<String, Pair<String, String>> select = new LinkedHashMap<>();
from.put(N + "_squash", out + "_" + N + "_squash");
select.put("c0", new Pair<>(N + "_squash", "c1"));
select.put("c1", new Pair<>(N + "_squash", "c1"));
Flower f = new Flower(select, from, where);
ret.add(new CreateTable(out + "_" + N + "_relationalize_temp", attrs, false));
ret.add(new InsertSQL(out + "_" + N + "_relationalize_temp", f, "c0", "c1"));
ret.add(new DropTable(out + "_" + N.string));
ret.add(new CreateTable(out + "_" + N.string, attrs, false));
ret.add(new InsertSQL(out + "_" + N.string, new CopyFlower(out + "_" + N + "_relationalize_temp", "c0", "c1"), "c0", "c1"));
ret.add(new DropTable(out + "_" + N + "_relationalize_temp"));
for (Edge n : sig.edges) {
if (!n.source.equals(N)) {
continue;
}
where = new LinkedList<>();
from = new HashMap<>();
select = new LinkedHashMap<>();
from.put(N + "_squash", out + "_" + N + "_squash");
from.put(out + "_" + n.name, out + "_" + n.name);
where.add(new Pair<>(new Pair<>(N + "_squash", "c0"), new Pair<>(out + "_" + n.name, "c0")));
select.put("c0", new Pair<>(N + "_squash", "c1"));
select.put("c1", new Pair<>(out + "_" + n.name, "c1"));
f = new Flower(select, from, where);
ret.add(new CreateTable(out + "_" + n.name + "_relationalize_temp", attrs, false));
ret.add(new InsertSQL(out + "_" + n.name + "_relationalize_temp", f, "c0", "c1"));
ret.add(new DropTable(out + "_" + n.name));
ret.add(new CreateTable(out + "_" + n.name, attrs, false));
ret.add(new InsertSQL(out + "_" + n.name, new CopyFlower(out + "_" + n.name + "_relationalize_temp", "c0", "c1"), "c0", "c1"));
ret.add(new DropTable(out + "_" + n.name + "_relationalize_temp"));
}
for (Attribute<Node> n : sig.attrs) {
if (!n.source.equals(N)) {
continue;
}
where = new LinkedList<>();
from = new HashMap<>();
select = new LinkedHashMap<>();
from.put(N + "_squash", out + "_" + N + "_squash");
from.put(out + "_" + n.name, out + "_" + n.name);
where.add(new Pair<>(new Pair<>(N + "_squash", "c0"), new Pair<>(out + "_" + n.name, "c0")));
select.put("c0", new Pair<>(N + "_squash", "c1"));
select.put("c1", new Pair<>(out + "_" + n.name, "c1"));
f = new Flower(select, from, where);
ret.add(new CreateTable(out + "_" + "relationalize_temp", attrs, false));
ret.add(new InsertSQL(out + "_" + "relationalize_temp", f, "c0", "c1"));
ret.add(new DropTable(out + "_" + n.name));
ret.add(new CreateTable(out + "_" + n.name, attrs, false));
ret.add(new InsertSQL(out + "_" + n.name, new CopyFlower(out + "_" + "relationalize_temp", "c0", "c1"), "c0", "c1"));
ret.add(new DropTable(out + "_" + "relationalize_temp"));
}
for (Edge n : sig.edges) {
if (!n.target.equals(N)) {
continue;
}
where = new LinkedList<>();
from = new HashMap<>();
select = new LinkedHashMap<>();
from.put(N + "_squash", out + "_" + N + "_squash");
from.put(out + "_" + n.name, out + "_" + n.name);
where.add(new Pair<>(new Pair<>(N + "_squash", "c0"), new Pair<>(out + "_" + n.name, "c1")));
select.put("c0", new Pair<>(out + "_" + n.name, "c0"));
select.put("c1", new Pair<>(N + "_squash", "c1"));
f = new Flower(select, from, where);
ret.add(new CreateTable(out + "_" + "relationalize_temp", attrs, false));
ret.add(new InsertSQL(out + "_" + "relationalize_temp", f, "c0", "c1"));
ret.add(new DropTable(out + "_" + n.name));
ret.add(new CreateTable(out + "_" + n.name, attrs, false));
ret.add(new InsertSQL(out + "_" + n.name, new CopyFlower(out + "_" + "relationalize_temp", "c0", "c1"), "c0", "c1"));
ret.add(new DropTable(out + "_" + "relationalize_temp"));
}
return ret;
}
Aggregations