Source code for punchbowl.auto.control.cache_layer.nfi_l1

import os

import numpy as np
from ndcube import NDCube

from punchbowl.auto.control.cache_layer import manager
from punchbowl.auto.control.cache_layer.loader_base_class import LoaderABC
from punchbowl.data import load_ndcube_from_fits
from punchbowl.util import DataLoader


[docs] class NFIL1Loader(LoaderABC): def __init__(self, path: str): self.path = path
[docs] def load(self) -> tuple: with manager.try_read_from_key(self.gen_key()) as buffer: if buffer is None: cube = self.load_from_disk() data, meta, wcs, uncertainty_is_inf = cube.data, cube.meta, cube.wcs, np.isinf(cube.uncertainty.array) self.try_caching((data, meta, wcs, np.packbits(uncertainty_is_inf))) else: data, meta, wcs, uncertainty_is_inf = self.from_bytes(buffer.data) uncertainty_is_inf = np.unpackbits(uncertainty_is_inf, count=data.size).astype(bool).reshape(data.shape) return data, meta, wcs, uncertainty_is_inf
[docs] def gen_key(self) -> str: return f"nfi_l1-{os.path.basename(self.path)}-{os.path.getmtime(self.path)}"
[docs] def src_repr(self) -> str: return self.path
[docs] def load_from_disk(self) -> NDCube: cube = load_ndcube_from_fits(self.path, include_uncertainty=True, include_provenance=False) return cube
[docs] def __repr__(self): return f"FitsFileLoader({self.path})"
[docs] def wrap_if_appropriate(file_path: str) -> str | DataLoader: if manager.caching_is_enabled(): return NFIL1Loader(file_path) return file_path