def test_slices(): assert slices_config('[0:10, 20:30], [30, 40:50], [13::], [::-1]') == [ (slice(0, 10, None), slice(20, 30, None)), (slice(None, 30, None), slice(40, 50, None)), (slice(13, None, None), ), (slice(None, None, -1), ) ]
def _load_reducer_vars(self): """ Reads config file to the reducer script. """ # [paths] - MANDATORY # strings self.input_extension = self.get('paths', 'input_extension') # booleans for name in ['save_masterdark', 'save_masterflat']: self.__setattr__(name, self.getboolean('paths', name)) # [keywords] - MANDATORY (except for units) # strings for name in ['exposure_type', 'expousure_time', 'filter', 'observed_date', 'date_format', 'dark_type_id', 'bias_type_id', 'flat_type_id', 'science_type_id']: self.__setattr__(name, self.get('keywords', name)) # units # If not defined, Unit will be dimensionless. # Images units: 'adu', 'electron', 'photon' and 'dimensionless_unscaled' (if unknown) try: unit = self.get('keywords', 'image_units') if unit not in self._permitted_image_units: raise ConfigError('image_units must be one of these: {0}'.format(self._permitted_image_units)) self.image_units = unit except NoOptionError: self.image_units = units.dimensionless_unscaled # [overscan] - OPTIONAL if 'overscan' in self.sections(): self.subtract_overscan = True self.overscan_regions = slices_config(self.get('overscan', 'overscan_regions')) self.science_regions = slices_config(self.get('overscan', 'science_regions')) self.overscan_axis = self.getint('overscan', 'overscan_axis') # Sanity check if number overscan and science regions is the same. if len(self.science_regions) != len(self.overscan_regions): raise ConfigError('science_regions and overscan_regions must have the same shape!') # TODO: test # Convert the science regions to arrays with index numbers. self.science_trim = np.array([], dtype=int) for science_slice in self.science_regions: self.science_trim = np.append(self.science_trim, np.r_[science_slice]) self.science_trim = np.sort(self.science_trim) if self.science_trim.shape != np.unique(self.science_trim).shape: raise ConfigError('There are two science regions that intersect each other.') # TODO: test else: self.subtract_overscan = False
def test_slices(): assert slices_config('[0:10, 20:30], [30, 40:50], [13::], [::-1]') == [(slice(0, 10, None), slice(20, 30, None)), (slice(None, 30, None), slice(40, 50, None)), (slice(13, None, None),), (slice(None, None, -1),)]