.. _program_listing_file_src_sparsebase_feature_degree_distribution.cc: Program Listing for File degree_distribution.cc =============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/sparsebase/feature/degree_distribution.cc``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "sparsebase/feature/degree_distribution.h" #include #include #include #include #include #include "sparsebase/utils/parameterizable.h" namespace sparsebase::feature { template DegreeDistribution::DegreeDistribution() { Register(); this->params_ = std::shared_ptr(new DegreeDistributionParams()); this->pmap_.insert({get_id_static(), this->params_}); } template DegreeDistribution::DegreeDistribution( DegreeDistributionParams params) { DegreeDistribution(); } template DegreeDistribution::DegreeDistribution( const DegreeDistribution &d) { Register(); this->params_ = d.params_; this->pmap_ = d.pmap_; } template DegreeDistribution::DegreeDistribution( const std::shared_ptr p) { Register(); this->params_ = p; this->pmap_[get_id_static()] = p; } template void DegreeDistribution::Register() { this->RegisterFunction( {format::CSR::get_id_static()}, GetDegreeDistributionCSR); } template std::unordered_map DegreeDistribution::Extract( format::Format *format, std::vector c, bool convert_input) { return {{this->get_id(), std::forward( GetDistribution(format, c, convert_input))}}; }; template std::vector DegreeDistribution::get_sub_ids() { return {typeid(DegreeDistribution)}; } template std::vector DegreeDistribution::get_subs() { return { new DegreeDistribution(*this)}; } template std::type_index DegreeDistribution::get_id_static() { return typeid(DegreeDistribution); } template DegreeDistribution::~DegreeDistribution() = default; template std::tuple>, FeatureType *> DegreeDistribution:: GetDistributionCached(format::Format *format, std::vector contexts, bool convert_input) { // std::tuple, // std::vector *>> // func_formats = // DegreeDistributionFunction func = // std::get<0>(func_formats); std::vector *> sfs = std::get<1>(func_formats); DegreeDistributionParams params; return this->CachedExecute(¶ms, contexts, convert_input, false, format); // func(sfs, this->params_.get()); } template FeatureType * DegreeDistribution::GetDistribution( format::Format *format, std::vector contexts, bool convert_input) { // std::tuple, // std::vector *>> // func_formats = // DegreeDistributionFunction func = // std::get<0>(func_formats); std::vector *> sfs = std::get<1>(func_formats); DegreeDistributionParams params; return this->Execute(¶ms, contexts, convert_input, format); // func(sfs, this->params_.get()); } template FeatureType * DegreeDistribution::GetDistribution( object::Graph *obj, std::vector contexts, bool convert_input) { // std::tuple, // std::vector *>> // func_formats = // DegreeDistributionFunction func = // std::get<0>(func_formats); std::vector *> sfs = std::get<1>(func_formats); format::Format *format = obj->get_connectivity(); return this->Execute(this->params_.get(), contexts, convert_input, format); // func(sfs, this->params_.get()); } template FeatureType *DegreeDistribution:: GetDegreeDistributionCSR(std::vector formats, utils::Parameters *params) { auto csr = formats[0]->AsAbsolute>(); auto dims = csr->get_dimensions(); IDType num_vertices = dims[0]; NNZType num_edges = csr->get_num_nnz(); FeatureType *dist = new FeatureType[num_vertices](); auto *rows = csr->get_row_ptr(); for (int i = 0; i < num_vertices; i++) { dist[i] = (rows[i + 1] - rows[i]) / (FeatureType)num_edges; // std::cout<< dist[i] << std::endl; } return dist; } #if !defined(_HEADER_ONLY) #include "init/degree_distribution.inc" #endif } // namespace sparsebase::feature