Spaces:
Paused
Paused
| 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, :]) | |