Source code for nornir_imageregistration.mmap_metadata

import tempfile
import numpy as np
from numpy.typing import DTypeLike, NDArray

# Do not import cupy here: package __init__ already selects cupy vs cupy_thunk, and a second
# eager import can raise AttributeError (partial init / version mismatch) before other except types.
# This module does not use cp in active code; if uncommenting helpers below, use
# nornir_imageregistration.GetComputationModule() or import inside the function.

[docs] class memmap_metadata(object): """meta-data for a memmap array""" _path: str _shape: NDArray _dtype: DTypeLike _mode: str | None @property def path(self) -> str: return self._path @property def shape(self) -> NDArray: return self._shape @property def dtype(self) -> DTypeLike: return self._dtype @property def mode(self) -> str: return self._mode or "" @mode.setter def mode(self, value: str | None): # Default to copy-on-write if value is None: self._mode = 'c' return if not isinstance(value, str): raise ValueError("Mode must be a string and one of the allowed memmap mode strings, 'r','r+','w+','c'") self._mode = value def __init__(self, path: str, shape: NDArray, dtype: DTypeLike, mode: str | None = None): self._path = path self._shape = shape self._dtype = dtype self._mode = None self.mode = mode
# # # def CreateTemporaryReadonlyMemmapFile(npArray: NDArray) -> memmap_metadata: # with tempfile.NamedTemporaryFile(suffix='.memmap', delete=False, # dir=os.path.join(nornir_imageregistration.gettempdir(), "memmap")) as hFile: # TempFullpath = hFile.name # hFile.close() # memImage = np.memmap(TempFullpath, dtype=npArray.dtype, shape=npArray.shape, mode='w+') # if isinstance(npArray, cp.ndarray): # memImage[:] = npArray.get()[:] # else: # memImage[:] = npArray[:] # memImage.flush() # del memImage # # np.save(TempFullpath, npArray) # return memmap_metadata(path=TempFullpath, shape=npArray.shape, dtype=npArray.dtype)