MCPcopy Create free account
hub / github.com/antmachineintelligence/mtgbmcode / Split

Method Split

src/io/sparse_bin.hpp:148–209  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

146 }
147
148 data_size_t Split(
149 uint32_t min_bin, uint32_t max_bin, uint32_t default_bin, MissingType missing_type, bool default_left,
150 uint32_t threshold, data_size_t* data_indices, data_size_t num_data,
151 data_size_t* lte_indices, data_size_t* gt_indices) const override {
152 // not need to split
153 if (num_data <= 0) { return 0; }
154 VAL_T th = static_cast<VAL_T>(threshold + min_bin);
155 const VAL_T minb = static_cast<VAL_T>(min_bin);
156 const VAL_T maxb = static_cast<VAL_T>(max_bin);
157 VAL_T t_default_bin = static_cast<VAL_T>(min_bin + default_bin);
158 if (default_bin == 0) {
159 th -= 1;
160 t_default_bin -= 1;
161 }
162 SparseBinIterator<VAL_T> iterator(this, data_indices[0]);
163 data_size_t lte_count = 0;
164 data_size_t gt_count = 0;
165 data_size_t* default_indices = gt_indices;
166 data_size_t* default_count = &gt_count;
167 if (missing_type == MissingType::NaN) {
168 if (default_bin <= threshold) {
169 default_indices = lte_indices;
170 default_count = &lte_count;
171 }
172 data_size_t* missing_default_indices = gt_indices;
173 data_size_t* missing_default_count = &gt_count;
174 if (default_left) {
175 missing_default_indices = lte_indices;
176 missing_default_count = &lte_count;
177 }
178 for (data_size_t i = 0; i < num_data; ++i) {
179 const data_size_t idx = data_indices[i];
180 const VAL_T bin = iterator.InnerRawGet(idx);
181 if (bin < minb || bin > maxb || t_default_bin == bin) {
182 default_indices[(*default_count)++] = idx;
183 } else if (bin == maxb) {
184 missing_default_indices[(*missing_default_count)++] = idx;
185 } else if (bin > th) {
186 gt_indices[gt_count++] = idx;
187 } else {
188 lte_indices[lte_count++] = idx;
189 }
190 }
191 } else {
192 if ((default_left && missing_type == MissingType::Zero) || (default_bin <= threshold && missing_type != MissingType::Zero)) {
193 default_indices = lte_indices;
194 default_count = &lte_count;
195 }
196 for (data_size_t i = 0; i < num_data; ++i) {
197 const data_size_t idx = data_indices[i];
198 const VAL_T bin = iterator.InnerRawGet(idx);
199 if (bin < minb || bin > maxb || t_default_bin == bin) {
200 default_indices[(*default_count)++] = idx;
201 } else if (bin > th) {
202 gt_indices[gt_count++] = idx;
203 } else {
204 lte_indices[lte_count++] = idx;
205 }

Callers

nothing calls this directly

Calls 1

InnerRawGetMethod · 0.45

Tested by

no test coverage detected