def __init__(cls, name, bases, dict): for field in ATOMIC_DATA_FIELDS.values(): meth = field.meth getMeth = 'get' + meth setMeth = 'set' + meth # Define public method for retrieving a copy of data array if field.call: def getData(self, var=field.var, call=field.call): for meth in call: getattr(self._ag, meth)() array = self._ag._data[var] return array[self._index] else: def getData(self, var=field.var): array = self._ag._data[var] if array is None: return None return array[self._index] getData = wrapGetMethod(getData) getData.__name__ = getMeth getData.__doc__ = field.getDocstr('set', False) setattr(cls, getMeth, getData) setattr(cls, '_' + getMeth, getData) if field.readonly: continue # Define public method for setting values in data array def setData(self, value, var=field.var, none=field.none): array = self._ag._data[var] if array is None: raise AttributeError('attribute of the AtomGroup is ' 'not set') array[self._index] = value if None: self._ag.__setattr__('_' + none, None) setData = wrapSetMethod(setData) setData.__name__ = setMeth setData.__doc__ = field.getDocstr('set', False) setattr(cls, setMeth, setData)
def __init__(cls, name, bases, dict): for field in ATOMIC_DATA_FIELDS.values(): meth = field.meth_pl getMeth = 'get' + meth if field.call: def getData(self, var=field.var, call=field.call, dtype=field.dtype): for meth in call: getattr(self._ag, meth)() data = self._ag._data[var][self._indices] result = np.zeros((self._len,) + data.shape[1:], dtype) result[self._mapping] = data return result else: def getData(self, var=field.var, dtype=field.dtype): array = self._ag._data[var] if array is None: return None data = self._ag._data[var][self._indices] result = np.zeros((self._len,) + data.shape[1:], dtype) result[self._mapping] = data return result getData = wrapGetMethod(getData) getData.__name__ = getMeth if field.dtype in (int, float): zero = '0' elif field.dtype == bool: zero = 'True' else: zero = '""' getData.__doc__ = field.getDocstr('get', selex=False) + \ 'Entries for dummy atoms will be ``{0:s}``.'.format(zero) setattr(cls, getMeth, getData) setattr(cls, '_' + getMeth, getData)
def __init__(cls, name, bases, dict): for field in ATOMIC_DATA_FIELDS.values(): meth = field.meth_pl getMeth = 'get' + meth setMeth = 'set' + meth # Define public method for retrieving a copy of data array if field.call: def getData(self, var=field.var, call=field.call): for meth in call: getattr(self, meth)() array = self._data[var] return array.copy() else: def getData(self, var=field.var): array = self._data[var] if array is None: return None return array.copy() getData = wrapGetMethod(getData) getData.__name__ = getMeth getData.__doc__ = field.getDocstr('get') setattr(cls, getMeth, getData) # Define private method for retrieving actual data array def _getData(self, var=field.var): return self._data[var] _getData = wrapGetMethod(_getData) _getData.__name__ = '_' + getMeth _getData.__doc__ = field.getDocstr('_get') setattr(cls, '_' + getMeth, _getData) if field.readonly: continue # Define public method for setting values in data array def setData(self, array, var=field.var, dtype=field.dtype, ndim=field.ndim, none=field.none): if self._n_atoms == 0: self._n_atoms = len(array) elif len(array) != self._n_atoms: raise ValueError('length of array must match numAtoms') if isinstance(array, list): array = np.array(array, dtype) elif not isinstance(array, np.ndarray): raise TypeError('array must be an ndarray or a list') elif array.ndim != ndim: raise ValueError('array must be {0:d} dimensional' .format(ndim)) elif array.dtype != dtype: try: array = array.astype(dtype) except ValueError: raise ValueError('array cannot be assigned type ' '{0:s}'.format(dtype)) self._data[var] = array if none: self.__setattr__('_'+none, None) setData = wrapSetMethod(setData) setData.__name__ = setMeth setData.__doc__ = field.getDocstr('set') setattr(cls, setMeth, setData)