diff --git a/rogueviz/dhrg/dhrg.cpp b/rogueviz/dhrg/dhrg.cpp index 816d7d94..2ef56dc3 100644 --- a/rogueviz/dhrg/dhrg.cpp +++ b/rogueviz/dhrg/dhrg.cpp @@ -64,7 +64,7 @@ void clear() { void dhrg_init() { if(!mroot) { println(hlog, "DHRG version " DHRGVER "\n"); - rogueviz::rv_hook(hooks_handleKey, 100, dhrg_animate); + // rogueviz::rv_hook(hooks_handleKey, 100, dhrg_animate); regular_info(); generate_root(); } @@ -181,6 +181,12 @@ auto hook = #include "visualize.cpp" #endif +void launch_dhrg() { + dhrg_init(); graph_from_rv(); + ts_vertices = ts_rbase; + rogueviz::embeddings::reenable_embedding(); + } + } #include "legacy.cpp" diff --git a/rogueviz/dhrg/visualize.cpp b/rogueviz/dhrg/visualize.cpp index b1660dbb..c655dc1e 100644 --- a/rogueviz/dhrg/visualize.cpp +++ b/rogueviz/dhrg/visualize.cpp @@ -3,7 +3,7 @@ int held_id = -1; void show_likelihood() { - cmode = sm::SIDE | sm::MAYDARK | sm::DIALOG_STRICT_X | sm::PANNING; + cmode = sm::SIDE | sm::DIALOG_STRICT_X | sm::PANNING; gamescreen(); dialog::init("DHRG information"); @@ -94,6 +94,13 @@ void show_likelihood() { }; } +int a1 = addHook(rogueviz::hooks_rvmenu, 100, [] { + if(isize(vertices)) { + dialog::addItem("examine DHRG", 'd'); + dialog::add_action_push(show_likelihood); + } + }); + bool dhrg_animate(int sym, int uni) { if((cmode & sm::NORMAL) && uni == '/') { clearMessages(); diff --git a/rogueviz/embeddings/embeddings.cpp b/rogueviz/embeddings/embeddings.cpp index 53475bfd..573f2a39 100644 --- a/rogueviz/embeddings/embeddings.cpp +++ b/rogueviz/embeddings/embeddings.cpp @@ -147,3 +147,4 @@ int a = arg::add3("-edgelist", [] { arg::shift(); read_edgelist(arg::args()); }) #include "maprank.cpp" #include "mdl.cpp" #include "compare.cpp" +#include "visualize.cpp" diff --git a/rogueviz/embeddings/visualize.cpp b/rogueviz/embeddings/visualize.cpp new file mode 100644 index 00000000..9fdbd965 --- /dev/null +++ b/rogueviz/embeddings/visualize.cpp @@ -0,0 +1,74 @@ +namespace dhrg { + void show_likelihood(); + void launch_dhrg(); + extern std::vector vertices; + } + +namespace rogueviz { + +namespace embeddings { + +void show_embedding_info() { + cmode = sm::SIDE | sm::DIALOG_STRICT_X | sm::PANNING; + gamescreen(); + + dialog::init("embedding info"); + auto vp = [] (string s, char k, string t) { dialog::addSelItem(s,t,k); }; + + if(!eval.current) { + vp("evaluate", 'e', "..."); + dialog::add_action(full_evaluation); + } + else { + // println(hlog, make_tuple(int(eval.li.N), int(eval.li.M), int(eval.li.N1), eval.li.loglik, eval.li.control)); + vp("nodes", 'n', its(eval.li.N)); + vp("edges", 'm', its(eval.li.M)); + vp("embedding radius", 'r', its(eval.maxradius)); + dialog::addBoolItem("symmetric", eval.li.symmetric, 's'); + auto NX = bestll2(eval.li.M, eval.li.N1); + vp("normalized loglikelihood", 'x', fts(1 - eval.li.loglik / NX)); + vp("icv", 'x', fts(-NX / (-NX + eval.li.control))); + + vp("mAP", 'M', fts(eval.rank.map / eval.rank.n)); + vp("MeanRank", 'R', fts(eval.rank.ranks / eval.rank.rby)); + + auto &r = eval.routing; + + vp("greedy success", 'A', fts(r.suc / r.tot)); + vp("greedy stretch", 'A', fts(r.routedist / r.suc)); + vp("greedy efficiency", 'A', fts(r.eff / r.tot)); + + vp("modded success", 'A', fts(r.msuc / r.tot)); + vp("modded stretch", 'A', fts(r.mroutedist / r.msuc)); + vp("modded efficiency", 'A', fts(r.meff / r.tot)); + } + + if(WDIM == 2) { + if(!isize(dhrg::vertices)) { + dialog::addItem("DHRG: convert", 'd'); + dialog::add_action(dhrg::launch_dhrg); + } + else { + dialog::addItem("DHRG: examine", 'd'); + dialog::add_action_push(dhrg::show_likelihood); + } + } + + dialog::addBack(); + dialog::display(); + + keyhandler = [] (int sym, int uni) { + + handlePanning(sym, uni); + dialog::handleNavigation(sym, uni); + if(doexiton(sym, uni)) popScreen(); + }; + } + +int a1 = addHook(rogueviz::hooks_rvmenu, 100, [] { + if(current) { + dialog::addItem("evaluate embedding", 'e'); + dialog::add_action_push(show_embedding_info); + } + }); +}} \ No newline at end of file