Example #1
0
 float get_score (size_t i) const
 {
     if (LOOM_DEBUG_LEVEL >= 1) {
         LOOM_ASSERT_LT(i, pos_to_hash_.size());
         LOOM_ASSERT_LT(pos_to_hash_[i], hash_to_score_.size());
     }
     auto hash = pos_to_hash_[i];
     return hash_to_score_[hash];
 }
Example #2
0
 void unsafe_add_consumer (size_t stage_number)
 {
     LOOM_ASSERT_LT(stage_number, stage_count_);
     assert_ready();
     size_t count = ++consumer_counts_[stage_number];
     guards_[stage_number].init(stage_number, count);
     assert_ready();
 }
Example #3
0
inline void CrossCat::validate () const
{
    if (LOOM_DEBUG_LEVEL >= 1) {
        LOOM_ASSERT_LT(0, schema.total_size());
        ValueSchema expected_schema;
        for (const auto & kind : kinds) {
            kind.model.validate();
            kind.mixture.validate(kind.model);
            expected_schema += kind.model.schema;
        }
        LOOM_ASSERT_EQ(schema, expected_schema);
        for (auto & tare : tares) {
            schema.validate(tare);
        }
    }
    if (LOOM_DEBUG_LEVEL >= 2) {
        splitter.validate(schema, featureid_to_kindid, kinds.size());
        for (size_t f = 0; f < featureid_to_kindid.size(); ++f) {
            size_t k = featureid_to_kindid[f];
            const auto & featureids = kinds[k].featureids;
            LOOM_ASSERT(
                featureids.find(f) != featureids.end(),
                "kind.featureids is missing " << f);
        }
        for (size_t k = 0; k < kinds.size(); ++k) {
            for (size_t f : kinds[k].featureids) {
                LOOM_ASSERT_EQ(featureid_to_kindid[f], k);
            }
        }
        for (size_t k = 0; k < kinds.size(); ++k) {
            LOOM_ASSERT_EQ(kinds[k].model.tares.size(), tares.size());
        }
    }
    if (LOOM_DEBUG_LEVEL >= 3) {
        std::vector<size_t> row_counts;
        for (const auto & kind : kinds) {
            row_counts.push_back(kind.mixture.count_rows());
        }
        for (size_t k = 1; k < kinds.size(); ++k) {
            LOOM_ASSERT_EQ(row_counts[k], row_counts[0]);
            LOOM_ASSERT_EQ(
                kinds[k].mixture.maintaining_cache,
                kinds[0].mixture.maintaining_cache);
        }
        std::vector<ProductValue> partial_tares;
        for (size_t id = 0; id < tares.size(); ++id) {
            splitter.split(tares[id], partial_tares);
            for (size_t k = 0; k < kinds.size(); ++k) {
                LOOM_ASSERT_EQ(partial_tares[k], kinds[k].model.tares[id]);
            }
        }
    }
}
Example #4
0
 static pair_t create_state (uint_fast64_t stage_number, count_t count)
 {
     LOOM_ASSERT_LT(stage_number, max_stage_count);
     LOOM_ASSERT_LE(count, 0xFFFFUL);
     return _state(stage_number, count);
 }