Esempio n. 1
0
 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
Esempio n. 2
0
 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