DotCache-Arena / dotcache /page_format.py
DeanoCalver's picture
Initial DotCache Arena Space upload
751ad26 verified
Raw
History Blame Contribute Delete
1.03 kB
from __future__ import annotations
from typing import cast
import numpy as np
from .packing import pack_bits
from .types import EncodedPage, Layout, PageHeader
def serialize_header(header: PageHeader) -> bytes:
return header.to_json().encode("utf-8")
def deserialize_header(payload: bytes) -> PageHeader:
return PageHeader.from_json(payload.decode("utf-8"))
def build_payload(codes: np.ndarray, bits: int, layout: Layout) -> np.ndarray:
if layout == "group_major":
return pack_bits(np.transpose(codes, (1, 0, 2)), bits)
return pack_bits(codes, bits)
def load_group_words(page: EncodedPage, group_index: int) -> np.ndarray:
if page.payload is None:
raise ValueError("M3 pages do not have packed payload")
if group_index < 0 or group_index >= page.header.num_groups:
raise IndexError("group_index out of range")
if page.header.layout == "group_major":
return cast(np.ndarray, page.payload[group_index])
return cast(np.ndarray, page.payload[:, group_index, :])