def extract(self, field, subscriber=0): if not hasattr(self, 'paramDim0'): self.refreshParams() params = [ str(eval('self.paramDim%i.value' % i)) for i in range(len(field.dimensions)) ] for dim, arg in enumerate(params): if arg.startswith('#'): step = None if arg == '#:': start = 0 end = len(field.dimensions[dim].data) elif arg[1] == ':': start = 0 end = long(arg[2:]) + 1 elif arg[-1] == ':': start = long(arg[1:-1]) end = len(field.dimensions[dim].data) else: ind = map(long, arg[1:].split(':')) start = ind[0] if len(ind) == 1: end = ind[0] + 1 elif len(ind) >= 2: end = ind[1] + 1 if len(ind) == 3: step = ind[2] if len(ind) > 3: raise ValueError("Illegal slice with " "more than two colons.") params[dim] = slice(start, end, step) else: s = DataContainer.slice2ind(arg, field.dimensions[dim]) params[dim] = slice( s.start, min(s.stop + 1, len(field.dimensions[dim].data)), s.step) result = copy.deepcopy(field[params]) result.seal() return result
def extract(self, field, subscriber=0): if not hasattr(self, 'paramDim0'): self.refreshParams() params = [str(eval('self.paramDim%i.value' %i)) for i in range(len(field.dimensions))] for dim, arg in enumerate(params): if arg.startswith('#'): step = None if arg == '#:': start = 0 end = len(field.dimensions[dim].data) elif arg[1] == ':': start = 0 end = long(arg[2:]) + 1 elif arg[-1] == ':': start = long(arg[1: -1]) end = len(field.dimensions[dim].data) else: ind = map(long, arg[1:].split(':')) start = ind[0] if len(ind) == 1: end = ind[0] + 1 elif len(ind) >= 2: end = ind[1] + 1 if len(ind) == 3: step = ind[2] if len(ind) > 3: raise ValueError("Illegal slice with " "more than two colons.") params[dim] = slice(start, end, step) else: s = DataContainer.slice2ind(arg, field.dimensions[dim]) params[dim] = slice(s.start, min(s.stop + 1, len(field.dimensions[dim].data)), s.step) result = copy.deepcopy(field[params]) result.seal() return result