Search in sources :

Example 21 with FQLException

use of catdata.fql.FQLException in project fql by CategoricalData.

the class PSMBool method exec.

@Override
public void exec(PSMInterp interp, Map<String, Set<Map<Object, Object>>> state) {
    try {
        Signature sig0 = new Signature(sig.nodes, sig.edges, new LinkedList<>(), sig.eqs);
        Instance unitI = new Instance(sig, PSMGen.gather(unit, sig, state));
        Instance propI = new Instance(sig, PSMGen.gather(prop, sig, state));
        Map<Node, Map<Object, Object>> subst_inv = new HashMap<>();
        for (Node n : sig.nodes) {
            Map<Object, Object> m = new HashMap<>();
            Set<Map<Object, Object>> g = state.get(unit + "_" + n + "_subst_inv");
            for (Map<Object, Object> j : g) {
                m.put(j.get("c0"), j.get("c1"));
            }
            subst_inv.put(n, m);
        }
        List<Pair<String, List<Pair<Object, Object>>>> data = new LinkedList<>();
        for (Node n : sig.nodes) {
            List<Pair<Object, Object>> set = new LinkedList<>();
            for (Pair<Object, Object> k : unitI.data.get(n.string)) {
                Object k0 = subst_inv.get(n).get(k.first);
                if (k0 == null) {
                    throw new RuntimeException();
                }
                LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> v = m1.get(n).get(k0);
                Instance tofind = bool ? interp.prop1.get(prop).first.get(n).first : new Instance(sig0);
                Object found = interp.prop2.get(prop).second.get(n).second.get(tofind);
                Object r = interp.prop4.get(prop).get(n).get(new Pair<>(found, v));
                set.add(new Pair<>(k.first, r));
            }
            data.add(new Pair<>(n.string, set));
        }
        Transform ret = new Transform(unitI, propI, data);
        PSMGen.shred(pre, ret, state);
    } catch (FQLException fe) {
        fe.printStackTrace();
        throw new RuntimeException(fe.getMessage());
    }
}
Also used : Path(catdata.fql.decl.Path) Instance(catdata.fql.decl.Instance) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Node(catdata.fql.decl.Node) LinkedList(java.util.LinkedList) FQLException(catdata.fql.FQLException) Signature(catdata.fql.decl.Signature) Transform(catdata.fql.decl.Transform) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Pair(catdata.Pair)

Example 22 with FQLException

use of catdata.fql.FQLException in project fql by CategoricalData.

the class PSMChi method exec.

@Override
public void exec(PSMInterp interp, Map<String, Set<Map<Object, Object>>> state) {
    try {
        Instance I = new Instance(sig, PSMGen.gather(a, sig, state));
        Instance Jfull = new Instance(fullSig, PSMGen.gather(b, fullSig, state));
        Instance J = new Instance(sig, PSMGen.gather(b, sig, state));
        Instance Pfull = new Instance(fullSig, PSMGen.gather(prop, fullSig, state));
        Instance P = interp.prop2.get(prop).first;
        Transform t = new Transform(I, J, PSMGen.gather(f, sig, state));
        List<Pair<String, List<Pair<Object, Object>>>> data = new LinkedList<>();
        for (Node c : sig.nodes) {
            List<Pair<Object, Object>> l = new LinkedList<>();
            Instance Hc = interp.prop1.get(prop).first.get(c).first;
            for (Pair<Object, Object> x : J.data.get(c.string)) {
                List<Pair<String, List<Pair<Object, Object>>>> z = new LinkedList<>();
                for (Node d : sig.nodes) {
                    List<Pair<Object, Object>> y = new LinkedList<>();
                    for (Pair<Object, Object> ff : Hc.data.get(d.string)) {
                        // c->d
                        Path f = interp.prop1.get(prop).first.get(c).second.get(ff.first);
                        Object xd = lookup(J.evaluate(f), x.first);
                        y.add(new Pair<>(ff.first, xd));
                    }
                    z.add(new Pair<>(d.string, y));
                }
                Transform xx = new Transform(Hc, J, z);
                Map<String, Set<Pair<Object, Object>>> q = new HashMap<>();
                for (Node d : sig.nodes) {
                    Set<Pair<Object, Object>> g = new HashSet<>();
                    for (Pair<Object, Object> y : Hc.data.get(d.string)) {
                        if (proj2(t.data.get(d.string)).contains(lookup(xx.data.get(d.string), y.first))) {
                            g.add(y);
                        }
                    }
                    q.put(d.string, g);
                }
                for (Edge e : sig.edges) {
                    Set<Pair<Object, Object>> set = new HashSet<>();
                    for (Pair<Object, Object> j : Hc.data.get(e.name)) {
                        if (proj1(q.get(e.source.string)).contains(j.first) && proj2(q.get(e.target.string)).contains(j.second)) {
                            set.add(j);
                        }
                    }
                    q.put(e.name, set);
                }
                // also do edges
                Instance pb = new Instance(sig, q);
                Object fnl = interp.prop2.get(prop).second.get(c).second.get(pb);
                l.add(new Pair<>(x.first, fnl));
            }
            data.add(new Pair<>(c.string, l));
        }
        Transform ret = new Transform(J, P, data);
        List<Pair<String, List<Pair<Object, Object>>>> dataFull = new LinkedList<>();
        for (Node n : sig.nodes) {
            List<Pair<Object, Object>> set = new LinkedList<>();
            for (Pair<Object, Object> k : ret.data.get(n.string)) {
                Object lhs = k.second;
                LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> rhs = Jfull.flag(n, k.first);
                Object xxx = interp.prop4.get(prop).get(n).get(new Pair<>(lhs, rhs));
                set.add(new Pair<>(k.first, xxx));
            }
            dataFull.add(new Pair<>(n.string, set));
        }
        Transform ret0 = new Transform(Jfull, Pfull, dataFull);
        PSMGen.shred(pre, ret0, state);
    } catch (FQLException fe) {
        fe.printStackTrace();
        throw new RuntimeException(fe.getLocalizedMessage());
    }
}
Also used : Path(catdata.fql.decl.Path) Set(java.util.Set) HashSet(java.util.HashSet) Instance(catdata.fql.decl.Instance) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Node(catdata.fql.decl.Node) LinkedList(java.util.LinkedList) FQLException(catdata.fql.FQLException) Transform(catdata.fql.decl.Transform) Edge(catdata.fql.decl.Edge) Pair(catdata.Pair) HashSet(java.util.HashSet)

Example 23 with FQLException

use of catdata.fql.FQLException in project fql by CategoricalData.

the class PSMCurry method exec.

@Override
public void exec(PSMInterp interp, Map<String, Set<Map<Object, Object>>> state) {
    try {
        Instance IJ = new Instance(sig, PSMGen.gather(trans_src, sig, state));
        Instance K = new Instance(sig, PSMGen.gather(trans_dst, sig, state));
        Transform t = new Transform(IJ, K, PSMGen.gather(trans, sig, state));
        Instance I = new Instance(sig, PSMGen.gather(inst_src, sig, state));
        Instance J = new Instance(sig, PSMGen.gather(exp, sig, state));
        Instance JK = new Instance(sig, PSMGen.gather(inst_dst, sig, state));
        Transform trans_src0_fst = new Transform(IJ, I, PSMGen.gather(trans_src + "_fst", sig, state));
        Transform trans_src0_snd = new Transform(IJ, J, PSMGen.gather(trans_src + "_snd", sig, state));
        Map<Node, List<Pair<Arr<Node, Path>, Attribute<Node>>>> obs = I.thesig.obs();
        List<Pair<String, List<Pair<Object, Object>>>> l = new LinkedList<>();
        Quad<Instance, Map<Pair<Node, LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>>, Triple<Instance, Map<Node, Map<Object, Pair<Arr<Node, Path>, Object>>>, Map<Node, Map<Pair<Arr<Node, Path>, Object>, Object>>>>, Map<Node, Map<Object, Pair<LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>, Transform>>>, Map<Node, Map<Pair<LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object>, Transform>, Object>>> kkk = interp.exps2.get(inst_dst);
        for (Node c : sig.nodes) {
            List<Pair<Object, Object>> s = new LinkedList<>();
            for (Pair<Object, Object> xx : I.data.get(c.string)) {
                Object x = xx.first;
                LinkedHashMap<Pair<Arr<Node, Path>, Attribute<Node>>, Object> w = I.flag(c, x);
                Triple<Instance, Map<Node, Map<Object, Pair<Arr<Node, Path>, Object>>>, Map<Node, Map<Pair<Arr<Node, Path>, Object>, Object>>> HcJ = kkk.second.get(new Pair<>(c, w));
                // construct transform depending on x, lookup in kkk.second
                List<Pair<String, List<Pair<Object, Object>>>> tx = new LinkedList<>();
                for (Node d : sig.nodes) {
                    List<Pair<Object, Object>> tx0 = new LinkedList<>();
                    for (Arr<Node, Path> f : sig.toCategory2().first.hom(c, d)) {
                        for (Pair<Object, Object> y : J.data.get(d.string)) {
                            // only if y(p.a) = w(p.a)
                            if (!PropPSM.truncate2(I.thesig, w, f, obs.get(d)).equals(J.flag(d, y.first))) {
                                continue;
                            }
                            Object Ifx = lookup(I.evaluate(f.arr), x);
                            // Object Ifx = lookup(HcJ.first.evaluate(f.arr), x);
                            Object u = find(d, trans_src0_fst, trans_src0_snd, Ifx, y.first);
                            Object v = lookup(t.data.get(d.string), u);
                            Object iii = HcJ.third.get(d).get(new Pair<>(f, y.first));
                            tx0.add(new Pair<>(iii, v));
                        }
                    }
                    // I*J -> K
                    tx.add(new Pair<>(d.string, tx0));
                }
                Transform xxx = new Transform(HcJ.first, K, tx);
                Object yyy = kkk.fourth.get(c).get(new Pair<>(w, xxx));
                s.add(new Pair<>(x, yyy));
            }
            l.add(new Pair<>(c.string, s));
        }
        Transform zzz = new Transform(I, JK, l);
        PSMGen.shred(ret, zzz, state);
    } catch (FQLException fe) {
        fe.printStackTrace();
        throw new RuntimeException(fe.getMessage());
    }
}
Also used : Arr(catdata.fql.cat.Arr) Path(catdata.fql.decl.Path) Instance(catdata.fql.decl.Instance) Attribute(catdata.fql.decl.Attribute) Node(catdata.fql.decl.Node) LinkedList(java.util.LinkedList) LinkedHashMap(java.util.LinkedHashMap) FQLException(catdata.fql.FQLException) List(java.util.List) LinkedList(java.util.LinkedList) Transform(catdata.fql.decl.Transform) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Pair(catdata.Pair)

Example 24 with FQLException

use of catdata.fql.FQLException in project fql by CategoricalData.

the class FullSigmaTrans method exec.

@Override
public void exec(PSMInterp interp, Map<String, Set<Map<Object, Object>>> state) {
    Signature C = f.source;
    Signature D = f.target;
    List<Pair<String, List<Pair<Object, Object>>>> I0 = PSMGen.gather(srcH, C, state);
    List<Pair<String, List<Pair<Object, Object>>>> J0 = PSMGen.gather(dstH, C, state);
    List<Pair<String, List<Pair<Object, Object>>>> H0 = PSMGen.gather(h, C, state);
    List<Pair<String, List<Pair<Object, Object>>>> J0X = PSMGen.gather(dst, D, state);
    List<Pair<String, List<Pair<Object, Object>>>> tempI = new LinkedList<>();
    List<Pair<String, List<Pair<Object, Object>>>> tempH = new LinkedList<>();
    for (Node n : C.nodes) {
        Set<Map<Object, Object>> x2 = state.get(dst + "_" + n.string + "_e");
        tempH.add(new Pair<>(n.string, convX(x2)));
        Set<Map<Object, Object>> x1 = state.get(dst + "_" + f.nm.get(n).string);
        tempI.add(new Pair<>(n.string, conv(x1)));
    }
    for (Edge e : C.edges) {
        Set<Map<Object, Object>> x1 = eval(state, dst, f.em.get(e));
        tempI.add(new Pair<>(e.name, conv(x1)));
    }
    for (Attribute<Node> e : C.attrs) {
        Set<Map<Object, Object>> x1 = state.get(dst + "_" + f.am.get(e).name);
        tempI.add(new Pair<>(e.name, conv(x1)));
    }
    try {
        Instance I = new Instance(C, I0);
        Instance J = new Instance(C, J0);
        Transform H = new Transform(I, J, H0);
        // Instance IX = new Instance(D, I0X);
        Instance JX = new Instance(D, J0X);
        Instance temp = new Instance(C, tempI);
        Transform etaJ = new Transform(J, temp, tempH);
        Transform HX = Transform.composeX(H, etaJ);
        // should pass H, but compute etaJ after de-attr.
        // that way, HX.dst and delta JX have attr IDs in common
        // de-attr JX
        Integer current = interp.guid;
        interp.guid = interp.sigmas.get(src);
        Quad<Instance, Map<Node, Map<Object, Integer>>, Map<Node, Map<Integer, Object>>, Map<Object, List<Pair<String, Object>>>> xxx = LeftKanSigma.fullSigmaWithAttrs(interp, f, I, HX, JX, interp.sigmas2.get(src));
        interp.guid = current;
        for (Node n : D.nodes) {
            state.put(pre + "_" + n.string, conv0(xxx.third.get(n)));
        }
        for (Attribute<Node> a : D.attrs) {
            state.put(pre + "_" + a.name, new HashSet<>());
        }
        for (Edge a : D.edges) {
            state.put(pre + "_" + a.name, new HashSet<>());
        }
    } catch (FQLException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}
Also used : Instance(catdata.fql.decl.Instance) Node(catdata.fql.decl.Node) LinkedList(java.util.LinkedList) FQLException(catdata.fql.FQLException) Signature(catdata.fql.decl.Signature) Transform(catdata.fql.decl.Transform) HashMap(java.util.HashMap) Map(java.util.Map) Edge(catdata.fql.decl.Edge) Pair(catdata.Pair)

Example 25 with FQLException

use of catdata.fql.FQLException in project fql by CategoricalData.

the class LeftKanSigma method sigma.

private static Pair<Instance, Map<Object, List<Pair<String, Object>>>> sigma(LeftKan lk) throws FQLException {
    if (!lk.compute()) {
        throw new FQLException("Too many sigma iterations.");
    }
    Map<String, Set<Pair<Object, Object>>> data = new HashMap<>();
    for (Node e : lk.Pb.keySet()) {
        Set<Pair<Integer, Integer>> t = lk.Pb.get(e);
        data.put(e.string, conc(t));
    }
    for (Edge e : lk.Pg.keySet()) {
        Set<Pair<Integer, Integer>> t = lk.Pg.get(e);
        data.put(e.name, conc(t));
    }
    Instance ret = new Instance(lk.F.target, data);
    return new Pair<>(ret, lk.lineage);
}
Also used : FQLException(catdata.fql.FQLException) Set(java.util.Set) HashSet(java.util.HashSet) HashMap(java.util.HashMap) Instance(catdata.fql.decl.Instance) Node(catdata.fql.decl.Node) Edge(catdata.fql.decl.Edge) Pair(catdata.Pair)

Aggregations

FQLException (catdata.fql.FQLException)37 Pair (catdata.Pair)28 LinkedList (java.util.LinkedList)23 HashMap (java.util.HashMap)21 Node (catdata.fql.decl.Node)20 LinkedHashMap (java.util.LinkedHashMap)20 Arr (catdata.fql.cat.Arr)15 Map (java.util.Map)15 Instance (catdata.fql.decl.Instance)14 Path (catdata.fql.decl.Path)14 Transform (catdata.fql.decl.Transform)12 Attribute (catdata.fql.decl.Attribute)11 Edge (catdata.fql.decl.Edge)11 Signature (catdata.fql.decl.Signature)11 List (java.util.List)11 Triple (catdata.Triple)9 HashSet (java.util.HashSet)6 Fn (catdata.fql.Fn)5 CopyFlower (catdata.fql.sql.CopyFlower)5 ExpPSM (catdata.fql.sql.ExpPSM)5