Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/core/algorithm/hnsw/hnsw_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
namespace zvec {
namespace core {

HnswBuilder::HnswBuilder() {}
HnswBuilder::HnswBuilder() = default;

int HnswBuilder::init(const IndexMeta &meta, const ailego::Params &params) {
LOG_INFO("Begin HnswBuilder::init");
Expand Down
12 changes: 6 additions & 6 deletions src/core/algorithm/hnsw/hnsw_context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ int HnswContext::init(ContextType type) {
switch (type) {
case kBuilderContext:
ret = visit_filter_.init(VisitFilter::ByteMap, entity_->doc_cnt(),
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand All @@ -52,7 +52,7 @@ int HnswContext::init(ContextType type) {

case kSearcherContext:
ret = visit_filter_.init(filter_mode_, entity_->doc_cnt(), max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand All @@ -68,7 +68,7 @@ int HnswContext::init(ContextType type) {
max_scan_num_ = compute_max_scan_num(doc_cnt);
reserve_max_doc_cnt_ = doc_cnt + compute_reserve_cnt(doc_cnt);
ret = visit_filter_.init(filter_mode_, reserve_max_doc_cnt_,
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand Down Expand Up @@ -111,7 +111,7 @@ int HnswContext::update(const ailego::Params &params) {
}
}

float prob = negative_probility_;
float prob = negative_probability_;
p.clear();
switch (type_) {
case kSearcherContext:
Expand All @@ -123,7 +123,7 @@ int HnswContext::update(const ailego::Params &params) {
}
params.get(p, &prob);
if (filter_mode_ == VisitFilter::BloomFilter &&
std::abs(prob - negative_probility_) > 1e-6) {
std::abs(prob - negative_probability_) > 1e-6) {
need_update = true;
}
if (need_update) {
Expand All @@ -135,7 +135,7 @@ int HnswContext::update(const ailego::Params &params) {
max_doc_cnt = reserve_max_doc_cnt_;
}
int ret = visit_filter_.init(filter_mode_, max_doc_cnt, max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand Down
6 changes: 3 additions & 3 deletions src/core/algorithm/hnsw/hnsw_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,8 @@ class HnswContext : public IndexContext {
filter_mode_ = v;
}

inline void set_filter_negative_probility(float v) {
negative_probility_ = v;
inline void set_filter_negative_probability(float v) {
negative_probability_ = v;
}

inline void set_max_scan_ratio(float v) {
Expand Down Expand Up @@ -501,7 +501,7 @@ class HnswContext : public IndexContext {
uint32_t topk_{0};
uint32_t group_topk_{0};
uint32_t filter_mode_{VisitFilter::ByteMap};
float negative_probility_{HnswEntity::kDefaultBFNegativeProbility};
float negative_probability_{HnswEntity::kDefaultBFNegativeProbability};
uint32_t ef_{HnswEntity::kDefaultEf};
float max_scan_ratio_{HnswEntity::kDefaultScanRatio};
uint32_t magic_{0U};
Expand Down
2 changes: 1 addition & 1 deletion src/core/algorithm/hnsw/hnsw_entity.h
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ class HnswEntity {
constexpr static uint32_t kDefaultMinScanLimit = 10000;
constexpr static uint32_t kDefaultMaxScanLimit =
std::numeric_limits<uint32_t>::max();
constexpr static float kDefaultBFNegativeProbility = 0.001f;
constexpr static float kDefaultBFNegativeProbability = 0.001f;
constexpr static uint32_t kDefaultScalingFactor = 50U;
constexpr static uint32_t kDefaultBruteForceThreshold = 1000U;
constexpr static uint32_t kDefaultDocsHardLimit = 1 << 30U; // 1 billion
Expand Down
14 changes: 7 additions & 7 deletions src/core/algorithm/hnsw/hnsw_searcher.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
namespace zvec {
namespace core {

HnswSearcher::HnswSearcher() {}
HnswSearcher::HnswSearcher() = default;

HnswSearcher::~HnswSearcher() {}
HnswSearcher::~HnswSearcher() = default;

int HnswSearcher::init(const ailego::Params &search_params) {
params_ = search_params;
Expand All @@ -32,7 +32,7 @@ int HnswSearcher::init(const ailego::Params &search_params) {
params_.get(PARAM_HNSW_SEARCHER_NEIGHBORS_IN_MEMORY_ENABLE,
&neighbors_in_memory_enabled_);
params_.get(PARAM_HNSW_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB,
&bf_negative_probility_);
&bf_negative_probability_);
params_.get(PARAM_HNSW_SEARCHER_BRUTE_FORCE_THRESHOLD,
&bruteforce_threshold_);
params_.get(PARAM_HNSW_SEARCHER_FORCE_PADDING_RESULT_ENABLE,
Expand All @@ -41,7 +41,7 @@ int HnswSearcher::init(const ailego::Params &search_params) {
if (ef_ == 0) {
ef_ = HnswEntity::kDefaultEf;
}
if (bf_negative_probility_ <= 0.0f || bf_negative_probility_ >= 1.0f) {
if (bf_negative_probability_ <= 0.0f || bf_negative_probability_ >= 1.0f) {
LOG_ERROR("[%s] must be in range (0,1)",
PARAM_HNSW_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB.c_str());
return IndexError_InvalidArgument;
Expand All @@ -56,7 +56,7 @@ int HnswSearcher::init(const ailego::Params &search_params) {
"neighborsInMemoryEnabled=%u bfNagtiveProb=%f bruteForceThreshold=%u "
"forcePadding=%u",
ef_, max_scan_ratio_, bf_enabled_, check_crc_enabled_,
neighbors_in_memory_enabled_, bf_negative_probility_,
neighbors_in_memory_enabled_, bf_negative_probability_,
bruteforce_threshold_, force_padding_topk_enabled_);

return 0;
Expand Down Expand Up @@ -90,7 +90,7 @@ int HnswSearcher::cleanup() {
max_scan_num_ = 0U;
ef_ = HnswEntity::kDefaultEf;
bf_enabled_ = false;
bf_negative_probility_ = HnswEntity::kDefaultBFNegativeProbility;
bf_negative_probability_ = HnswEntity::kDefaultBFNegativeProbability;
bruteforce_threshold_ = HnswEntity::kDefaultBruteForceThreshold;
check_crc_enabled_ = false;
neighbors_in_memory_enabled_ = false;
Expand Down Expand Up @@ -425,7 +425,7 @@ IndexSearcher::Context::Pointer HnswSearcher::create_context() const {
uint32_t filter_mode =
bf_enabled_ ? VisitFilter::BloomFilter : VisitFilter::ByteMap;
ctx->set_filter_mode(filter_mode);
ctx->set_filter_negative_probility(bf_negative_probility_);
ctx->set_filter_negative_probability(bf_negative_probability_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);
Expand Down
2 changes: 1 addition & 1 deletion src/core/algorithm/hnsw/hnsw_searcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class HnswSearcher : public IndexSearcher {
bool check_crc_enabled_{false};
bool neighbors_in_memory_enabled_{false};
bool force_padding_topk_enabled_{false};
float bf_negative_probility_{HnswEntity::kDefaultBFNegativeProbility};
float bf_negative_probability_{HnswEntity::kDefaultBFNegativeProbability};
uint32_t magic_{0U};

State state_{STATE_INIT};
Expand Down
12 changes: 6 additions & 6 deletions src/core/algorithm/hnsw/hnsw_streamer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ int HnswStreamer::init(const IndexMeta &imeta, const ailego::Params &params) {
"Init params: maxIndexSize=%zu docsHardLimit=%zu docsSoftLimit=%zu "
"efConstruction=%u ef=%u upperMaxNeighborCnt=%u l0MaxNeighborCnt=%u "
"scalingFactor=%u maxScanRatio=%.3f minScanLimit=%zu maxScanLimit=%zu "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbility=%.5f "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbability=%.5f "
"checkCrcEnabled=%d pruneSize=%zu vectorSize=%u chunkSize=%zu "
"filterSameKey=%u getVectorEnabled=%u minNeighborCount=%u "
"forcePadding=%u ",
Expand Down Expand Up @@ -227,7 +227,7 @@ int HnswStreamer::cleanup(void) {
max_scan_limit_ = HnswEntity::kDefaultMaxScanLimit;
min_scan_limit_ = HnswEntity::kDefaultMinScanLimit;
chunk_size_ = HnswEntity::kDefaultChunkSize;
bf_negative_prob_ = HnswEntity::kDefaultBFNegativeProbility;
bf_negative_prob_ = HnswEntity::kDefaultBFNegativeProbability;
max_scan_ratio_ = HnswEntity::kDefaultScanRatio;
state_ = STATE_INIT;
check_crc_enabled_ = false;
Expand Down Expand Up @@ -281,7 +281,7 @@ int HnswStreamer::open(IndexStorage::Pointer stg) {
}
ret = metric_->init(meta_, meta_.metric_params());
if (ret != 0) {
LOG_ERROR("Failled to init metric, ret=%d", ret);
LOG_ERROR("Failed to init metric, ret=%d", ret);
return ret;
}

Expand Down Expand Up @@ -375,7 +375,7 @@ IndexStreamer::Context::Pointer HnswStreamer::create_context(void) const {
ctx->set_max_scan_ratio(max_scan_ratio_);
ctx->set_filter_mode(bf_enabled_ ? VisitFilter::BloomFilter
: VisitFilter::ByteMap);
ctx->set_filter_negative_probility(bf_negative_prob_);
ctx->set_filter_negative_probability(bf_negative_prob_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);
Expand Down Expand Up @@ -488,7 +488,7 @@ int HnswStreamer::add_with_id_impl(uint32_t id, const void *query,

ret = alg_->add_node(id, level, ctx);
if (ailego_unlikely(ret != 0)) {
LOG_ERROR("Hnsw stramer add node failed");
LOG_ERROR("Hnsw steamer add node failed");
(*stats_.mutable_discarded_count())++;
return ret;
}
Expand Down Expand Up @@ -569,7 +569,7 @@ int HnswStreamer::add_impl(uint64_t pkey, const void *query,

ret = alg_->add_node(id, level, ctx);
if (ailego_unlikely(ret != 0)) {
LOG_ERROR("Hnsw stramer add node failed");
LOG_ERROR("Hnsw steamer add node failed");
(*stats_.mutable_discarded_count())++;
return ret;
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/algorithm/hnsw/hnsw_streamer.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ class HnswStreamer : public IndexStreamer {
size_t bruteforce_threshold_{HnswEntity::kDefaultBruteForceThreshold};
size_t max_scan_limit_{HnswEntity::kDefaultMaxScanLimit};
size_t min_scan_limit_{HnswEntity::kDefaultMinScanLimit};
float bf_negative_prob_{HnswEntity::kDefaultBFNegativeProbility};
float bf_negative_prob_{HnswEntity::kDefaultBFNegativeProbability};
float max_scan_ratio_{HnswEntity::kDefaultScanRatio};

uint32_t magic_{0U};
Expand Down
12 changes: 6 additions & 6 deletions src/core/algorithm/hnsw_sparse/hnsw_sparse_context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ int HnswSparseContext::init(ContextType type) {
switch (type) {
case kSparseBuilderContext:
ret = visit_filter_.init(VisitFilter::ByteMap, entity_->doc_cnt(),
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand All @@ -46,7 +46,7 @@ int HnswSparseContext::init(ContextType type) {

case kSparseSearcherContext:
ret = visit_filter_.init(filter_mode_, entity_->doc_cnt(), max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand All @@ -62,7 +62,7 @@ int HnswSparseContext::init(ContextType type) {
max_scan_num_ = compute_max_scan_num(doc_cnt);
reserve_max_doc_cnt_ = doc_cnt + compute_reserve_cnt(doc_cnt);
ret = visit_filter_.init(filter_mode_, reserve_max_doc_cnt_,
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand Down Expand Up @@ -107,7 +107,7 @@ int HnswSparseContext::update(const ailego::Params &params) {
}
}

float prob = negative_probility_;
float prob = negative_probability_;
p.clear();
switch (type_) {
case kSparseSearcherContext:
Expand All @@ -119,7 +119,7 @@ int HnswSparseContext::update(const ailego::Params &params) {
}
params.get(p, &prob);
if (filter_mode_ == VisitFilter::BloomFilter &&
std::abs(prob - negative_probility_) > 1e-6) {
std::abs(prob - negative_probability_) > 1e-6) {
need_update = true;
}
if (need_update) {
Expand All @@ -131,7 +131,7 @@ int HnswSparseContext::update(const ailego::Params &params) {
max_doc_cnt = reserve_max_doc_cnt_;
}
int ret = visit_filter_.init(filter_mode_, max_doc_cnt, max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
Expand Down
6 changes: 3 additions & 3 deletions src/core/algorithm/hnsw_sparse/hnsw_sparse_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -297,8 +297,8 @@ class HnswSparseContext : public IndexContext {
filter_mode_ = v;
}

inline void set_filter_negative_probility(float v) {
negative_probility_ = v;
inline void set_filter_negative_probability(float v) {
negative_probability_ = v;
}

inline void set_max_scan_ratio(float v) {
Expand Down Expand Up @@ -494,7 +494,7 @@ class HnswSparseContext : public IndexContext {
uint32_t topk_{0};
uint32_t group_topk_{0};
uint32_t filter_mode_{VisitFilter::ByteMap};
float negative_probility_{HnswSparseEntity::kDefaultBFNegativeProbility};
float negative_probability_{HnswSparseEntity::kDefaultBFNegativeProbability};
uint32_t ef_{HnswSparseEntity::kDefaultEf};
float max_scan_ratio_{HnswSparseEntity::kDefaultScanRatio};
uint32_t magic_{0U};
Expand Down
2 changes: 1 addition & 1 deletion src/core/algorithm/hnsw_sparse/hnsw_sparse_entity.h
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,7 @@ class HnswSparseEntity {
constexpr static uint32_t kDefaultMinScanLimit = 10000;
constexpr static uint32_t kDefaultMaxScanLimit =
std::numeric_limits<uint32_t>::max();
constexpr static float kDefaultBFNegativeProbility = 0.001f;
constexpr static float kDefaultBFNegativeProbability = 0.001f;
constexpr static uint32_t kDefaultScalingFactor = 50U;
constexpr static uint32_t kDefaultBruteForceThreshold = 1000U;
constexpr static uint32_t kDefaultDocsHardLimit = 1 << 30U; // 1 billion
Expand Down
10 changes: 5 additions & 5 deletions src/core/algorithm/hnsw_sparse/hnsw_sparse_searcher.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ int HnswSparseSearcher::init(const ailego::Params &search_params) {
params_.get(PARAM_HNSW_SPARSE_SEARCHER_NEIGHBORS_IN_MEMORY_ENABLE,
&neighbors_in_memory_enabled_);
params_.get(PARAM_HNSW_SPARSE_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB,
&bf_negative_probility_);
&bf_negative_probability_);
params_.get(PARAM_HNSW_SPARSE_SEARCHER_BRUTE_FORCE_THRESHOLD,
&bruteforce_threshold_);
params_.get(PARAM_HNSW_SPARSE_SEARCHER_FORCE_PADDING_RESULT_ENABLE,
Expand All @@ -46,7 +46,7 @@ int HnswSparseSearcher::init(const ailego::Params &search_params) {
if (ef_ == 0) {
ef_ = HnswSparseEntity::kDefaultEf;
}
if (bf_negative_probility_ <= 0.0f || bf_negative_probility_ >= 1.0f) {
if (bf_negative_probability_ <= 0.0f || bf_negative_probability_ >= 1.0f) {
LOG_ERROR(
"[%s] must be in range (0,1)",
PARAM_HNSW_SPARSE_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB.c_str());
Expand All @@ -69,7 +69,7 @@ int HnswSparseSearcher::init(const ailego::Params &search_params) {
"neighborsInMemoryEnabled=%u bfNagtiveProb=%f bruteForceThreshold=%u "
"forcePadding=%u filteringRatio=%f",
ef_, max_scan_ratio_, bf_enabled_, check_crc_enabled_,
neighbors_in_memory_enabled_, bf_negative_probility_,
neighbors_in_memory_enabled_, bf_negative_probability_,
bruteforce_threshold_, force_padding_topk_enabled_,
query_filtering_ratio_);

Expand Down Expand Up @@ -104,7 +104,7 @@ int HnswSparseSearcher::cleanup() {
max_scan_num_ = 0U;
ef_ = HnswSparseEntity::kDefaultEf;
bf_enabled_ = false;
bf_negative_probility_ = HnswSparseEntity::kDefaultBFNegativeProbility;
bf_negative_probability_ = HnswSparseEntity::kDefaultBFNegativeProbability;
bruteforce_threshold_ = HnswSparseEntity::kDefaultBruteForceThreshold;
check_crc_enabled_ = false;
neighbors_in_memory_enabled_ = false;
Expand Down Expand Up @@ -524,7 +524,7 @@ IndexSearcher::Context::Pointer HnswSparseSearcher::create_context() const {
uint32_t filter_mode =
bf_enabled_ ? VisitFilter::BloomFilter : VisitFilter::ByteMap;
ctx->set_filter_mode(filter_mode);
ctx->set_filter_negative_probility(bf_negative_probility_);
ctx->set_filter_negative_probability(bf_negative_probability_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);
Expand Down
3 changes: 2 additions & 1 deletion src/core/algorithm/hnsw_sparse/hnsw_sparse_searcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ class HnswSparseSearcher : public IndexSearcher {
bool check_crc_enabled_{false};
bool neighbors_in_memory_enabled_{false};
bool force_padding_topk_enabled_{false};
float bf_negative_probility_{HnswSparseEntity::kDefaultBFNegativeProbility};
float bf_negative_probability_{
HnswSparseEntity::kDefaultBFNegativeProbability};

bool query_filtering_enabled_{false};
float query_filtering_ratio_{HnswSparseEntity::kDefaultQueryFilteringRatio};
Expand Down
6 changes: 3 additions & 3 deletions src/core/algorithm/hnsw_sparse/hnsw_sparse_streamer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ int HnswSparseStreamer::init(const IndexMeta &imeta,
"Init params: maxIndexSize=%zu docsHardLimit=%zu docsSoftLimit=%zu "
"efConstruction=%u ef=%u l0NeighborCnt=%u upperNeighborCnt=%u "
"scalingFactor=%u maxScanRatio=%.3f minScanLimit=%zu maxScanLimit=%zu "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbility=%.5f "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbability=%.5f "
"checkCrcEnabled=%d pruneSize=%zu chunkSize=%zu "
"filterSameKey=%u getVectorEnabled=%u "
"minNeighborCount=%u forcePadding=%u filteringRatio=%f",
Expand Down Expand Up @@ -242,7 +242,7 @@ int HnswSparseStreamer::cleanup(void) {
max_scan_limit_ = HnswSparseEntity::kDefaultMaxScanLimit;
min_scan_limit_ = HnswSparseEntity::kDefaultMinScanLimit;
chunk_size_ = HnswSparseEntity::kDefaultChunkSize;
bf_negative_prob_ = HnswSparseEntity::kDefaultBFNegativeProbility;
bf_negative_prob_ = HnswSparseEntity::kDefaultBFNegativeProbability;
max_scan_ratio_ = HnswSparseEntity::kDefaultScanRatio;
state_ = STATE_INIT;
check_crc_enabled_ = false;
Expand Down Expand Up @@ -384,7 +384,7 @@ IndexStreamer::Context::Pointer HnswSparseStreamer::create_context(void) const {
ctx->set_max_scan_ratio(max_scan_ratio_);
ctx->set_filter_mode(bf_enabled_ ? VisitFilter::BloomFilter
: VisitFilter::ByteMap);
ctx->set_filter_negative_probility(bf_negative_prob_);
ctx->set_filter_negative_probability(bf_negative_prob_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);
Expand Down
2 changes: 1 addition & 1 deletion src/core/algorithm/hnsw_sparse/hnsw_sparse_streamer.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ class HnswSparseStreamer : public IndexStreamer {
size_t bruteforce_threshold_{HnswSparseEntity::kDefaultBruteForceThreshold};
size_t max_scan_limit_{HnswSparseEntity::kDefaultMaxScanLimit};
size_t min_scan_limit_{HnswSparseEntity::kDefaultMinScanLimit};
float bf_negative_prob_{HnswSparseEntity::kDefaultBFNegativeProbility};
float bf_negative_prob_{HnswSparseEntity::kDefaultBFNegativeProbability};
float max_scan_ratio_{HnswSparseEntity::kDefaultScanRatio};
float sparse_neighbor_ratio_{HnswSparseEntity::kDefaultSparseNeighborRatio};
uint32_t sparse_neighbor_cnt_{0UL};
Expand Down
Loading