| |
|
| | import numpy as np
|
| | import pytest
|
| | from mnemocore.core.binary_hdv import BinaryHDV
|
| |
|
| | class TestLargeDimensionPermutation:
|
| | """Tests for large-dimension permute correctness."""
|
| |
|
| | LARGE_DIM = 65536
|
| |
|
| | def test_permute_large_dim_correctness(self):
|
| | """
|
| | Compare permute implementation against the golden reference
|
| | (unpackbits->roll->packbits).
|
| | """
|
| | D = self.LARGE_DIM
|
| | v = BinaryHDV.random(D)
|
| |
|
| |
|
| | bits = np.unpackbits(v.data)
|
| |
|
| | test_shifts = [0, 1, 7, 8, 9, 100, D-1, D+1]
|
| |
|
| | for shift in test_shifts:
|
| |
|
| | shifted_bits = np.roll(bits, shift)
|
| | expected_data = np.packbits(shifted_bits)
|
| |
|
| |
|
| | permuted = v.permute(shift)
|
| |
|
| | assert permuted.dimension == D
|
| | assert np.array_equal(permuted.data, expected_data), \
|
| | f"Mismatch for shift {shift}"
|
| |
|
| | def test_permute_invertible(self):
|
| | D = self.LARGE_DIM
|
| | a = BinaryHDV.random(D)
|
| | b = a.permute(123).permute(-123)
|
| | assert a == b
|
| |
|
| | def test_permute_full_cycle(self):
|
| | D = self.LARGE_DIM
|
| | a = BinaryHDV.random(D)
|
| | assert a.permute(D) == a
|
| |
|