Skip to content

Commit b5215c3

Browse files
committed
int32 for .state
1 parent 6b048b0 commit b5215c3

File tree

1 file changed

+44
-42
lines changed

1 file changed

+44
-42
lines changed

src/tree_distances.cpp

+44-42
Original file line numberDiff line numberDiff line change
@@ -87,26 +87,26 @@ List cpp_robinson_foulds_info (const RawMatrix x, const RawMatrix y,
8787

8888
/* Dynamic allocation 20% faster for 105 tips, but VLA not permitted in C11 */
8989
splitbit b_complement[SL_MAX_SPLITS][SL_MAX_BINS];
90-
for (int16 i = 0; i != b.n_splits; i++) {
91-
for (int16 bin = 0; bin != last_bin; ++bin) {
90+
for (int32 i = 0; i != b.n_splits; i++) {
91+
for (int32 bin = 0; bin != last_bin; ++bin) {
9292
b_complement[i][bin] = ~b.state[i][bin];
9393
}
9494
b_complement[i][last_bin] = b.state[i][last_bin] ^ unset_mask;
9595
}
9696

97-
for (int16 ai = 0; ai != a.n_splits; ++ai) {
98-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
97+
for (int32 ai = 0; ai != a.n_splits; ++ai) {
98+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
9999

100100
bool all_match = true, all_complement = true;
101101

102-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
102+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
103103
if ((a.state[ai][bin] != b.state[bi][bin])) {
104104
all_match = false;
105105
break;
106106
}
107107
}
108108
if (!all_match) {
109-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
109+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
110110
if ((a.state[ai][bin] != b_complement[bi][bin])) {
111111
all_complement = false;
112112
break;
@@ -115,7 +115,7 @@ List cpp_robinson_foulds_info (const RawMatrix x, const RawMatrix y,
115115
}
116116
if (all_match || all_complement) {
117117
int16 leaves_in_split = 0;
118-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
118+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
119119
leaves_in_split += count_bits(a.state[ai][bin]);
120120
}
121121

@@ -154,20 +154,20 @@ List cpp_matching_split_distance (const RawMatrix x, const RawMatrix y,
154154
cost** score = new cost*[most_splits];
155155
for (int16 i = most_splits; i--; ) score[i] = new cost[most_splits];
156156

157-
for (int16 ai = 0; ai != a.n_splits; ++ai) {
158-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
157+
for (int32 ai = 0; ai != a.n_splits; ++ai) {
158+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
159159
score[ai][bi] = 0;
160-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
160+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
161161
score[ai][bi] += count_bits(a.state[ai][bin] ^ b.state[bi][bin]);
162162
}
163163
if (score[ai][bi] > half_tips) score[ai][bi] = n_tips - score[ai][bi];
164164
}
165-
for (int16 bi = b.n_splits; bi < most_splits; ++bi) {
165+
for (int32 bi = b.n_splits; bi < most_splits; ++bi) {
166166
score[ai][bi] = max_score;
167167
}
168168
}
169-
for (int16 ai = a.n_splits; ai < most_splits; ++ai) {
170-
for (int16 bi = 0; bi != most_splits; ++bi) {
169+
for (int32 ai = a.n_splits; ai < most_splits; ++ai) {
170+
for (int32 bi = 0; bi != most_splits; ++bi) {
171171
score[ai][bi] = max_score;
172172
}
173173
}
@@ -217,18 +217,18 @@ List cpp_jaccard_similarity (const RawMatrix x, const RawMatrix y,
217217
cost** score = new cost*[most_splits];
218218
for (int16 i = most_splits; i--; ) score[i] = new cost[most_splits];
219219

220-
for (int16 ai = 0; ai != a.n_splits; ++ai) {
220+
for (int32 ai = 0; ai != a.n_splits; ++ai) {
221221

222222
const int16
223223
na = a.in_split[ai],
224224
nA = n_tips - na
225225
;
226226

227-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
227+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
228228

229229
// x divides tips into a|A; y divides tips into b|B
230230
int16 a_and_b = 0;
231-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
231+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
232232
a_and_b += count_bits(a.state[ai][bin] & b.state[bi][bin]);
233233
}
234234

@@ -282,12 +282,12 @@ List cpp_jaccard_similarity (const RawMatrix x, const RawMatrix y,
282282
}
283283
}
284284
}
285-
for (int16 bi = b.n_splits; bi < most_splits; ++bi) {
285+
for (int32 bi = b.n_splits; bi < most_splits; ++bi) {
286286
score[ai][bi] = max_score;
287287
}
288288
}
289-
for (int16 ai = a.n_splits; ai < most_splits; ++ai) {
290-
for (int16 bi = 0; bi != most_splits; ++bi) {
289+
for (int32 ai = a.n_splits; ai < most_splits; ++ai) {
290+
for (int32 bi = 0; bi != most_splits; ++bi) {
291291
score[ai][bi] = max_score;
292292
}
293293
}
@@ -332,14 +332,14 @@ List cpp_msi_distance (const RawMatrix x, const RawMatrix y,
332332

333333
splitbit different[SL_MAX_BINS];
334334

335-
for (int16 ai = 0; ai != a.n_splits; ++ai) {
336-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
335+
for (int32 ai = 0; ai != a.n_splits; ++ai) {
336+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
337337
int16
338338
n_different = 0,
339339
n_a_only = 0,
340340
n_a_and_b = 0
341341
;
342-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
342+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
343343
different[bin] = a.state[ai][bin] ^ b.state[bi][bin];
344344
n_different += count_bits(different[bin]);
345345
n_a_only += count_bits(a.state[ai][bin] & different[bin]);
@@ -351,12 +351,12 @@ List cpp_msi_distance (const RawMatrix x, const RawMatrix y,
351351
((max_score / max_possible) *
352352
mmsi_score(n_same, n_a_and_b, n_different, n_a_only));
353353
}
354-
for (int16 bi = b.n_splits; bi < most_splits; ++bi) {
354+
for (int32 bi = b.n_splits; bi < most_splits; ++bi) {
355355
score[ai][bi] = max_score;
356356
}
357357
}
358-
for (int16 ai = a.n_splits; ai < most_splits; ++ai) {
359-
for (int16 bi = 0; bi < most_splits; ++bi) {
358+
for (int32 ai = a.n_splits; ai < most_splits; ++ai) {
359+
for (int32 bi = 0; bi < most_splits; ++bi) {
360360
score[ai][bi] = max_score;
361361
}
362362
}
@@ -388,10 +388,12 @@ List cpp_msi_distance (const RawMatrix x, const RawMatrix y,
388388
// [[Rcpp::export]]
389389
List cpp_mutual_clustering (const RawMatrix x, const RawMatrix y,
390390
const IntegerVector nTip) {
391+
Rcpp::Rcout << "\n\n\n\nASOUIGHAUI SFH ASHF KLASJHF KAJSF \n\n\n\n";
391392
if (x.cols() != y.cols()) {
392393
Rcpp::stop("Input splits must address same number of tips.");
393394
}
394395
const SplitList a(x), b(y);
396+
Rcpp::Rcout << "\n\n\n\nSPLITS LISTED \n\n\n\n";
395397
const bool a_has_more_splits = (a.n_splits > b.n_splits);
396398
const int16
397399
most_splits = a_has_more_splits ? a.n_splits : b.n_splits,
@@ -414,18 +416,18 @@ List cpp_mutual_clustering (const RawMatrix x, const RawMatrix y,
414416
NumericVector a_match(a.n_splits);
415417
std::unique_ptr<int16[]> b_match = std::make_unique<int16[]>(b.n_splits);
416418

417-
for (int16 ai = 0; ai != a.n_splits; ++ai) {
419+
for (int32 ai = 0; ai != a.n_splits; ++ai) {
418420
if (a_match[ai]) continue;
419421
const int16
420422
na = a.in_split[ai],
421423
nA = n_tips - na
422424
;
423425

424-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
426+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
425427

426428
// x divides tips into a|A; y divides tips into b|B
427429
int16 a_and_b = 0;
428-
for (int16 bin = 0; bin != a.n_bins; ++bin) {
430+
for (int32 bin = 0; bin != a.n_bins; ++bin) {
429431
a_and_b += count_bits(a.state[ai][bin] & b.state[bi][bin]);
430432
}
431433

@@ -461,7 +463,7 @@ List cpp_mutual_clustering (const RawMatrix x, const RawMatrix y,
461463
);
462464
}
463465
}
464-
for (int16 bi = b.n_splits; bi < most_splits; ++bi) {
466+
for (int32 bi = b.n_splits; bi < most_splits; ++bi) {
465467
score[ai][bi] = max_score;
466468
}
467469
}
@@ -482,21 +484,21 @@ List cpp_mutual_clustering (const RawMatrix x, const RawMatrix y,
482484

483485
if (exact_matches) {
484486
int16 a_pos = 0;
485-
for (int16 ai = 0; ai != a.n_splits; ++ai) {
487+
for (int32 ai = 0; ai != a.n_splits; ++ai) {
486488
if (a_match[ai]) continue;
487489
int16 b_pos = 0;
488-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
490+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
489491
if (b_match[bi]) continue;
490492
score[a_pos][b_pos] = score[ai][bi];
491493
b_pos++;
492494
}
493-
for (int16 bi = lap_dim - a_extra_splits; bi < lap_dim; ++bi) {
495+
for (int32 bi = lap_dim - a_extra_splits; bi < lap_dim; ++bi) {
494496
score[a_pos][bi] = max_score;
495497
}
496498
a_pos++;
497499
}
498-
for (int16 ai = lap_dim - b_extra_splits; ai < lap_dim; ++ai) {
499-
for (int16 bi = 0; bi != lap_dim; ++bi) {
500+
for (int32 ai = lap_dim - b_extra_splits; ai < lap_dim; ++ai) {
501+
for (int32 bi = 0; bi != lap_dim; ++bi) {
500502
score[ai][bi] = max_score;
501503
}
502504
}
@@ -512,7 +514,7 @@ List cpp_mutual_clustering (const RawMatrix x, const RawMatrix y,
512514

513515
std::unique_ptr<int16[]> lap_decode = std::make_unique<int16[]>(lap_dim);
514516
int16 fuzzy_match = 0;
515-
for (int16 bi = 0; bi != b.n_splits; ++bi) {
517+
for (int32 bi = 0; bi != b.n_splits; ++bi) {
516518
if (!b_match[bi]) {
517519
assert(fuzzy_match < lap_dim);
518520
lap_decode[fuzzy_match++] = bi + 1;
@@ -547,8 +549,8 @@ List cpp_mutual_clustering (const RawMatrix x, const RawMatrix y,
547549
return List::create(Named("score") = final_score,
548550
_["matching"] = final_matching);
549551
} else {
550-
for (int16 ai = a.n_splits; ai < most_splits; ++ai) {
551-
for (int16 bi = 0; bi != most_splits; ++bi) {
552+
for (int32 ai = a.n_splits; ai < most_splits; ++ai) {
553+
for (int32 bi = 0; bi != most_splits; ++bi) {
552554
score[ai][bi] = max_score;
553555
}
554556
}
@@ -597,8 +599,8 @@ List cpp_shared_phylo (const RawMatrix x, const RawMatrix y,
597599
cost** score = new cost*[most_splits];
598600
for (int16 i = most_splits; i--; ) score[i] = new cost[most_splits];
599601

600-
for (int16 ai = a.n_splits; ai--; ) {
601-
for (int16 bi = b.n_splits; bi--; ) {
602+
for (int32 ai = a.n_splits; ai--; ) {
603+
for (int32 bi = b.n_splits; bi--; ) {
602604
const double spi_over = spi_overlap(a.state[ai], b.state[bi], n_tips,
603605
a.in_split[ai], b.in_split[bi],
604606
a.n_bins);
@@ -608,12 +610,12 @@ List cpp_shared_phylo (const RawMatrix x, const RawMatrix y,
608610
max_score;
609611

610612
}
611-
for (int16 bi = b.n_splits; bi < most_splits; ++bi) {
613+
for (int32 bi = b.n_splits; bi < most_splits; ++bi) {
612614
score[ai][bi] = max_score;
613615
}
614616
}
615-
for (int16 ai = a.n_splits; ai < most_splits; ++ai) {
616-
for (int16 bi = 0; bi != most_splits; ++bi) {
617+
for (int32 ai = a.n_splits; ai < most_splits; ++ai) {
618+
for (int32 bi = 0; bi != most_splits; ++bi) {
617619
score[ai][bi] = max_score;
618620
}
619621
}

0 commit comments

Comments
 (0)