1+ #include " max_degree_column.h"
2+
3+ #include < memory>
4+ #include < tuple>
5+ #include < unordered_map>
6+ #include < utility>
7+ #include < vector>
8+
9+ #include " sparsebase/utils/parameterizable.h"
10+
11+ namespace sparsebase ::feature {
12+
13+ template <typename IDType, typename NNZType, typename ValueType>
14+ MaxDegreeColumn<IDType, NNZType, ValueType>::MaxDegreeColumn(ParamsType) {
15+ MaxDegreeColumn ();
16+ }
17+ template <typename IDType, typename NNZType, typename ValueType>
18+ MaxDegreeColumn<IDType, NNZType, ValueType>::MaxDegreeColumn() {
19+ Register ();
20+ this ->params_ = std::shared_ptr<ParamsType>(new ParamsType ());
21+ this ->pmap_ .insert ({get_id_static (), this ->params_ });
22+ }
23+
24+ template <typename IDType, typename NNZType, typename ValueType>
25+ MaxDegreeColumn<IDType, NNZType, ValueType>::MaxDegreeColumn(
26+ const MaxDegreeColumn<IDType, NNZType, ValueType> &d) {
27+ Register ();
28+ this ->params_ = d.params_ ;
29+ this ->pmap_ = d.pmap_ ;
30+ }
31+
32+ template <typename IDType, typename NNZType, typename ValueType>
33+ MaxDegreeColumn<IDType, NNZType, ValueType>::MaxDegreeColumn(
34+ const std::shared_ptr<ParamsType> r) {
35+ Register ();
36+ this ->params_ = r;
37+ this ->pmap_ [get_id_static ()] = r;
38+ }
39+
40+ template <typename IDType, typename NNZType, typename ValueType>
41+ MaxDegreeColumn<IDType, NNZType, ValueType>::~MaxDegreeColumn () = default ;
42+
43+ template <typename IDType, typename NNZType, typename ValueType>
44+ void MaxDegreeColumn<IDType, NNZType, ValueType>::Register() {
45+ this ->RegisterFunction (
46+ {format::CSC <IDType, NNZType, ValueType>::get_id_static ()},
47+ GetMaxDegreeColumnCSC);
48+ }
49+
50+ template <typename IDType, typename NNZType, typename ValueType>
51+ std::vector<std::type_index>
52+ MaxDegreeColumn<IDType, NNZType, ValueType>::get_sub_ids() {
53+ return {typeid (MaxDegreeColumn<IDType, NNZType, ValueType>)};
54+ }
55+
56+ template <typename IDType, typename NNZType, typename ValueType>
57+ std::vector<utils::Extractable *>
58+ MaxDegreeColumn<IDType, NNZType, ValueType>::get_subs() {
59+ return {new MaxDegreeColumn<IDType, NNZType, ValueType>(*this )};
60+ }
61+
62+ template <typename IDType, typename NNZType, typename ValueType>
63+ std::type_index MaxDegreeColumn<IDType, NNZType, ValueType>::get_id_static() {
64+ return typeid (MaxDegreeColumn<IDType, NNZType, ValueType>);
65+ }
66+
67+ template <typename IDType, typename NNZType, typename ValueType>
68+ std::unordered_map<std::type_index, std::any>
69+ MaxDegreeColumn<IDType, NNZType, ValueType>::Extract(format::Format *format,
70+ std::vector<context::Context *> c,
71+ bool convert_input) {
72+ return {{this ->get_id (),
73+ std::forward<NNZType *>(GetMaxDegreeColumn (format, c, convert_input))}};
74+ };
75+
76+ template <typename IDType, typename NNZType, typename ValueType>
77+ NNZType *MaxDegreeColumn<IDType, NNZType, ValueType>::GetMaxDegreeColumn(
78+ format::Format *format, std::vector<context::Context *> c,
79+ bool convert_input) {
80+ return this ->Execute (this ->params_ .get (), c, convert_input, format);
81+ }
82+
83+ template <typename IDType, typename NNZType, typename ValueType>
84+ std::tuple<std::vector<std::vector<format::Format *>>, NNZType *>
85+ MaxDegreeColumn<IDType, NNZType, ValueType>::GetMaxDegreeColumnCached(
86+ format::Format *format, std::vector<context::Context *> c,
87+ bool convert_input) {
88+ return this ->CachedExecute (this ->params_ .get (), c, convert_input, false ,
89+ format);
90+ }
91+
92+ template <typename IDType, typename NNZType, typename ValueType>
93+ NNZType *MaxDegreeColumn<IDType, NNZType, ValueType>::GetMaxDegreeColumnCSC(
94+ std::vector<format::Format *> formats, utils::Parameters *params) {
95+ auto csc = formats[0 ]->AsAbsolute <format::CSC <IDType, NNZType, ValueType>>();
96+ IDType num_col = csc->get_dimensions ()[0 ];
97+ auto *cols = csc->get_col_ptr ();
98+ NNZType *max_degree = new NNZType;
99+ *max_degree = cols[1 ] - cols[0 ];
100+ for (int i = 1 ; i < num_col; i++) {
101+ *max_degree = std::max (*max_degree, cols[i + 1 ] - cols[i]);
102+ }
103+ return max_degree;
104+ }
105+
106+ #if !defined(_HEADER_ONLY)
107+ #include " init/max_degree_column.inc"
108+ #endif
109+ } // namespace sparsebase::feature
0 commit comments