Source code for rpxdock.tests.phmap.test_phmap

import os, _pickle
import numpy as np
from rpxdock import phmap

[docs]def ua(a): return np.array(a, dtype="u8")
[docs]def fa(a): return np.array(a, dtype="f8")
[docs]def test_phmap(): N = 10000 phm = phmap.PHMap_u8u8() k = np.random.randint(0, 2**64, N, dtype="u8") k = np.unique(k) v = np.random.randint(0, 2**64, len(k), dtype="u8") phm[k] = v assert np.all(phm[k] == v) shuf = np.argsort(np.random.rand(N)) assert np.all(phm[k[shuf]] == v[shuf]) assert phm[k[0]] == v[0] assert phm[k[1234]] == v[1234] phm[k[:10]] = 10 assert np.all(phm[k[:10]] == 10) phm[77] = 77 assert phm[77] == 77
[docs]def test_phmap_contains(): N = 10000 phm = phmap.PHMap_u8u8() k = np.random.randint(0, 2**32, N, dtype="u8") k = np.unique(k) N = len(k) v = np.random.randint(0, 2**32, len(k), dtype="u8") phm[k] = v # v[123] = 77 assert np.all(phm[k] == v) shuf = np.argsort(np.random.rand(N)) assert np.all(phm[k[shuf]] == v[shuf]) assert len(phm.has(k)) == len(k) assert k in phm assert not [np.min(k) - 1, np.max(k) + 1] in phm assert not int(np.min(k) - 1) in phm assert not int(np.max(k) + 1) in phm
[docs]def test_phmap_items(): N = 1000 phm = phmap.PHMap_u8u8() k = np.random.randint(0, 2**64, N, dtype="u8") k = np.unique(k) v = np.random.randint(0, 2**64, len(k), dtype="u8") phm[k] = v assert np.all(phm[k] == v) shuf = np.argsort(np.random.rand(N)) assert np.all(phm[k[shuf]] == v[shuf]) k1 = set(k) k2 = set(k for k, v in phm.items()) assert k1 == k2 v1 = set(v) v2 = set(v for k, v in phm.items()) assert v1 == v2
[docs]def test_phmap_dump_load(tmpdir): N = 1000 phm = phmap.PHMap_u8u8() k = np.random.randint(0, 2**64, N, dtype="u8") k = np.unique(k) v = np.random.randint(0, 2**64, len(k), dtype="u8") phm[k] = v assert np.all(phm[k] == v) shuf = np.argsort(np.random.rand(N)) assert np.all(phm[k[shuf]] == v[shuf]) with open(os.path.join(tmpdir, "foo"), "wb") as out: _pickle.dump(phm, out) phm2 = phmap.PHMap_u8u8() with open(os.path.join(tmpdir, "foo"), "rb") as inp: phm2 = _pickle.load(inp) assert len(phm2) == len(phm) assert np.all(phm2[k] == v) assert np.all(phm2[k[shuf]] == v[shuf])
[docs]def test_phmap_cpp_roundtrip(): N = 2 phm = phmap.PHMap_u8u8() k = np.random.randint(0, 100, N, dtype="u8") k = np.unique(k) phm[k] = np.arange(len(k), dtype="u8") v = phm[k] assert 12345 not in phm phmap.test_mod_phmap_inplace(phm) assert np.all(phm[k] == v * 2) assert phm[12345] == phm[12345] assert 12345 in phm assert np.array(12345, "u8") in phm
[docs]def test_phmap_items_array(): phm = phmap.PHMap_u8u8() phm[ua([1, 2, 3])] = ua([4, 5, 6]) k, v = phm.items_array() assert set(k) == set([1, 2, 3]) assert set(v) == set([4, 5, 6]) assert np.all(phm[k] == v)
[docs]def test_phmap_eq(): phm = phmap.PHMap_u8u8() phm[ua([1, 2, 3])] = ua([4, 5, 6]) phm2 = phmap.PHMap_u8u8() phm2[ua([1, 2, 3])] = ua([4, 5, 6]) assert phm == phm2 phm2 = phmap.PHMap_u8u8() phm2[ua([1, 2, 4])] = ua([4, 5, 6]) assert phm != phm2 phm2 = phmap.PHMap_u8u8() phm2[ua([1, 2, 3])] = ua([4, 5, 0]) assert phm != phm2 phm2 = phmap.PHMap_u8u8() phm2[ua([1, 2])] = ua([4, 5]) assert phm != phm2 phm = phmap.PHMap_u8f8() phm[ua([1, 2, 3])] = fa([4, 5, 6]) phm2 = phmap.PHMap_u8f8() phm2[ua([1, 2, 3])] = fa([4, 5, 6]) assert phm == phm2 phm2 = phmap.PHMap_u8f8() phm2[ua([1, 2, 4])] = fa([4, 5, 6]) assert phm != phm2 phm2 = phmap.PHMap_u8f8() phm2[ua([1, 2, 3])] = fa([4, 5, 0]) assert phm != phm2 phm2 = phmap.PHMap_u8f8() phm2[ua([1, 2])] = fa([4, 5]) assert phm != phm2
if __name__ == "__main__": import tempfile test_phmap() test_phmap_items() test_phmap_contains() test_phmap_dump_load(tempfile.mkdtemp()) test_phmap_cpp_roundtrip() test_phmap_items_array() test_phmap_eq()