successfully debugged for small 2 and 3 point tests
This commit is contained in:
@@ -26,7 +26,7 @@ bool MultiMatcher::TestPointPair(double dist_sq, index_t tuple_index_1,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (dist_sq >= distances_[num_bins_ - 1]) {
|
||||
if (dist_sq > distances_[num_bins_ - 1]) {
|
||||
|
||||
// this permutation is bad
|
||||
permutation_ok[perm_ind] = false;
|
||||
@@ -42,7 +42,13 @@ bool MultiMatcher::TestPointPair(double dist_sq, index_t tuple_index_1,
|
||||
double* ind_ptr = std::upper_bound(distances_.begin(), distances_.end(),
|
||||
dist_sq);
|
||||
int ind = (int)(ind_ptr - distances_.begin());
|
||||
permutation_ranges[perm_ind].set(tuple_index_1, tuple_index_2, ind);
|
||||
DEBUG_ASSERT(ind < num_bins_ && ind >= 0);
|
||||
// these need to be whereever they go in the permutation
|
||||
index_t perm_index_1 = GetPermutationIndex_(perm_ind, tuple_index_1);
|
||||
index_t perm_index_2 = GetPermutationIndex_(perm_ind, tuple_index_2);
|
||||
|
||||
permutation_ranges[perm_ind].set(perm_index_1, perm_index_2, ind);
|
||||
permutation_ranges[perm_ind].set(perm_index_2, perm_index_1, ind);
|
||||
|
||||
this_point_works = true;
|
||||
|
||||
|
||||
@@ -167,7 +167,8 @@ void NPointMulti::BaseCaseHelper_(ArrayList<ArrayList<index_t> >& point_sets,
|
||||
|
||||
double point_dist_sq = la::DistanceSqEuclidean(point_i, point_j);
|
||||
|
||||
//printf("Testing point pair (%d, %d)\n", j, k);
|
||||
//printf("Testing point pair (%d, %d)\n", point_index_j,
|
||||
// point_index_i);
|
||||
// This needs to fill in the permutation_ok_copy for each matcher
|
||||
this_point_works = matcher_.TestPointPair(point_dist_sq, j, k,
|
||||
permutation_ok_copy,
|
||||
@@ -193,6 +194,8 @@ void NPointMulti::BaseCaseHelper_(ArrayList<ArrayList<index_t> >& point_sets,
|
||||
|
||||
results_.ClearFilledResults();
|
||||
|
||||
//ot::Print(permutation_ok_copy);
|
||||
|
||||
for (index_t perm_index = 0; perm_index < matcher_.num_permutations();
|
||||
perm_index++) {
|
||||
|
||||
@@ -201,6 +204,10 @@ void NPointMulti::BaseCaseHelper_(ArrayList<ArrayList<index_t> >& point_sets,
|
||||
continue;
|
||||
}
|
||||
|
||||
//printf("perm_index: %d\n", perm_index);
|
||||
//permutation_ranges_copy[perm_index].PrintDebug("PermutationRangesCopy");
|
||||
//ot::Print(permutation_ranges_copy[perm_index]);
|
||||
|
||||
results_.IncrementRange(permutation_ranges_copy[perm_index]);
|
||||
|
||||
|
||||
@@ -292,14 +299,15 @@ void NPointMulti::DepthFirstRecursion_(NodeTuple& nodes,
|
||||
can_prune = true;
|
||||
break;
|
||||
} // check if the range is empty
|
||||
|
||||
*/
|
||||
// TODO: make sure that it's not too small or large for any matcher
|
||||
|
||||
if (valid_ranges[i].first > matcher_.max_dist()) {
|
||||
printf("Pruning on too much separation for any matcher.\n");
|
||||
//printf("Pruning on too much separation for any matcher.\n");
|
||||
can_prune = true;
|
||||
break;
|
||||
} // too large
|
||||
*/
|
||||
|
||||
|
||||
// add lower bounds here later
|
||||
|
||||
@@ -307,12 +315,12 @@ void NPointMulti::DepthFirstRecursion_(NodeTuple& nodes,
|
||||
|
||||
// check prune - i.e. check if it's still possible to contribute to anything
|
||||
if (can_prune) {
|
||||
printf("Pruned all\n");
|
||||
//printf("Pruned all\n");
|
||||
num_total_prunes_++;
|
||||
return;
|
||||
} // check prune
|
||||
else if (nodes.all_leaves()) {
|
||||
printf("Base Case\n");
|
||||
//printf("Base Case\n");
|
||||
BaseCase_(nodes, valid_ranges);
|
||||
} // base case
|
||||
else {
|
||||
|
||||
@@ -39,6 +39,8 @@ private:
|
||||
|
||||
int num_total_prunes_;
|
||||
|
||||
int num_points_;
|
||||
|
||||
ArrayList<ArrayList<index_t> > invalid_indices_;
|
||||
|
||||
|
||||
@@ -84,6 +86,8 @@ public:
|
||||
|
||||
leaf_size_ = fx_param_int(mod_, "leaf_size", 1);
|
||||
|
||||
num_points_ = data_points_.n_cols();
|
||||
|
||||
|
||||
// initialize results tensor
|
||||
results_.Init(tuple_size_, num_bands);
|
||||
@@ -116,6 +120,8 @@ public:
|
||||
|
||||
FindInvalidIndices_();
|
||||
|
||||
fx_result_int(mod_, "num_points", num_points_);
|
||||
|
||||
} // Init()
|
||||
|
||||
void Compute() {
|
||||
|
||||
@@ -144,6 +144,8 @@ public:
|
||||
|
||||
while(!done) {
|
||||
|
||||
//ot::Print(indices_copy);
|
||||
|
||||
Matrix this_matcher;
|
||||
this_matcher.Init(tuple_size_, tuple_size_);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user