from __future__ import annotations import math from synaptopus.analysis import analyze_sequence, first_order_conditional_entropy, shannon_entropy def test_shannon_entropy_is_zero_for_constant_sequence() -> None: assert shannon_entropy((1, 1, 1, 1)) == 0.0 def test_first_order_conditional_entropy_is_zero_for_deterministic_transitions() -> None: assert first_order_conditional_entropy((0, 1, 0, 1, 0, 1)) == 0.0 def test_analyze_sequence_reports_expected_bounds() -> None: analysis = analyze_sequence((0, 1, 0, 1), alphabet_size=2) assert analysis.item_count == 4 assert math.isclose(analysis.unigram_entropy_bits, 1.0) assert math.isclose(analysis.conditional_entropy_bits, 0.0) assert math.isclose(analysis.normalized_entropy, 1.0) assert math.isclose(analysis.predictability, 1.0) assert math.isclose(analysis.redundancy, 0.0)