Source code for src.domains.time_space

import nifty8 as ift
import numpy as np

from functools import reduce

from ..obj.units import make_unit, Unit

[docs] def TimeSpace(times : np.ndarray, units : Unit): times = np.asarray(times) if isinstance(times,(float,np.float64,int)) or times.shape[0]<=1: return UnstructuredTimeDomain(1, make_unit(units)) if isinstance(times,list) and not isinstance(times[0],(float,int)): raise ValueError("times needs to be 1d-array") elif len(times.shape) != 1: raise ValueError("times needs to be 1d-array") distances = np.diff(times) if np.all(distances==distances[0]): time_space = TimeRGSpace(times.shape, make_unit(units), distances=distances[0]) else: time_space = UnstructuredTimeDomain(times.shape, make_unit(units)) return time_space
[docs] def isinstance_timespace(obj)->bool: if isinstance(obj,ift.DomainTuple): obj = obj[0] if not 'units' in dir(obj): print("Units not specified") return False if not (isinstance(obj, TimeRGSpace) or isinstance(obj,UnstructuredTimeDomain)): print('not RGSpace or UnstructuredDomain') return False return True
[docs] def are_compatible_timespaces(ts1 : object, ts2 : object )->bool: if isinstance(ts1,ift.DomainTuple): ts1 = ts1[0] if isinstance(ts2,ift.DomainTuple): ts2 = ts2[0] if not isinstance_timespace(ts1): print('Object is not a TimeSpace') return False if not isinstance_timespace(ts2): print('Object is not a TimeSpace') return False if ts1.units != ts2.units: print('times vectors have different units: {}'.format(ts1.units) + ' and {}'.format(ts2.units)) return False if ts1!=ts2: print('DomainMismatch') return False return True
[docs] class TimeRGSpace(ift.RGSpace): """ RGSpace for time """ _needed_for_hash = ['_rdistances','_shape','_harmonic']
[docs] def __init__(self, shape, units, distances): self._units = make_unit(units) self._harmonic = False if np.isscalar(shape): shape = (shape,) self._shape = tuple(int(i) for i in shape) if min(self._shape) < 0: raise ValueError('Negative number of pixels encountered') # self._rdistances = (float(distances),) * len(self._shape) self._hdistances = tuple( 1. / (np.array(self.shape)*np.array(self._rdistances))) # self._dvol = float(reduce(lambda x, y: x*y, self.distances)) self._size = int(reduce(lambda x, y: x*y, self._shape))
@property def units(self): return self._units
[docs] class UnstructuredTimeDomain(ift.UnstructuredDomain): """ UnstructuredDomain for time """ _needed_for_hash = ['_shape']
[docs] def __init__(self, shape, units): self._units = make_unit(units) try: self._shape = tuple([int(i) for i in shape]) except TypeError: self._shape = (int(shape), )
@property def units(self): return self._units