From 3cc5e7b57b0ca9bd5143d746022cb69349023a68 Mon Sep 17 00:00:00 2001 From: Munyoki Kilyungi Date: Mon, 6 Feb 2023 15:05:56 +0300 Subject: Get the N-th matrix given N, an index value * gn3/db/matrix.py (get_nth_matrix): New function. Signed-off-by: Munyoki Kilyungi --- gn3/db/matrix.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'gn3/db/matrix.py') diff --git a/gn3/db/matrix.py b/gn3/db/matrix.py index 71e7ca0..0fc4bf4 100644 --- a/gn3/db/matrix.py +++ b/gn3/db/matrix.py @@ -26,6 +26,31 @@ def get_total_versions(db_path: str) -> int: return 0 return int(len(versions_hash) / BLOB_HASH_DIGEST) + +def get_nth_matrix(index: int, db_path: str) -> Optional[Matrix]: + """Get the NTH matrix from the DB_PATH. The most recent matrix is 0.""" + env = lmdb.open(db_path) + with env.begin(write=False) as txn: + versions_hash = txn.get(b"versions") + if (index * 32) + 32 > len(versions_hash): + return None + _hash, nrows = versions_hash[index * 32: (index * 32) + 32], 0 + row_pointers = txn.get(_hash + b":row-pointers") + if _hash: + (nrows,) = struct.unpack(" Optional[Matrix]: """Get the most recent matrix from DB_PATH. This is functionally equivalent to get_nth_matrix(0, db_path)""" -- cgit v1.2.3