From 26ade026edb6a83637cb585a4f2c9e1b9fdc5a0b Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 25 Apr 2026 01:23:25 +0200 Subject: [PATCH] embeddings:: get_n() --- rogueviz/dhrg/betweenness.cpp | 2 +- rogueviz/dhrg/dhrg-rank.cpp | 5 +---- rogueviz/dhrg/dhrg.h | 3 +++ rogueviz/dhrg/embedder.cpp | 12 ++++++------ rogueviz/dhrg/loglik.cpp | 8 ++++---- rogueviz/dhrg/visualize.cpp | 2 +- rogueviz/embeddings/compare.cpp | 12 ++++++------ rogueviz/embeddings/embeddings.cpp | 8 +++++++- rogueviz/embeddings/embeddings.h | 1 + rogueviz/embeddings/loglik.cpp | 6 +++--- rogueviz/embeddings/maprank.cpp | 2 +- rogueviz/embeddings/routing.cpp | 8 ++++---- rogueviz/graphs.cpp | 1 + 13 files changed, 39 insertions(+), 31 deletions(-) diff --git a/rogueviz/dhrg/betweenness.cpp b/rogueviz/dhrg/betweenness.cpp index 9bb2e6bd..6eb75304 100644 --- a/rogueviz/dhrg/betweenness.cpp +++ b/rogueviz/dhrg/betweenness.cpp @@ -323,7 +323,7 @@ bool neq(betweenness_type a, betweenness_type b) { } void compute_betweenness(bool verify) { - auto N = isize(rogueviz::vdata); + auto N = get_n(); progressbar pb(N, "compute_betweenness"); int errorcount = 0, errorcount2 = 0; for(int i=0; iqty[j]; if(!qj) continue; @@ -145,7 +145,7 @@ ld loglik_chosen() { void writestats() { indenter_finish im("writestats"); memoryInfo(); - int N = isize(rogueviz::vdata); + int N = get_n(); println(hlog, "Vertices by distance (N = ", N, "):"); mycell *root = mroot; for(int j=0; jbase == mouseover) held_id = i; return; diff --git a/rogueviz/embeddings/compare.cpp b/rogueviz/embeddings/compare.cpp index 392132e7..bd2152f5 100644 --- a/rogueviz/embeddings/compare.cpp +++ b/rogueviz/embeddings/compare.cpp @@ -58,7 +58,7 @@ struct landscape_embedding : abstract_embedding { void landscape_build(int dim) { rogueviz::embeddings::init_landscape(columns = landscape_dim = dim); - int N = isize(rogueviz::vdata); + int N = get_n(); landscape_weights.resize(N); if(1) { progressbar pb(N, "compute landscape"); @@ -73,7 +73,7 @@ void landscape_build(int dim) { void landscape_output(string shape, ld target_dist, string fname) { ld max_dist = 0; - int N = isize(rogueviz::vdata); + int N = get_n(); for(int i=0; i (); - int N = isize(rogueviz::vdata); + int N = get_n(); fhstream g(nodelist_fname, "rt"); vector our_index; @@ -195,7 +195,7 @@ struct dmercator_embedding : untiled_embedding { void read_dmercator(string fname, bool only_read = false) { auto me = make_shared (); - int N = isize(rogueviz::vdata); + int N = get_n(); me->mcs.resize(N); @@ -232,7 +232,7 @@ struct euclid_embedding : zdisttable_embedding { void read_euclid(string fname, int dim) { auto ee = make_shared (); - int N = isize(rogueviz::vdata); + int N = get_n(); println(hlog, "Open file ", fname); fhstream g(fname, "rt"); @@ -274,7 +274,7 @@ struct poincare_embedding : zdisttable_embedding { void read_poincare(string fname, int dim) { auto pe = make_shared(); - int N = isize(rogueviz::vdata); + int N = get_n(); println(hlog, "Open file ", fname); fhstream g(fname, "rt"); diff --git a/rogueviz/embeddings/embeddings.cpp b/rogueviz/embeddings/embeddings.cpp index f0add5e6..a0edb8fa 100644 --- a/rogueviz/embeddings/embeddings.cpp +++ b/rogueviz/embeddings/embeddings.cpp @@ -9,6 +9,12 @@ std::shared_ptr current; vector > directed_edges; +// keep this correct +// note: isize(vdata) may be not correct because of the extra 'legend' nodes +int get_n() { + return isize(directed_edges); + } + rogueviz::edgetype *any; edgetype *ensure_edge() { @@ -79,7 +85,7 @@ void write_edgelist(const string &fname) { } void force_rvgraph() { - for(auto& v: vdata) if(v.id < isize(directed_edges)) { + for(auto& v: vdata) if(v.id < get_n()) { auto p = current->as_location(v.id); v.be(p.first, rgpushxto0(p.second)); } diff --git a/rogueviz/embeddings/embeddings.h b/rogueviz/embeddings/embeddings.h index b7133f17..8386a431 100644 --- a/rogueviz/embeddings/embeddings.h +++ b/rogueviz/embeddings/embeddings.h @@ -87,6 +87,7 @@ std::vector path(int src); int get_actual(int src); void prepare_goal(int goal); +int get_n(); int count_directed_edges(); void read_edgelist(const string& fn); diff --git a/rogueviz/embeddings/loglik.cpp b/rogueviz/embeddings/loglik.cpp index 32f4ed21..186ccb58 100644 --- a/rogueviz/embeddings/loglik.cpp +++ b/rogueviz/embeddings/loglik.cpp @@ -26,7 +26,7 @@ using logisticfun = std::function; // needs cellcoords/rvcoords/origcoords void build_disttable() { indenter_finish im("build_disttable"); - int N = isize(rogueviz::vdata); + int N = get_n(); vector tab(N, N); disttable0.clear(); disttable1.clear(); @@ -77,7 +77,7 @@ void build_disttable_approx() { std::vector>> results(threads); std::vector v; - int N = isize(rogueviz::vdata); + int N = get_n(); for(int k=0; k>> results(threads); std::vector v; - int N = isize(rogueviz::vdata); + int N = get_n(); for(int k=0; k last_goal; vector next_stop; void prepare_pairs() { - int N = isize(rogueviz::vdata); + int N = get_n(); pairs.resize(N); actual.resize(N); for(int i=0; i& distances_from_goal) { } void greedy_routing_to(iddata& d, int goal) { - int N = isize(rogueviz::vdata); + int N = get_n(); vector distances_from_goal(N); for(int src=0; srcdistance(goal, src); @@ -136,7 +136,7 @@ void greedy_routing_to(iddata& d, int goal) { } void greedy_routing(iddata& d) { - int N = isize(rogueviz::vdata); + int N = get_n(); for(int goal=0; goalisVirtual = false; if(rv_quality >= 3) virtualRebase(m); if(rv_quality >= 2) m->store(); + for(auto& ei: edges) ei.second->orig = nullptr; if(rv_quality >= 4) for(auto& ei: edges) redo_extenders(ei.second); }