def copy_slice_from_whitelist(_from, _to, dims, both_slices, isNav, order=None): """Copies things from one object to another, according to whitelist, slicing where required. Parameters ---------- _from : object Original object _to : object Target object dims : tuple (navigation_dimensions, signal_dimensions) of the original object that is sliced both_slices : tuple (original_slices, array_slices) of the operation that is performed isNav : bool if the slicing operation is performed on navigation dimensions of the object order : tuple, None if given, performs the copying in the order given. If not all attributes given, the rest is random (the order a whitelist.keys() returns them). If given in the object, _slicing_order is looked up. """ def make_slice_navigation_decision(flags, isnav): if isnav: if 'inav' in flags: return True return None if 'isig' in flags: return False return None swl = None if hasattr(_from, '_slicing_whitelist'): swl = _from._slicing_whitelist if order is not None and not isinstance(order, tuple): raise ValueError('order argument has to be None or a tuple of strings') if order is None: order = () if hasattr(_from, '_slicing_order'): order = order + \ tuple(k for k in _from._slicing_order if k not in order) keys = order + tuple(k for k in _from._whitelist.keys() if k not in order) for key in keys: val = _from._whitelist[key] if key == 'self': target = None else: target = attrgetter(key)(_from) if val is None: # attrsetter(_to, key, attrgetter(key)(_from)) # continue flags = [] else: flags_str = val[0] flags = parse_flag_string(flags_str) if swl is not None and key in swl: flags.extend(parse_flag_string(swl[key])) if 'init' in flags: continue if 'id' in flags: continue if 'inav' in flags or 'isig' in flags: slice_nav = make_slice_navigation_decision(flags, isNav) result = _slice_target(target, dims, both_slices, slice_nav, 'sig' in flags) attrsetter(_to, key, result) continue else: # 'fn' in flag or no flags at all attrsetter(_to, key, target) continue
def copy_slice_from_whitelist( _from, _to, dims, both_slices, isNav, order=None): """Copies things from one object to another, according to whitelist, slicing where required. Parameters ---------- _from : object Original object _to : object Target object dims : tuple (navigation_dimensions, signal_dimensions) of the original object that is sliced both_slices : tuple (original_slices, array_slices) of the operation that is performed isNav : bool if the slicing operation is performed on navigation dimensions of the object order : tuple, None if given, performs the copying in the order given. If not all attributes given, the rest is random (the order a whitelist.keys() returns them). If given in the object, _slicing_order is looked up. """ def make_slice_navigation_decision(flags, isnav): if isnav: if 'inav' in flags: return True return None if 'isig' in flags: return False return None swl = None if hasattr(_from, '_slicing_whitelist'): swl = _from._slicing_whitelist if order is not None and not isinstance(order, tuple): raise ValueError('order argument has to be None or a tuple of strings') if order is None: order = () if hasattr(_from, '_slicing_order'): order = order + \ tuple(k for k in _from._slicing_order if k not in order) keys = order + tuple(k for k in _from._whitelist.keys() if k not in order) for key in keys: val = _from._whitelist[key] if val is None: # attrsetter(_to, key, attrgetter(key)(_from)) # continue flags = [] else: flags_str = val[0] flags = parse_flag_string(flags_str) if swl is not None and key in swl: flags.extend(parse_flag_string(swl[key])) if 'init' in flags: continue if 'id' in flags: continue if key == 'self': target = None else: target = attrgetter(key)(_from) if 'inav' in flags or 'isig' in flags: slice_nav = make_slice_navigation_decision(flags, isNav) result = _slice_target( target, dims, both_slices, slice_nav, 'sig' in flags) attrsetter(_to, key, result) continue else: # 'fn' in flag or no flags at all attrsetter(_to, key, target) continue
def copy_slice_from_whitelist(_from, _to, dims, both_slices, isNav): """Copies things from one object to another, according to whitelist, slicing where required. Parameters ---------- _from : object Original object _to : object Target object dims : tuple (navigation_dimensions, signal_dimensions) of the original object that is sliced both_slices : tuple (original_slices, array_slices) of the operation that is performed isNav : bool if the slicing operation is performed on navigation dimensions of the object """ def make_slice_navigation_decision(flags, isnav): if isnav: if 'inav' in flags: return True return None if 'isig' in flags: return False return None swl = None if hasattr(_from, '_slicing_whitelist'): swl = _from._slicing_whitelist for key, val in _from._whitelist.iteritems(): if key == 'self': target = None else: target = attrgetter(key)(_from) if val is None: # attrsetter(_to, key, attrgetter(key)(_from)) # continue flags = [] else: flags_str = val[0] flags = parse_flag_string(flags_str) if swl is not None and key in swl: flags.extend(parse_flag_string(swl[key])) if 'init' in flags: continue if 'id' in flags: continue if 'inav' in flags or 'isig' in flags: slice_nav = make_slice_navigation_decision(flags, isNav) result = _slice_target( target, dims, both_slices, slice_nav, 'sig' in flags) attrsetter(_to, key, result) continue else: # 'fn' in flag or no flags at all attrsetter(_to, key, target) continue
def copy_slice_from_whitelist(_from, _to, dims, both_slices, isNav): """Copies things from one object to another, according to whitelist, slicing where required. Parameters ---------- _from : object Original object _to : object Target object dims : tuple (navigation_dimensions, signal_dimensions) of the original object that is sliced both_slices : tuple (original_slices, array_slices) of the operation that is performed isNav : bool if the slicing operation is performed on navigation dimensions of the object """ def make_slice_navigation_decision(flags, isnav): if isnav: if 'inav' in flags: return True return None if 'isig' in flags: return False return None swl = None if hasattr(_from, '_slicing_whitelist'): swl = _from._slicing_whitelist for key, val in _from._whitelist.iteritems(): if key == 'self': target = None else: target = attrgetter(key)(_from) if val is None: # attrsetter(_to, key, attrgetter(key)(_from)) # continue flags = [] else: flags_str = val[0] flags = parse_flag_string(flags_str) if swl is not None and key in swl: flags.extend(parse_flag_string(swl[key])) if 'init' in flags: continue if 'id' in flags: continue if 'inav' in flags or 'isig' in flags: slice_nav = make_slice_navigation_decision(flags, isNav) result = _slice_target(target, dims, both_slices, slice_nav, 'sig' in flags) attrsetter(_to, key, result) continue else: # 'fn' in flag or no flags at all attrsetter(_to, key, target) continue