from __future__ import annotations from synaptopus.art1 import ART1Network, ART1Params def test_art1_commits_first_category() -> None: network = ART1Network(ART1Params(max_categories=3, input_length=4, vigilance=0.9)) result = network.categorize((1, 0, 1, 0)) assert result.winner == 0 assert result.new_category is True assert result.committed_categories == 1 assert result.expected_vector == (1, 0, 1, 0) def test_art1_reuses_matching_category() -> None: network = ART1Network(ART1Params(max_categories=3, input_length=4, vigilance=0.9)) network.categorize((1, 0, 1, 0)) result = network.categorize((1, 0, 1, 0)) assert result.winner == 0 assert result.new_category is False assert result.committed_categories == 1 def test_art1_commits_new_category_for_nonmatching_pattern() -> None: network = ART1Network(ART1Params(max_categories=3, input_length=4, vigilance=0.9)) network.categorize((1, 0, 1, 0)) result = network.categorize((0, 1, 0, 1)) assert result.winner == 1 assert result.new_category is True assert result.committed_categories == 2 def test_art1_round_trips_through_dict() -> None: network = ART1Network(ART1Params(max_categories=2, input_length=4, vigilance=0.8)) network.categorize((1, 1, 0, 0)) restored = ART1Network.from_dict(network.to_dict()) assert restored.vigilance == network.vigilance assert restored.committed_categories == network.committed_categories assert restored.categories == network.categories