Make versor construction fail closed instead of synthesizing hash-derived fallback rotors. - remove pseudo-random construction fallback from unitize_versor - add signed residual helper for +1 field states vs ±1 manifold entries - validate vocab manifold entries with full residuals - document antipodal transition rotor failure contract - add focused invariant tests for versor closure and manifold validation
52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
import numpy as np
|
|
import pytest
|
|
|
|
from vocab.manifold import VocabManifold
|
|
|
|
|
|
def _identity() -> np.ndarray:
|
|
v = np.zeros(32, dtype=np.float32)
|
|
v[0] = 1.0
|
|
return v
|
|
|
|
|
|
def _negative_unit_vector() -> np.ndarray:
|
|
v = np.zeros(32, dtype=np.float32)
|
|
v[5] = 1.0
|
|
return v
|
|
|
|
|
|
def _scalar_norm_one_with_non_scalar_residue() -> np.ndarray:
|
|
v = np.zeros(32, dtype=np.float32)
|
|
v[0] = np.sqrt(0.5)
|
|
v[1] = np.sqrt(0.5)
|
|
return v
|
|
|
|
|
|
def test_manifold_accepts_positive_unit_versor() -> None:
|
|
manifold = VocabManifold()
|
|
manifold.add("one", _identity())
|
|
assert manifold.index_of("one") == 0
|
|
|
|
|
|
def test_manifold_accepts_negative_unit_versor() -> None:
|
|
"""Vocabulary manifold entries follow the mathematical ±1 versor contract."""
|
|
manifold = VocabManifold()
|
|
manifold.add("negative", _negative_unit_vector())
|
|
assert manifold.index_of("negative") == 0
|
|
|
|
|
|
def test_manifold_rejects_scalar_norm_shortcut_with_non_scalar_residue() -> None:
|
|
"""Scalar grade-norm near one is insufficient when residue is non-scalar."""
|
|
manifold = VocabManifold()
|
|
|
|
with pytest.raises(ValueError, match="non_scalar_residue"):
|
|
manifold.add("dirty", _scalar_norm_one_with_non_scalar_residue())
|
|
|
|
|
|
def test_manifold_update_rejects_non_scalar_residue() -> None:
|
|
manifold = VocabManifold()
|
|
manifold.add("clean", _identity())
|
|
|
|
with pytest.raises(ValueError, match="replacement versor residual"):
|
|
manifold.update("clean", _scalar_norm_one_with_non_scalar_residue())
|