Distances on Directed Graphs in R
at main 131 lines 4.2 kB view raw
1#pragma once 2 3#include <memory> 4#include <vector> 5#include <algorithm> // std::fill, std::reverse 6#include <iostream> 7#include <fstream> 8 9#include <Rcpp.h> 10// [[Rcpp::plugins(cpp11)]] 11// [[Rcpp::depends(RcppParallel,RcppThread)]] 12#include <RcppThread.h> 13#include <RcppParallel.h> 14 15#include "pathfinders.h" 16 17class DGraph; 18class PathFinder; 19 20//---------------------------- 21//----- functions in run_sp.cpp 22//---------------------------- 23 24namespace run_sp { 25 26std::shared_ptr <HeapDesc> getHeapImpl(const std::string& heap_type); 27 28size_t make_vert_map (const Rcpp::DataFrame &vert_map_in, 29 const std::vector <std::string> &vert_map_id, 30 const std::vector <size_t> &vert_map_n, 31 std::map <std::string, size_t> &vert_map); 32 33void make_vert_to_edge_maps (const std::vector <std::string> &from, 34 const std::vector <std::string> &to, const std::vector <double> &wt, 35 std::unordered_map <std::string, size_t> &verts_to_edge_map, 36 std::unordered_map <std::string, double> &verts_to_dist_map); 37 38size_t get_chunk_size (const size_t nfrom); 39} // end namespace run_sp 40 41namespace categorical { 42 43size_t get_num_edge_types (const std::vector <size_t> &edge_type); 44 45} // end namespace categorical 46 47namespace centrality { 48 49 struct edge_pair_hash { 50 inline std::size_t operator()(const std::pair <size_t, size_t> & v) const { 51 return v.first * 31 + v.second; 52 } 53 }; 54 55} // end namespace centrality 56 57 58Rcpp::NumericMatrix rcpp_get_sp_dists (const Rcpp::DataFrame graph, 59 const Rcpp::DataFrame vert_map_in, 60 Rcpp::IntegerVector fromi, 61 Rcpp::IntegerVector toi_in, 62 const std::string& heap_type); 63 64Rcpp::NumericMatrix rcpp_get_sp_dists_par (const Rcpp::DataFrame graph, 65 const Rcpp::DataFrame vert_map_in, 66 Rcpp::IntegerVector fromi, 67 Rcpp::IntegerVector toi_in, 68 const std::string& heap_type, 69 const bool is_spatial); 70 71Rcpp::NumericVector rcpp_get_sp_dists_nearest (const Rcpp::DataFrame graph, 72 const Rcpp::DataFrame vert_map_in, 73 Rcpp::IntegerVector fromi, 74 Rcpp::IntegerVector toi_in, 75 const std::string& heap_type); 76 77Rcpp::NumericMatrix rcpp_get_sp_dists_paired_par (const Rcpp::DataFrame graph, 78 const Rcpp::DataFrame vert_map_in, 79 Rcpp::IntegerVector fromi, 80 Rcpp::IntegerVector toi, 81 const std::string& heap_type, 82 const bool is_spatial); 83 84Rcpp::NumericMatrix rcpp_get_iso (const Rcpp::DataFrame graph, 85 const Rcpp::DataFrame vert_map_in, 86 Rcpp::IntegerVector fromi, 87 Rcpp::NumericVector dlim, 88 const std::string& heap_type); 89 90Rcpp::List rcpp_get_paths (const Rcpp::DataFrame graph, 91 const Rcpp::DataFrame vert_map_in, 92 Rcpp::IntegerVector fromi, 93 Rcpp::IntegerVector toi_in, 94 const std::string& heap_type); 95 96Rcpp::List rcpp_get_paths_pairwise (const Rcpp::DataFrame graph, 97 const Rcpp::DataFrame vert_map_in, 98 Rcpp::IntegerVector fromi, 99 Rcpp::IntegerVector toi_in, 100 const std::string& heap_type); 101 102// in run_sp_categorical: 103Rcpp::NumericMatrix rcpp_get_sp_dists_categorical (const Rcpp::DataFrame graph, 104 const Rcpp::DataFrame vert_map_in, 105 Rcpp::IntegerVector fromi, 106 Rcpp::IntegerVector toi_in, 107 const std::string& heap_type, 108 const bool proportions_only); 109 110Rcpp::NumericMatrix rcpp_get_sp_dists_categ_paired (const Rcpp::DataFrame graph, 111 const Rcpp::DataFrame vert_map_in, 112 Rcpp::IntegerVector fromi, 113 Rcpp::IntegerVector toi_in, 114 const std::string& heap_type); 115 116Rcpp::NumericMatrix rcpp_get_sp_dists_cat_threshold (const Rcpp::DataFrame graph, 117 const Rcpp::DataFrame vert_map_in, 118 Rcpp::IntegerVector fromi, 119 const double dlimit, 120 const std::string& heap_type); 121 122//---------------------------- 123//----- functions in centrality.cpp 124//---------------------------- 125 126Rcpp::NumericVector rcpp_centrality (const Rcpp::DataFrame graph, 127 const Rcpp::DataFrame vert_map_in, 128 const std::string& heap_type, 129 const double dist_threshold, 130 const bool edge_centrality, 131 const int sample);