Search in sources :

Example 1 with Edge

use of catdata.fqlpp.cat.Signature.Edge in project fql by CategoricalData.

the class CatOps method visit.

@Override
public Functor visit(FQLPPProgram env, FinalConst ic) {
    CatExp e = resolve(env, ic.src);
    if (!(e instanceof Const)) {
        throw new RuntimeException("Can only create functors from finitely-presented categories.");
    }
    Const c = (Const) e;
    Category cat = c.accept(env, this);
    Signature<String, String> sig = new Signature<>(c.nodes, c.arrows, c.eqs);
    Category target = ic.C.accept(env, this);
    Map<Node, Functor> nm = new HashMap<>();
    for (Node n : sig.nodes) {
        FunctorExp kkk = ic.nm.get(n.name);
        if (kkk == null) {
            throw new RuntimeException("Missing node mapping from " + n);
        }
        Functor F = kkk.accept(env, this);
        nm.put(n, F);
    }
    Map<Edge, Transform> em = new HashMap<>();
    for (Edge n : sig.edges) {
        TransExp chc = ic.em.get(n.name);
        if (chc == null) {
            throw new RuntimeException("Missing edge mapping from " + n);
        }
        em.put(n, chc.accept(env, this));
    }
    FUNCTION fff = p0 -> {
        Path p = (Path) p0;
        Object fn = target.identity(nm.get(p.source));
        for (Object nnn : p.path) {
            Edge n = (Edge) nnn;
            fn = target.compose(fn, em.get(n));
        }
        return fn;
    };
    return new Functor(cat, target, nm::get, fff);
}
Also used : PeterApply(catdata.fqlpp.TransExp.PeterApply) FiniteCategory(catdata.fqlpp.cat.FiniteCategory) Named(catdata.fqlpp.CatExp.Named) Edge(catdata.fqlpp.cat.Signature.Edge) Snd(catdata.fqlpp.FunctorExp.Snd) Comp(catdata.fqlpp.FunctorExp.Comp) ToInst(catdata.fqlpp.TransExp.ToInst) Id(catdata.fqlpp.FunctorExp.Id) Inr(catdata.fqlpp.FunctorExp.Inr) FF(catdata.fqlpp.FunctorExp.FF) Migrate(catdata.fqlpp.FunctorExp.Migrate) Colim(catdata.fqlpp.CatExp.Colim) Exp(catdata.fqlpp.CatExp.Exp) Pushout(catdata.fqlpp.FunctorExp.Pushout) FinCat(catdata.fqlpp.cat.FinCat) FunCat(catdata.fqlpp.cat.FunCat) Pair(catdata.Pair) CoMonad(catdata.fqlpp.cat.CoMonad) Iso(catdata.fqlpp.FunctorExp.Iso) ApplyPath(catdata.fqlpp.TransExp.ApplyPath) Inj(catdata.fqlpp.TransExp.Inj) Fn(catdata.fqlpp.cat.FinSet.Fn) Bool(catdata.fqlpp.TransExp.Bool) Case(catdata.fqlpp.FunctorExp.Case) ToMap(catdata.fqlpp.TransExp.ToMap) Zero(catdata.fqlpp.CatExp.Zero) Monad(catdata.fqlpp.cat.Monad) Plus(catdata.fqlpp.CatExp.Plus) Category(catdata.fqlpp.cat.Category) CatConst(catdata.fqlpp.FunctorExp.CatConst) Inst(catdata.fqlpp.cat.Inst) ToSet(catdata.fqlpp.TransExp.ToSet) Groth(catdata.fqlpp.cat.Groth) Mapping(catdata.fqlpp.cat.Mapping) Serializable(java.io.Serializable) Kleisli(catdata.fqlpp.CatExp.Kleisli) ApplyTrans(catdata.fqlpp.TransExp.ApplyTrans) SetSetConst(catdata.fqlpp.FunctorExp.SetSetConst) Dom(catdata.fqlpp.CatExp.Dom) Triple(catdata.Triple) Eval(catdata.fqlpp.FunctorExp.Eval) Var(catdata.fqlpp.FunctorExp.Var) Times(catdata.fqlpp.CatExp.Times) Const(catdata.fqlpp.CatExp.Const) java.util(java.util) Prod(catdata.fqlpp.FunctorExp.Prod) InstConst(catdata.fqlpp.FunctorExp.InstConst) Node(catdata.fqlpp.cat.Signature.Node) Chc(catdata.Chc) TT(catdata.fqlpp.FunctorExp.TT) Functor(catdata.fqlpp.cat.Functor) Proj(catdata.fqlpp.TransExp.Proj) Prop(catdata.fqlpp.FunctorExp.Prop) CatExpVisitor(catdata.fqlpp.CatExp.CatExpVisitor) Signature(catdata.fqlpp.cat.Signature) TransExpVisitor(catdata.fqlpp.TransExp.TransExpVisitor) Union(catdata.fqlpp.CatExp.Union) ToCat(catdata.fqlpp.TransExp.ToCat) One(catdata.fqlpp.CatExp.One) FDM(catdata.fqlpp.cat.FDM) Ker(catdata.fqlpp.TransExp.Ker) Fst(catdata.fqlpp.FunctorExp.Fst) Whisker(catdata.fqlpp.TransExp.Whisker) Curry(catdata.fqlpp.FunctorExp.Curry) Transform(catdata.fqlpp.cat.Transform) Apply(catdata.fqlpp.FunctorExp.Apply) Instance(catdata.fqlpp.cat.Instance) MapConst(catdata.fqlpp.FunctorExp.MapConst) Path(catdata.fqlpp.cat.Signature.Path) Pivot(catdata.fqlpp.FunctorExp.Pivot) Chr(catdata.fqlpp.TransExp.Chr) Cod(catdata.fqlpp.CatExp.Cod) FinSet(catdata.fqlpp.cat.FinSet) Uncurry(catdata.fqlpp.FunctorExp.Uncurry) FunctorExpVisitor(catdata.fqlpp.FunctorExp.FunctorExpVisitor) Adj(catdata.fqlpp.TransExp.Adj) SetSet(catdata.fqlpp.TransExp.SetSet) AndOrNotImplies(catdata.fqlpp.TransExp.AndOrNotImplies) FinalConst(catdata.fqlpp.FunctorExp.FinalConst) Inl(catdata.fqlpp.FunctorExp.Inl) CoProd(catdata.fqlpp.TransExp.CoProd) ApplyPath(catdata.fqlpp.TransExp.ApplyPath) Path(catdata.fqlpp.cat.Signature.Path) FiniteCategory(catdata.fqlpp.cat.FiniteCategory) Category(catdata.fqlpp.cat.Category) CatConst(catdata.fqlpp.FunctorExp.CatConst) SetSetConst(catdata.fqlpp.FunctorExp.SetSetConst) Const(catdata.fqlpp.CatExp.Const) InstConst(catdata.fqlpp.FunctorExp.InstConst) MapConst(catdata.fqlpp.FunctorExp.MapConst) FinalConst(catdata.fqlpp.FunctorExp.FinalConst) Node(catdata.fqlpp.cat.Signature.Node) Functor(catdata.fqlpp.cat.Functor) Signature(catdata.fqlpp.cat.Signature) Transform(catdata.fqlpp.cat.Transform) Edge(catdata.fqlpp.cat.Signature.Edge)

Example 2 with Edge

use of catdata.fqlpp.cat.Signature.Edge in project fql by CategoricalData.

the class FqlppDisplay method makeJoined.

@SuppressWarnings("unchecked")
private static Pair<JPanel, Map<Object, JPanel>> makeJoined(Signature<String, String> sig, Functor<Object, Object, Set, Fn<Object, Object>> F) {
    Map<Node, List<Signature<String, String>.Edge>> map = new HashMap<>();
    Map<Object, JPanel> mapX = new HashMap<>();
    for (Node n : sig.nodes) {
        map.put(n, new LinkedList<>());
    }
    for (Edge t : sig.edges) {
        map.get(t.source).add(t);
    }
    // int x = (int) Math.ceil(Math.sqrt(sig.nodes.size()));
    List<JComponent> ret = new LinkedList<>();
    for (Node n : sig.nodes) {
        List<Signature<String, String>.Edge> cols = map.get(n);
        Object[] colNames = new Object[cols.size() + 1];
        colNames[0] = "ID";
        Set set = F.applyO(n);
        Object[][] rowData = new Object[set.size()][cols.size() + 1];
        int j = 0;
        for (Object o : set) {
            rowData[j][0] = o;
            j++;
        }
        int i = 1;
        for (Signature<String, String>.Edge t : cols) {
            colNames[i] = t.name;
            Fn<Object, Object> fn = F.applyA(sig.path(t));
            j = 0;
            for (Object o : set) {
                rowData[j][i] = fn.apply(o);
                j++;
            }
            i++;
        }
        JPanel p = GuiUtil.makeTable(BorderFactory.createEtchedBorder(), n + " (" + set.size() + " rows)", rowData, colNames);
        ret.add(p);
        mapX.put(n, p);
    }
    for (Signature<String, String>.Edge t : sig.edges) {
        Object[] colNames = new Object[2];
        colNames[0] = t.source;
        colNames[1] = t.target;
        Set set = F.applyO(t.source);
        Object[][] rowData = new Object[set.size()][2];
        Fn<Object, Object> fn = F.applyA(sig.path(t));
        int j = 0;
        for (Object o : set) {
            rowData[j][0] = o;
            rowData[j][1] = fn.apply(o);
            j++;
        }
        JPanel p = GuiUtil.makeTable(BorderFactory.createEtchedBorder(), t.name + " (" + set.size() + " rows)", rowData, colNames);
        mapX.put(t.name, p);
    }
    return new Pair<>(GuiUtil.makeGrid(ret), mapX);
}
Also used : JPanel(javax.swing.JPanel) Set(java.util.Set) FinSet(catdata.fqlpp.cat.FinSet) HashMap(java.util.HashMap) Node(catdata.fqlpp.cat.Signature.Node) JComponent(javax.swing.JComponent) LinkedList(java.util.LinkedList) Paint(java.awt.Paint) Signature(catdata.fqlpp.cat.Signature) List(java.util.List) LinkedList(java.util.LinkedList) JList(javax.swing.JList) Edge(catdata.fqlpp.cat.Signature.Edge) Pair(catdata.Pair)

Example 3 with Edge

use of catdata.fqlpp.cat.Signature.Edge in project fql by CategoricalData.

the class FqlppDisplay method build2Elements.

@SuppressWarnings("unchecked")
private static Graph build2Elements(Signature<Object, Object> sig, Transform<Object, Object, Set, Fn> trans) {
    Functor<Object, Object, Set, Fn> I = trans.source;
    Functor<Object, Object, Set, Fn> J = trans.target;
    Graph<Object, Object> ret = new DirectedSparseMultigraph<>();
    for (Node n : sig.nodes) {
        for (Object o : I.applyO(n)) {
            ret.addVertex(new Triple<>(o, n.name, "src"));
        }
    }
    for (Edge e : sig.edges) {
        for (Object o : I.applyO(e.source)) {
            Object fo = I.applyA(sig.path(e)).apply(o);
            Triple s = new Triple<>(o, e.source.name, "src");
            Triple t = new Triple<>(fo, e.target.name, "dst");
            ret.addEdge(new Quad<>(e.name, s, t, "src"), s, t);
        }
    }
    for (Node n : sig.nodes) {
        for (Object o : J.applyO(n)) {
            ret.addVertex(new Triple<>(o, n.name, "dst"));
        }
    }
    for (Edge e : sig.edges) {
        for (Object o : J.applyO(e.source)) {
            Object fo = J.applyA(sig.path(e)).apply(o);
            Triple s = new Triple<>(o, e.source.name, "dst");
            Triple t = new Triple<>(fo, e.target.name, "dst");
            ret.addEdge(new Quad<>(e.name, s, t, "dst"), s, t);
        }
    }
    int i = 0;
    for (Node n : sig.nodes) {
        for (Object o : I.applyO(n)) {
            Object fo = trans.apply(n).apply(o);
            Triple s = new Triple<>(o, n.name, "src");
            Triple t = new Triple<>(fo, n.name, "dst");
            ret.addEdge(new Quad<>("", s, t, i++), s, t);
        }
    }
    return ret;
}
Also used : Triple(catdata.Triple) Set(java.util.Set) FinSet(catdata.fqlpp.cat.FinSet) DirectedSparseMultigraph(edu.uci.ics.jung.graph.DirectedSparseMultigraph) Node(catdata.fqlpp.cat.Signature.Node) Fn(catdata.fqlpp.cat.FinSet.Fn) Edge(catdata.fqlpp.cat.Signature.Edge) Paint(java.awt.Paint)

Example 4 with Edge

use of catdata.fqlpp.cat.Signature.Edge in project fql by CategoricalData.

the class FqlppDisplay method buildMapping.

@SuppressWarnings("unchecked")
private static Graph buildMapping(Signature<String, String> src, Signature<String, String> dst, Functor F) {
    Graph<Object, Object> ret = new DirectedSparseMultigraph<>();
    for (Node n : src.nodes) {
        ret.addVertex(new Pair<>(n.name, "src"));
    }
    for (Edge e : src.edges) {
        Pair s = new Pair<>(e.source.name, "src");
        Pair t = new Pair<>(e.target.name, "src");
        ret.addEdge(new Quad<>(e.name, s, t, "src"), s, t);
    }
    for (Node n : dst.nodes) {
        ret.addVertex(new Pair<>(n.name, "dst"));
    }
    for (Edge e : dst.edges) {
        Pair s = new Pair<>(e.source.name, "dst");
        Pair t = new Pair<>(e.target.name, "dst");
        ret.addEdge(new Quad<>(e.name, s, t, "dst"), s, t);
    }
    int i = 0;
    for (Node n : src.nodes) {
        Node fo = (Node) F.applyO(n);
        Pair s = new Pair<>(n.name, "src");
        Pair t = new Pair<>(fo.name, "dst");
        ret.addEdge(new Quad<>("", s, t, i++), s, t);
    }
    return ret;
}
Also used : DirectedSparseMultigraph(edu.uci.ics.jung.graph.DirectedSparseMultigraph) Node(catdata.fqlpp.cat.Signature.Node) Edge(catdata.fqlpp.cat.Signature.Edge) Paint(java.awt.Paint) Pair(catdata.Pair)

Example 5 with Edge

use of catdata.fqlpp.cat.Signature.Edge in project fql by CategoricalData.

the class CatOps method toInstance.

private Pair<Category, Instance<String, String>> toInstance(FQLPPProgram env, InstConst ic) {
    CatExp e = resolve(env, ic.sig);
    if (!(e instanceof Const)) {
        throw new RuntimeException("Can only create instances for finitely-presented categories.");
    }
    Const c = (Const) e;
    Category src = c.accept(env, this);
    Signature<String, String> sig = new Signature<>(c.nodes, c.arrows, c.eqs);
    Map<Node, Set> nm = new HashMap<>();
    for (String n0 : ic.nm.keySet()) {
        Node n = sig.getNode(n0);
        SetExp kkk = ic.nm.get(n.name);
        if (kkk == null) {
            throw new RuntimeException("Missing node mapping from " + n);
        }
        nm.put(n, kkk.accept(env, new SetOps(ENV)));
    }
    Map<Edge, Map> em = new HashMap<>();
    for (String n0 : ic.em.keySet()) {
        Edge n = sig.getEdge(n0);
        Chc<FnExp, SetExp> chc = ic.em.get(n.name);
        if (chc == null) {
            throw new RuntimeException("Missing edge mapping from " + n);
        }
        if (chc.left) {
            FnExp kkk = chc.l;
            em.put(n, kkk.accept(env, new SetOps(ENV)).toMap());
        } else {
            SetExp sss = chc.r;
            Set vvv = sss.accept(env, new SetOps(ENV));
            Map<Object, Object> uuu = new HashMap<>();
            for (Object o : vvv) {
                if (!(o instanceof Pair)) {
                    throw new RuntimeException("Not a pair: " + o);
                }
                Pair oo = (Pair) o;
                if (uuu.containsKey(oo.first)) {
                    throw new RuntimeException("Duplicate domain entry: " + o + " in " + ic);
                }
                uuu.put(oo.first, oo.second);
            }
            FnExp kkk = new FnExp.Const(uuu::get, ic.nm.get(n.source.name), ic.nm.get(n.target.name));
            em.put(n, kkk.accept(env, new SetOps(ENV)).toMap());
        }
    }
    return new Pair<>(src, new Instance(nm, em, sig));
}
Also used : FiniteCategory(catdata.fqlpp.cat.FiniteCategory) Category(catdata.fqlpp.cat.Category) ToSet(catdata.fqlpp.TransExp.ToSet) FinSet(catdata.fqlpp.cat.FinSet) SetSet(catdata.fqlpp.TransExp.SetSet) Instance(catdata.fqlpp.cat.Instance) CatConst(catdata.fqlpp.FunctorExp.CatConst) SetSetConst(catdata.fqlpp.FunctorExp.SetSetConst) Const(catdata.fqlpp.CatExp.Const) InstConst(catdata.fqlpp.FunctorExp.InstConst) MapConst(catdata.fqlpp.FunctorExp.MapConst) FinalConst(catdata.fqlpp.FunctorExp.FinalConst) Node(catdata.fqlpp.cat.Signature.Node) Signature(catdata.fqlpp.cat.Signature) Edge(catdata.fqlpp.cat.Signature.Edge) ToMap(catdata.fqlpp.TransExp.ToMap) Pair(catdata.Pair)

Aggregations

Edge (catdata.fqlpp.cat.Signature.Edge)6 Node (catdata.fqlpp.cat.Signature.Node)6 Pair (catdata.Pair)5 Triple (catdata.Triple)4 Const (catdata.fqlpp.CatExp.Const)4 CatConst (catdata.fqlpp.FunctorExp.CatConst)4 FinalConst (catdata.fqlpp.FunctorExp.FinalConst)4 InstConst (catdata.fqlpp.FunctorExp.InstConst)4 MapConst (catdata.fqlpp.FunctorExp.MapConst)4 SetSetConst (catdata.fqlpp.FunctorExp.SetSetConst)4 FinSet (catdata.fqlpp.cat.FinSet)4 Signature (catdata.fqlpp.cat.Signature)4 Category (catdata.fqlpp.cat.Category)3 FiniteCategory (catdata.fqlpp.cat.FiniteCategory)3 Paint (java.awt.Paint)3 Chc (catdata.Chc)2 CatExpVisitor (catdata.fqlpp.CatExp.CatExpVisitor)2 Cod (catdata.fqlpp.CatExp.Cod)2 Colim (catdata.fqlpp.CatExp.Colim)2 Dom (catdata.fqlpp.CatExp.Dom)2