nodes_value_containers.hpp 5.83 KB
Newer Older
1
2
#ifndef NODE_VALUE_ARR
#define NODE_VALUE_ARR
Thomas Purcell's avatar
Thomas Purcell committed
3

Thomas Purcell's avatar
Thomas Purcell committed
4
#include <algorithm>
Thomas Purcell's avatar
Thomas Purcell committed
5
6
7
8
9
10
11
#include <memory>
#include <vector>

#include<utils/enum.hpp>

namespace node_value_arrs
{
12
    extern int N_SELECTED; //!< Number of features selected
Thomas Purcell's avatar
Thomas Purcell committed
13
    extern int N_SAMPLES; //!< Number of samples in the nodes
14
    extern int N_SAMPLES_TEST; //!< Number of samples in the nodes
Thomas Purcell's avatar
Thomas Purcell committed
15
16
    extern int N_STORE_FEATURES; //!< Number of features with stored values
    extern int N_RUNGS_STORED; //!< Number of rungs with values stored
Thomas Purcell's avatar
Thomas Purcell committed
17

18
    extern std::vector<int> TEMP_STORAGE_REG; //!< Register to see which feature is stored in each slot
19
    extern std::vector<int> TEMP_STORAGE_TEST_REG; //!< Register to see which feature is stored in each slot
20
    extern std::vector<double> D_MATRIX; //!< The descriptor matrix
21
    extern std::vector<double> VALUES_ARR; //!< Value of the stored features
22
    extern std::vector<double> TEST_VALUES_ARR; //!< Value of the stored features test values
23
    extern std::vector<double> TEMP_STORAGE_ARR; //!< Array to temporarily store feature values
24
    extern std::vector<double> TEMP_STORAGE_TEST_ARR; //!< Array to temporarily store feature values
Thomas Purcell's avatar
Thomas Purcell committed
25

Thomas Purcell's avatar
Thomas Purcell committed
26
27
28
29
30
31
32
33
    /**
     * @brief Get the maximum number of new features for each rung
     *
     * @param new_op operator that will add new features
     * @param n_current_features current number of of features in the rung
     *
     * @return [description]
     */
34
    int get_number_new_features(std::string new_op, int n_current_features);
Thomas Purcell's avatar
Thomas Purcell committed
35

Thomas Purcell's avatar
Thomas Purcell committed
36
37
38
39
40
41
42
43
    /**
     * @brief Get the maximum number of features to store
     *
     * @param allowed_operators list of allowed operators
     * @param n_dims Number of dimensions to store
     * @param n_feats number of features in Phi_0
     * @return [description]
     */
44
    int get_max_number_features(std::vector<std::string> allowed_operators, int n_dims, int n_feats);
Thomas Purcell's avatar
Thomas Purcell committed
45

Thomas Purcell's avatar
Thomas Purcell committed
46
47
48
49
50
    /**
     * @brief set of the value arrays
     * @details Take initial parameters and construct the feature arraies
     *
     * @param n_samples number of samples per feature
51
     * @param n_samples_test number of test samples per feature
Thomas Purcell's avatar
Thomas Purcell committed
52
53
     * @param n_primary_feat number of primary features
     */
54
    void initialize_values_arr(int n_samples, int n_samples_test, int n_primary_feat);
Thomas Purcell's avatar
Thomas Purcell committed
55
56
57
58
59
60
61
62
63
64

    /**
     * @brief set of the value arrays
     * @details Take initial parameters and construct the feature arraies
     *
     * @param n_dims Number of dimensions to store
     * @param n_feat number of features to store
     * @param use_temp If true keep the temporary_storage
     */
    void resize_values_arr(int n_dims, int n_feat, bool use_temp);
Thomas Purcell's avatar
Thomas Purcell committed
65

66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
    /**
     * @brief set of the value arrays
     * @details Take initial parameters and construct the feature arraies
     *
     * @param n_samples number of samples per feature
     * @param n_primary_feat number of primary features
     */
    void initialize_d_matrix_arr();

    /**
     * @brief set of the value arrays
     * @details Take initial parameters and construct the feature arraies
     *
     * @param n_select Number of features to select
     */
    void resize_d_matrix_arr(int n_select);

Thomas Purcell's avatar
Thomas Purcell committed
83
84
85
86
87
88
89
90
    /**
     * @brief Get a reference slot/feature register
     *
     * @param ind Feature index
     * @param offset Offset integer for TEMP_STORE_ARRAY
     *
     * @return The register element for a given feature index and offset
     */
Thomas Purcell's avatar
Thomas Purcell committed
91
    inline int& temp_storage_reg(int ind, int offset = 0){return TEMP_STORAGE_REG[(ind % N_STORE_FEATURES) + (offset % 3) * N_STORE_FEATURES];}
Thomas Purcell's avatar
Thomas Purcell committed
92

93
94
95
96
97
98
99
100
101
102
    /**
     * @brief Get a reference slot/feature test register
     *
     * @param ind Feature index
     * @param offset Offset integer for TEMP_STORE_TEST_ARRAY
     *
     * @return The register element for a given feature index and offset
     */
    inline int& temp_storage_test_reg(int ind, int offset = 0){return TEMP_STORAGE_TEST_REG[(ind % N_STORE_FEATURES) + (offset % 3) * N_STORE_FEATURES];}

Thomas Purcell's avatar
Thomas Purcell committed
103
104
105
106
107
108
109
    /**
     * @brief Access element of the permanent storage array
     *
     * @param feature_ind The feature index to access
     *
     * @return pointer to the feature;s data array
     */
110
    inline double* access_value_arr(int feature_ind){return VALUES_ARR.data() + feature_ind*N_SAMPLES;}
111

112
113
114
115
116
117
118
119
120
    /**
     * @brief Access element of the test value array
     *
     * @param feature_ind The feature index to access
     *
     * @return pointer to the feature;s test data array
     */
    inline double* access_test_value_arr(int feature_ind){return TEST_VALUES_ARR.data() + feature_ind*N_SAMPLES_TEST;}

Thomas Purcell's avatar
Thomas Purcell committed
121
122
123
124
125
126
127
    /**
     * @brief Access element of temporary storage array
     *
     * @param slot The slot of the temporary storage arrays
     *
     * @return pointer to the feature's temporary storage
     */
128
    inline double* access_temp_storage(int slot){return TEMP_STORAGE_ARR.data() + slot*N_SAMPLES;}
129

130
131
132
133
134
135
136
137
138
    /**
     * @brief Access element of temporary storage test array
     *
     * @param slot The slot of the temporary storage test arrays
     *
     * @return pointer to the feature's temporary test storage
     */
    inline double* access_temp_storage_test(int slot){return TEMP_STORAGE_TEST_ARR.data() + slot*N_SAMPLES_TEST;}

Thomas Purcell's avatar
Thomas Purcell committed
139
140
141
142
143
144
145
146
    /**
     * @brief Access the value_ptr to a feature
     *
     * @param ind Feature index
     * @param offset the offset for the storage
     *
     * @return The value pointer
     */
147
    double* get_value_ptr(int ind, int offset = 0);
Thomas Purcell's avatar
Thomas Purcell committed
148

149
150
151
152
153
154
155
156
157
158
    /**
     * @brief Access the test_value_ptr to a feature
     *
     * @param ind Feature index
     * @param offset the offset for the storage
     *
     * @return The value pointer
     */
    double* get_test_value_ptr(int ind, int offset = 0);

159
160
161
162
    /**
     * @brief Get the pointer to a primary feature
     *
     * @param ind Index of the primary feature
163
     * @return The pointer to the descriptor matrix's data
164
     */
165
    inline double* get_d_matrix_ptr(int ind)
Thomas Purcell's avatar
Thomas Purcell committed
166
    {
167
        return D_MATRIX.data() + ind * N_SAMPLES;
Thomas Purcell's avatar
Thomas Purcell committed
168
    }
Thomas Purcell's avatar
Thomas Purcell committed
169
170
}

171
#endif