use of catdata.fqlpp.cat.Transform in project fql by CategoricalData.
the class CatOps method visit.
@Override
public Transform visit(FQLPPProgram env, CoProd e) {
Transform l = e.l.accept(env, this);
Transform r = e.r.accept(env, this);
if (!l.target.equals(r.target)) {
throw new RuntimeException("Target functors do not match");
}
if (!l.target.source.equals(r.target.source)) {
throw new RuntimeException("Categories do not match");
}
if (l.source.target.equals(FinSet.FinSet)) {
return Inst.get(l.target.source).match(l, r);
} else if (l.source.target.equals(FinCat.FinCat)) {
return FunCat.get(l.target.source).match(l, r);
} else {
throw new RuntimeException("Report this error to Ryan");
}
}
use of catdata.fqlpp.cat.Transform in project fql by CategoricalData.
the class SetOps method visit.
@SuppressWarnings("unchecked")
@Override
public Fn visit(FQLPPProgram env, ApplyTrans e) {
TransExp k = env.trans.get(e.f);
if (k == null) {
throw new RuntimeException("Missing transform: " + e.f);
}
Transform f = k.accept(env, new CatOps(ENV));
if (!FinSet.FinSet.equals(f.source.source)) {
throw new RuntimeException("Domain is not Set in " + e);
}
if (!FinSet.FinSet.equals(f.target.target)) {
throw new RuntimeException("Codomain is not Set in " + e);
}
Set<?> s = e.set.accept(env, this);
return (Fn) f.apply(s);
}
use of catdata.fqlpp.cat.Transform in project fql by CategoricalData.
the class FqlppDisplay method doNTView.
@SuppressWarnings("unchecked")
private <X, Y> JComponent doNTView(Transform fn, JPanel p, Color clr, Graph<X, Y> sgv) {
// Layout<X, Y> layout = new FRLayout<>(sgv);
Layout<X, Y> layout = new FRLayout(sgv);
layout.setSize(new Dimension(600, 400));
VisualizationViewer<X, Y> vv = new VisualizationViewer<>(layout);
Function<X, Paint> vertexPaint = z -> clr;
DefaultModalGraphMouse<String, String> gm = new DefaultModalGraphMouse<>();
gm.setMode(Mode.TRANSFORMING);
vv.setGraphMouse(gm);
gm.setMode(Mode.PICKING);
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
Function www = arg0 -> Util.nice(arg0.toString());
vv.getRenderContext().setVertexLabelTransformer(www);
vv.getRenderContext().setEdgeLabelTransformer(www);
vv.getPickedVertexState().addItemListener((ItemEvent e) -> {
if (e.getStateChange() != ItemEvent.SELECTED) {
return;
}
vv.getPickedEdgeState().clear();
X str = ((X) e.getItem());
Object y = fn.apply(str);
p.removeAll();
if (y instanceof Functor) {
Functor ttt = (Functor) y;
JPanel sss = showFtr(ttt, getColor(ttt.source), null);
p.add(sss);
} else if (y instanceof Fn) {
Fn ttt = (Fn) y;
JPanel sss = showFn(ttt, getColor(ttt.source), getColor(ttt.target));
p.add(sss);
} else if (y instanceof Transform) {
Transform ttt = (Transform) y;
JPanel sss = showTrans(ttt, getColor(ttt.source));
p.add(sss);
} else {
String sss = Util.nice(y.toString());
p.add(new CodeTextPanel(BorderFactory.createEtchedBorder(), null, sss));
}
p.revalidate();
});
GraphZoomScrollPane zzz = new GraphZoomScrollPane(vv);
JPanel ret = new JPanel(new GridLayout(1, 1));
ret.add(zzz);
ret.setBorder(BorderFactory.createEtchedBorder());
return ret;
}
use of catdata.fqlpp.cat.Transform in project fql by CategoricalData.
the class FqlppDisplay method doFNView.
@SuppressWarnings("unchecked")
private <X, Y> JComponent doFNView(Functor fn, JPanel p, Color clr, Graph<X, Y> sgv) {
Layout<X, Y> layout = new FRLayout<>(sgv);
layout.setSize(new Dimension(600, 400));
VisualizationViewer<X, Y> vv = new VisualizationViewer<>(layout);
Function<X, Paint> vertexPaint = z -> clr;
DefaultModalGraphMouse<String, String> gm = new DefaultModalGraphMouse<>();
gm.setMode(Mode.TRANSFORMING);
vv.setGraphMouse(gm);
gm.setMode(Mode.PICKING);
vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
Function fff = arg0 -> Util.nice(arg0.toString());
vv.getRenderContext().setVertexLabelTransformer(fff);
vv.getRenderContext().setEdgeLabelTransformer(fff);
vv.getPickedVertexState().addItemListener((ItemEvent e) -> {
if (e.getStateChange() != ItemEvent.SELECTED) {
return;
}
vv.getPickedEdgeState().clear();
X str = ((X) e.getItem());
Object y = fn.applyO(str);
p.removeAll();
if (y instanceof Category) {
Category ttt = (Category) y;
JPanel sss = showCat(ttt, getColor(ttt));
p.add(sss);
} else if (y instanceof Set) {
Set ttt = (Set) y;
JPanel sss = showSet(ttt, getColor(ttt));
p.add(sss);
} else if (y instanceof Functor) {
Functor ttt = (Functor) y;
JPanel sss = showFtr(ttt, getColor(ttt), null);
p.add(sss);
} else {
String sss = Util.nice(y.toString());
p.add(new CodeTextPanel(BorderFactory.createEtchedBorder(), null, sss));
}
p.revalidate();
});
vv.getPickedEdgeState().addItemListener((ItemEvent e) -> {
if (e.getStateChange() != ItemEvent.SELECTED) {
return;
}
vv.getPickedVertexState().clear();
X str = ((X) e.getItem());
Object y = fn.applyA(str);
p.removeAll();
if (y instanceof Functor) {
Functor ttt = (Functor) y;
JPanel sss = showFtr(ttt, getColor(ttt.source), null);
p.add(sss);
} else if (y instanceof Fn) {
Fn ttt = (Fn) y;
JPanel sss = showFn(ttt, getColor(ttt.source), getColor(ttt.target));
p.add(sss);
} else if (y instanceof Transform) {
Transform ttt = (Transform) y;
JPanel sss = showTrans(ttt, getColor(ttt.source));
p.add(sss);
} else {
String sss = Util.nice(y.toString());
p.add(new CodeTextPanel(BorderFactory.createEtchedBorder(), null, sss));
}
p.revalidate();
});
GraphZoomScrollPane zzz = new GraphZoomScrollPane(vv);
JPanel ret = new JPanel(new GridLayout(1, 1));
ret.add(zzz);
ret.setBorder(BorderFactory.createEtchedBorder());
return ret;
}
use of catdata.fqlpp.cat.Transform in project fql by CategoricalData.
the class CatOps method visit.
@Override
public Transform visit(FQLPPProgram env, TransExp.Apply e) {
Functor F = e.F.accept(env, this);
Transform I = e.I.accept(env, this);
return (Transform) F.applyA(I);
}
Aggregations