import time
from rpxdock.motif.pairdat import *
from rpxdock.motif.pairscore import *
from rpxdock.xbin import Xbin
import _pickle
[docs]def test_create_res_pair_score(respairdat, tmpdir):
xbin = Xbin(1, 15)
rps = create_res_pair_score(
respairdat,
xbin,
min_bin_score=2,
min_pair_score=1,
min_ssep=10,
use_ss_key=True,
)
print(rps)
[docs]def test_res_pair_score_pickle(respairscore, tmpdir):
rps = respairscore
with open(tmpdir + "/foo", "wb") as out:
_pickle.dump(rps, out)
with open(tmpdir + "/foo", "rb") as inp:
rps2 = _pickle.load(inp)
assert np.all(rps.rotid == rps2.rotid)
assert np.all(rps.pdb == rps2.pdb)
assert np.all(rps.stub == rps2.stub)
assert rps.score_map == rps2.score_map
assert rps.range_map == rps2.range_map
[docs]def test_pair_score(respairscore):
rps = respairscore
print(rps.respair.shape, rps.ssid.shape)
keys = rps.keys
scores = rps.score_map[keys]
ranges = rps.range_map[keys].view("u4").reshape(-1, 2)
nrange = ranges[:, 1] - ranges[:, 0]
rlb = ranges[:, 0]
rub = ranges[:, 1]
ssi = rps.ssid[rps.respair[:, 0]]
ssj = rps.ssid[rps.respair[:, 1]]
for ibin in range(len(keys)):
# print(ibin, scores[ibin], nrange[ibin], ranges[ibin])
lb = rlb[ibin]
ub = rub[ibin]
assert len(np.unique(ssi[lb:ub])) == 1
assert len(np.unique(ssj[lb:ub])) == 1
[docs]def test_bin_score(respairscore):
keys = np.zeros(len(respairscore.keys) * 2, dtype="u8")
keys[:len(respairscore.keys)] = respairscore.keys
np.random.shuffle(keys)
t = time.perf_counter()
s = respairscore.bin_score(keys)
t = time.perf_counter() - t
print(f"perf {int(len(s) / t):,} {len(s):,}")
[docs]def test_bin_get_all_data(respairscore):
# on real system: perf perrot: 434,667 perkey: 141,453
assert not 0 in respairscore.range_map
keys = np.zeros(len(respairscore.keys) * 2, dtype="u8")
keys[:len(respairscore.keys)] = respairscore.keys
np.random.shuffle(keys)
t = time.perf_counter()
binrots, hits = respairscore.bin_get_all_data(keys)
t = time.perf_counter() - t
print(len(keys), len(binrots))
for i in range(10):
print([x.shape for x in binrots[i]])
assert np.all(keys[hits] > 0)
assert np.all(keys[~hits] == 0)
totsize = sum(len(x[0]) for x in binrots)
print(len(binrots), totsize)
print(f"perf perrot: {int(totsize / t):,} perkey: {int(len(binrots) / t):,}")
[docs]def make_score_files_moveme():
# f = "/home/sheffler/debug/rpxdock/respairdat_si30.pickle"
# # f2 = "/home/sheffler/debug/rpxdock/datafiles/respairdat_si30_rotamers"
# f = "rpxdock/data/respairdat10_plus_xmap_rots.pickle"
# f2 = "rpxdock/data/respairscore10"
# f = "rpxdock/data/respairdat10.pickle"
f = "/home/sheffler/debug/derp_learning/pdb_res_pair_data_si30_10.pickle"
f1 = "rpxdock/data/respairdat10_plus_xmap_rots.pickle"
f2 = "rpxdock/data/pairscore10.pickle"
with open(f, "rb") as inp:
rp = ResPairData(_pickle.load(inp))
rp.data["stub"] = ["resid", "hrow", ""], bb_stubs(rp.n, rp.ca, rp.c)
xbin = Xbin(1.0, 20)
add_xbin_to_respairdat(rp, xbin, min_ssep=10)
rotspace = get_rotamer_space()
add_rots_to_respairdat(rp, rotspace)
with open(f1, "wb") as out:
_pickle.dump(rp.data, out)
rps = create_res_pair_score(rp, min_ssep=10)
with open(f2, "wb") as out:
_pickle.dump(rps, out)
[docs]def terrible_sanity_check():
f = "/home/sheffler/debug/rpxdock/pdb_res_pair_data_si30_pairscore.pickle"
with open(f, "rb") as inp:
rps = _pickle.load(inp)
f2 = "/home/sheffler/debug/rpxdock/pdb_res_pair_data_si30_pairscore/resdata.pickle"
with open(f2, "rb") as inp:
rd = _pickle.load(inp)
assert rps.stub.shape == rd.stub.shape
assert rps.xbin.cart_resl == rd.xbin.cart_resl
assert rps.keys.shape == rd.keys.shape
assert len(rps.score_map) == len(rd.keys)
assert len(rps.range_map) == len(rd.keys)
assert rps.respair.shape == rd.respair.shape
assert rps.aaid.shape == rd.aaid.shape
assert rps.ssid.shape == rd.ssid.shape
assert rps.rotid.shape == rd.rotid.shape
assert rps.stub.shape == rd.stub.shape
assert rps.pdb.shape == rd.pdb.shape
assert rps.resno.shape == rd.resno.shape
for i in range(len(rps.rotchi)):
assert list(rps.rotchi[i]) == list(rd.rotchi[i])
assert rps.rotlbl == rd.rotlbl
assert rps.id2aa.shape == rd.id2aa.shape
assert rps.id2ss.shape == rd.id2ss.shape
f = "/home/sheffler/debug/rpxdock/pdb_res_pair_data_si30_pairscore.pickle"
with open(f, "rb") as inp:
rps = _pickle.load(inp)
# f2 = "/home/sheffler/debug/rpxdock/pdb_res_pair_data_si30_pairscore/resdata.pickle"
# with open(f2, "rb") as inp:
# rd = _pickle.load(inp)
print(len(rps.score_map) / 1000000)
k, v = rps.score_map.items_array()
from time import perf_counter
from rpxdock.phmap import PHMap_u8f8
t = perf_counter()
x = rps.score_map[k]
t = perf_counter() - t
assert np.all(x == v)
print(t)
t = perf_counter()
p = PHMap_u8f8()
p[k] = v
t = perf_counter() - t
assert np.all(x == v)
print(t)
if 0: # __name__ == "__main__":
make_score_files_moveme()
# import tempfile
# with open(f, "rb") as inp:
# rp = ResPairData(_pickle.load(inp))
# test_create_res_pair_score(rp, tempfile.mkdtemp())
# rps = load_respairscore(f2)
# test_pair_score(rps)
# test_bin_get_all_data(rps)
# test_bin_score(rps)