v0.5: factual generalization via dense analogy. learn_relation + solve_analogy implement Mikolov paris-france+spain=madrid in normalized dense space, averaged over known examples, excluding the query slot. Wired into structural answer() so unseen slots get plain-text answers. Measured end-to-end via the Brain with fastText: capitals holdout goes 0% (char) / 0% (structural) -> ~50-67% factual-correct (spain->madrid, portugal->lisbon, greece->athens, norway->oslo recovered correctly). from_fasttext uses batch projection (fast load). The semantic wall is broken. 109 tests.
595d852 verified | [ | |
| "tests/test_attractor.py::TestAttractor::test_empty_returns_gracefully", | |
| "tests/test_attractor.py::TestAttractor::test_no_candidate_experts_filtered", | |
| "tests/test_attractor.py::TestAttractor::test_single_expert_returns_candidate", | |
| "tests/test_attractor.py::TestAttractor::test_two_experts_synthesize", | |
| "tests/test_attractor.py::TestAttractor::test_weight_contributions_sum_to_one", | |
| "tests/test_attractor.py::TestOscillator::test_prepare_sets_state", | |
| "tests/test_attractor.py::TestOscillator::test_signature_matches_expert", | |
| "tests/test_attractor.py::TestOscillator::test_weight_settable", | |
| "tests/test_bench.py::TestDatasets::test_gen_all", | |
| "tests/test_bench.py::TestDatasets::test_gen_facts_deterministic", | |
| "tests/test_bench.py::TestDatasets::test_gen_qa_splits_disjoint", | |
| "tests/test_bench.py::TestMetrics::test_next_token_accuracy_in_range", | |
| "tests/test_bench.py::TestMetrics::test_next_token_accuracy_repetitive_high", | |
| "tests/test_bench.py::TestMetrics::test_qa_exact_recall", | |
| "tests/test_bench.py::TestMetrics::test_query_latency_positive", | |
| "tests/test_bench.py::TestMetrics::test_ram_mb_positive", | |
| "tests/test_bench.py::TestScalingPresets::test_scales_defined", | |
| "tests/test_bpe_expert.py::TestBPEBrain::test_brain_with_bpe_experts", | |
| "tests/test_bpe_expert.py::TestBPEBrain::test_mixed_char_and_bpe_brain", | |
| "tests/test_bpe_expert.py::TestBPEExpert::test_bpe_answer_better_than_char", | |
| "tests/test_bpe_expert.py::TestBPEExpert::test_bpe_answer_is_string", | |
| "tests/test_bpe_expert.py::TestBPEExpert::test_default_is_char", | |
| "tests/test_bpe_expert.py::TestBPEExpert::test_from_qa_pairs_with_bpe", | |
| "tests/test_bpe_expert.py::TestBPEExpert::test_from_text_with_bpe", | |
| "tests/test_bpe_expert.py::TestBPESaveLoad::test_bpe_expert_smaller_than_source", | |
| "tests/test_bpe_expert.py::TestBPESaveLoad::test_load_bpe_without_tokenizer_raises", | |
| "tests/test_bpe_expert.py::TestBPESaveLoad::test_no_vocab_json_for_bpe", | |
| "tests/test_bpe_expert.py::TestBPESaveLoad::test_round_trip_with_shared_bpe", | |
| "tests/test_bpe_expert.py::TestBuildBPE::test_bpe_is_deterministic", | |
| "tests/test_bpe_expert.py::TestBuildBPE::test_returns_bpe_tokenizer", | |
| "tests/test_brain.py::TestBrainConfig::test_custom_config", | |
| "tests/test_brain.py::TestBrainQuery::test_empty_brain_query", | |
| "tests/test_brain.py::TestBrainQuery::test_per_expert_answers_populated", | |
| "tests/test_brain.py::TestBrainQuery::test_query_returns_result", | |
| "tests/test_brain.py::TestBrainQuery::test_query_routes_to_right_expert", | |
| "tests/test_brain.py::TestBrainRoster::test_add_and_list", | |
| "tests/test_brain.py::TestBrainRoster::test_add_with_custom_name", | |
| "tests/test_brain.py::TestBrainRoster::test_remove", | |
| "tests/test_brain.py::TestBrainSelfModify::test_self_modify_history", | |
| "tests/test_brain.py::TestBrainSelfModify::test_self_modify_returns_result_or_none", | |
| "tests/test_brain.py::TestBrainThink::test_think_concepts_accumulate", | |
| "tests/test_brain.py::TestBrainThink::test_think_returns_result", | |
| "tests/test_brain_memory.py::TestBrainCentralMemory::test_brain_creates_memory_on_first_expert", | |
| "tests/test_brain_memory.py::TestBrainCentralMemory::test_brain_remember_recall", | |
| "tests/test_brain_memory.py::TestBrainCentralMemory::test_brain_save_load_persists_concepts", | |
| "tests/test_brain_memory.py::TestBrainCentralMemory::test_brain_with_D_param", | |
| "tests/test_brain_memory.py::TestBrainCentralMemory::test_think_writes_to_central_memory", | |
| "tests/test_brain_memory.py::TestBrainMemory::test_create_empty", | |
| "tests/test_brain_memory.py::TestBrainMemory::test_dimension_mismatch_raises", | |
| "tests/test_brain_memory.py::TestBrainMemory::test_recall_empty_memory", | |
| "tests/test_brain_memory.py::TestBrainMemory::test_reconstruct", | |
| "tests/test_brain_memory.py::TestBrainMemory::test_remember_and_recall", | |
| "tests/test_brain_memory.py::TestBrainMemory::test_save_load_round_trip", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_answer_returns_string", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_candidate_hv", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_candidate_hv_empty", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_couples_to_brain", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_from_corpus_local_builds", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_get_word_hv", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_get_word_hv_oov", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_relevance_positive", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_semantic_similarity_above_noise", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_solve_analogy_excludes_slot", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_solve_analogy_returns_answer", | |
| "tests/test_embedding.py::TestEmbeddingExpert::test_solve_analogy_unknown_relation", | |
| "tests/test_embedding.py::TestProjection::test_dense_to_hv_identical_vectors", | |
| "tests/test_embedding.py::TestProjection::test_different_seeds_differ", | |
| "tests/test_embedding.py::TestProjection::test_dim_mismatch_raises", | |
| "tests/test_embedding.py::TestProjection::test_make_projection_deterministic", | |
| "tests/test_embedding.py::TestProjection::test_make_projection_shape", | |
| "tests/test_embedding.py::TestProjection::test_projection_preserves_cosine", | |
| "tests/test_expert.py::TestExpertBuild::test_different_seeds_give_different_self_hv", | |
| "tests/test_expert.py::TestExpertBuild::test_from_qa_pairs", | |
| "tests/test_expert.py::TestExpertBuild::test_from_text", | |
| "tests/test_expert.py::TestExpertBuild::test_from_text_records_source_stream", | |
| "tests/test_expert.py::TestExpertBuild::test_qa_records_source_pairs", | |
| "tests/test_expert.py::TestExpertBuild::test_signature_is_deterministic", | |
| "tests/test_expert.py::TestExpertCompression::test_expert_directory_structure", | |
| "tests/test_expert.py::TestExpertCompression::test_qa_expert_smaller_than_source", | |
| "tests/test_expert.py::TestExpertCompression::test_text_expert_smaller_than_source", | |
| "tests/test_expert.py::TestExpertDatasetFormats::test_csv_qa", | |
| "tests/test_expert.py::TestExpertDatasetFormats::test_json_qa", | |
| "tests/test_expert.py::TestExpertDatasetFormats::test_jsonl", | |
| "tests/test_expert.py::TestExpertDatasetFormats::test_txt", | |
| "tests/test_expert.py::TestExpertQuery::test_answer_returns_string", | |
| "tests/test_expert.py::TestExpertQuery::test_candidate_hv_returns_hv", | |
| "tests/test_expert.py::TestExpertQuery::test_relevance_returns_float", | |
| "tests/test_expert.py::TestExpertRoundTrip::test_manifest_preserved", | |
| "tests/test_expert.py::TestExpertRoundTrip::test_qa_round_trip", | |
| "tests/test_expert.py::TestExpertRoundTrip::test_text_round_trip", | |
| "tests/test_integration.py::test_compression_at_realistic_size", | |
| "tests/test_integration.py::test_full_pipeline", | |
| "tests/test_integration.py::test_multiple_experts_couple", | |
| "tests/test_structural.py::TestExpertStructural::test_char_level_returns_empty_for_unknown", | |
| "tests/test_structural.py::TestExpertStructural::test_expert_learns_patterns", | |
| "tests/test_structural.py::TestExpertStructural::test_no_patterns_falls_back_to_char", | |
| "tests/test_structural.py::TestExpertStructural::test_relevance_positive_for_pattern", | |
| "tests/test_structural.py::TestExpertStructural::test_unknown_slot_returns_nonempty", | |
| "tests/test_structural.py::TestStructuralBrain::test_brain_routes_structural_expert", | |
| "tests/test_structural.py::TestStructuralEncoder::test_bind_cancels_pattern", | |
| "tests/test_structural.py::TestStructuralEncoder::test_encode_matches", | |
| "tests/test_structural.py::TestStructuralEncoder::test_encode_no_match", | |
| "tests/test_structural.py::TestStructuralEncoder::test_learn_idempotent", | |
| "tests/test_structural.py::TestStructuralEncoder::test_learn_invalid_template", | |
| "tests/test_structural.py::TestStructuralEncoder::test_learn_pattern", | |
| "tests/test_structural.py::TestStructuralEncoder::test_nearest_slot_empty", | |
| "tests/test_structural.py::TestStructuralEncoder::test_observe_and_nearest_slot", | |
| "tests/test_structural.py::TestStructuralEncoder::test_slot_hv_stable", | |
| "tests/test_structural.py::TestStructuralEncoder::test_to_from_dict_roundtrip" | |
| ] |