Source code for sherpa.utils.err

#
#  Copyright (C) 2010, 2016, 2017, 2019, 2020
#      Smithsonian Astrophysical Observatory
#
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License along
#  with this program; if not, write to the Free Software Foundation, Inc.,
#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#

"""
Sherpa specific exceptions
"""

__all__ = ('EstErr', 'FitErr', 'SherpaErr', 'ArgumentErr',
           'ArgumentTypeErr', 'IdentifierErr', 'NotImplementedErr',
           'ImportErr', 'ParameterErr', 'DataErr', 'PSFErr', 'InstrumentErr',
           'IOErr', 'ModelErr', 'PlotErr', 'StatErr', 'DS9Err',
           'ConfidenceErr', 'SessionErr')


[docs]class SherpaErr(Exception): "Base class for all Sherpa exceptions" def __init__(self, dict, *args): if (len(args) == 0): errmsg = "Generic Error" else: key = args[0] if key in dict: errmsg = dict[key] % args[1:] else: errmsg = key Exception.__init__(self, errmsg)
[docs]class ArgumentErr(ValueError, SherpaErr): dict = {'nosession': "file '%s' does not contain a saved Sherpa session", 'badmethod': "'%s' is not a valid method", 'badopt': "'%s' is not a valid option for method %s", 'badstat': "'%s' is not a valid statistic", 'notype': "no typename given", 'noname': "no name given", 'badtype': "'%s' is not a valid model type", 'badexpr': 'invalid %s expression: %s', 'badconf': "'%s' is not a valid confidence limit method", 'badplottype': "'%s' is not a valid plot type", 'nopha': 'data set %s does not contain PHA data', 'noimg': 'data set %s does not contain IMAGE data', 'multirsp': 'A response ID is required for each file', 'bad': "Invalid %s: '%s'", 'badinterval': "interval syntax requires a tuple, 'lo:hi'", } def __init__(self, key, *args): SherpaErr.__init__(self, ArgumentErr.dict, key, *args)
[docs]class ArgumentTypeErr(TypeError, SherpaErr): dict = {'badarg': "'%s' must be %s", 'intstr': 'identifiers must be integers or strings', 'plotargs': 'not enough arguments to plot()', } def __init__(self, key, *args): SherpaErr.__init__(self, ArgumentTypeErr.dict, key, *args)
[docs]class IdentifierErr(SherpaErr): dict = {'badid': "identifier '%s' is a reserved word", 'getitem': '%s %s %s', 'nodatasets': "No data sets found", 'nomodels': "model stack is empty", 'badidmodel': "'%s' is a model type, not allowed as a model name", 'badidnative': "'%s' is reserved for the native Python function", 'nomodelcmpt': "model component '%s' does not exist", } def __init__(self, key, *args): SherpaErr.__init__(self, IdentifierErr.dict, key, *args)
class TypeErr(SherpaErr): dict = {'nocomplex': "ds9 cannot handle complex data", } def __init__(self, key, *args): SherpaErr.__init__(self, TypeErr.dict, key, *args) class RuntimeErr(SherpaErr): dict = {'notonpath': "Could not find %s on your PATH", 'nowin': 'Could not open ds9 window %r; timeout', 'cmdfail': "%r failed: %s", 'only2d3d': "ds9 can only display 2d and 3d arrays", 'badarr': "Array info not allowed; rejected keywords: %s", 'badwin': "DS9Win unusable: %s", } def __init__(self, key, *args): SherpaErr.__init__(self, RuntimeErr.dict, key, *args)
[docs]class NotImplementedErr(SherpaErr): dict = {'noinstanceallowed': "cannot create %s instances", 'contourgrids': 'contours on non-uniform grids are not yet supported' } def __init__(self, key, *args): SherpaErr.__init__(self, NotImplementedErr.dict, key, *args)
[docs]class ImportErr(SherpaErr): dict = {'importfailed': "failed to import %s module; %s routines are not available", 'notsupported': '%s support is not enabled in this build of Sherpa' } def __init__(self, key, *args): SherpaErr.__init__(self, ImportErr.dict, key, *args)
[docs]class EstErr(SherpaErr): dict = {'noerr4least2': 'cannot estimate confidence limits with %s', 'nodegfreedom': 'degrees of freedom are zero or lower', 'rstat>max': 'reduced statistic larger than %s', 'nocov': 'Covariance matrix could not be resolved', 'noparameter': '%s is not in a model associated with selected data sets', } def __init__(self, key, *args): SherpaErr.__init__(self, EstErr.dict, key, *args)
[docs]class FitErr(SherpaErr): # # Make the dictionary of the error a class attribute or self.dict? # dict = {'statnotforbackgsub': '%s statistics cannot be used with background subtracted data', 'binhas0': 'zeros found in uncertainties, consider using calculated uncertainties', 'nobins': 'no noticed bins found in data set', 'noclobererr': "'%s' exists, and clobber==False", 'nothawedpar': 'model has no thawed parameters', 'needchi2': '%s method requires a deviates array; use a chi-square statistic', } def __init__(self, key, *args): SherpaErr.__init__(self, FitErr.dict, key, *args)
[docs]class ParameterErr(SherpaErr): "Error in creating or using a model" dict = {'edge': "parameter %s has a %s of %g", 'noncall': 'attempted to create %s from non-callable object of type %s', 'alwaysint': '%s model is defined as integrated', 'filterarray': "filter '%s' is not an array", 'filtermismatch': "filter '%s' does not match the dimensions %s", 'alwaysfrozen': 'parameter %s is always frozen and cannot be thawed', 'frozennolink': 'parameter %s is always frozen and cannot be linked', 'notlink': 'link value must be a parameter or None', 'linkcycle': 'requested parameter link creates a cyclic reference', 'frozen': "parameter '%s' is frozen", } def __init__(self, key, *args): SherpaErr.__init__(self, ParameterErr.dict, key, *args)
[docs]class DataErr(SherpaErr): "Error in creating or using a data set" dict = {'ismask': "'mask' must be True, False, or a mask array", 'notmask': 'mask excludes all data', 'nomask': "data set '%s' has no filter", 'mismatch': 'size mismatch between %s and %s', 'typecheck': 'strings not allowed in %s list', 'wrongdim': "data set '%s' does not contain %d-D data", 'notimage': "data set '%s' does not contain image data", 'nodim': "data set '%s' does not have any defined dimensions", 'zerodatasimulfit': "cannot create a %s instance containing no data sets", 'staterrsimulfit': 'unable to obtain or estimate statistical errors for all data sets', 'shape': "data set '%s' does not specify a shape", 'nogrouping': "data set '%s' does not specify grouping flags", 'noquality': "data set '%s' does not specify quality flags", 'nostaterr': "data set '%s' does not specify statistical errors", 'nosyserr': "data set '%s' does not specify systematic errors", 'groupset': '%s %s grouping flag is already %s', 'subtractset': '%s %s subtract flag is already %s', 'nobkg': "data set '%s' does not have any associated backgrounds", 'noarf': "data set '%s' does not have an associated ARF", 'bad': "unknown %s: '%s'", 'badchoices': "unknown %s: '%s'\nValid options: %s", 'idsnotarray': "%s ids '%s' does not appear to be an array", 'badids': "%s is not a valid %s id in %s", 'noenergybins': "%s does not specify energy bins", 'invalidchannel': 'invalid channel number: %s', 'energytochannel': 'Unable to map energy bin %s to channel number', 'subtractlength': ("subtract can only be used when the input" + " source and background data sets are the" + " same length"), 'incompleteresp': ('response incomplete for dataset %s,' + ' check the instrument model'), 'incompatibleresp': "RMF '%s' is incompatible with PHA dataset '%s'", 'nocoord': "data set '%s' does not contain a %s coordinate system", 'bkgmodel': 'background %r has no associated model', 'plottype': "unknown plot type '%s', choose %s", 'normffake': 'An RMF has not been found or supplied for data set %s', 'noenerg': 'no energy grid found in PHA response', 'norsp': 'No instrument response found for dataset %s', 'nobrsp': 'No instrument response found for dataset %s background %s', 'ogip-error': "The %s '%s' %s" } def __init__(self, key, *args): SherpaErr.__init__(self, DataErr.dict, key, *args)
[docs]class PSFErr(SherpaErr): dict = {'notstr': 'PSF model parameters cannot be strings', 'nofold': 'PSF model has not been folded', 'notset': 'PSF kernel has not been set', 'nopsf': "model '%s' does not have an associated PSF function", 'mismatch': 'array size mismatch between %s and %s', 'badsize': 'PSF kernel size must be <= data size, kernel: %s data: %s', 'ndim': 'PSF model dimension must be <= 2' } def __init__(self, key, *args): SherpaErr.__init__(self, PSFErr.dict, key, *args)
[docs]class InstrumentErr(SherpaErr): dict = {'baddata': "data set '%s' %s and cannot be used with a pileup model", } def __init__(self, key, *args): SherpaErr.__init__(self, InstrumentErr.dict, key, *args)
[docs]class IOErr(SherpaErr): dict = {'openfailed': '%s', 'setcolfailed': 'setting column %s has failed with %s', 'nokeyword': "file '%s' does not have a '%s' keyword", 'filefound': "file '%s' exists and clobber is not set", 'filenotfound': "file '%s' not found", 'badfile': "'%s' is not a filename or %s", 'noarrs': 'No input array(s) found', 'noarrayswrite': 'please supply array(s) to write to file', 'noarrays': 'no arrays found to be loaded', 'arraysnoteq': 'not all arrays are of equal length', 'badargs': "data set '%s' takes at least %s args", 'badarray': "'%s' must be a Numpy array, list, or tuple", 'notascii': "file '%s' does not appear to be ASCII", 'noparamcols': 'No parameter columns found in %s', 'wrongnumcols': "Expected %d columns but found %d", 'reqcol': "Required column '%s' not found in %s", 'badcol': "unable to read required column %s from file", 'badimg': 'unable to read required image %s from file', 'notimage': "data set '%s' does not contain an image", 'notpha': "data set '%s' does not contain a PHA spectrum", 'onecolneedtwo': "Only found 1 column in %s, need at least 2", 'writenoimg': "writing images in ASCII is not supported", 'badext': "file '%s' does not contain a binary table extension", 'notrsp': "file '%s' does not appear to be %s", 'bad': 'unknown %s: %s', 'npconv1d': "numpy_convolution for 1D only", 'start<stop': "start < stop, where start=%s stop=%s", 'step>0': "step > 0, where step=%s", 'nobins': "not enough bins, start=%s stop=%s step=%s", 'dimarr': 'dim must be an array of dimensions', 'dimdatasp2d': 'dimensions for dataspace2d must be > 1', 'boundscheck': 'the energy range is not consistent, %g !< %g', '>axes': 'Found more than %s axes', 'z<=0': 'at least one redshift was <= 0', 'erange': 'the energy range(s) are not 0 <= elo < ehi', 'energoverlap': 'the model is defined over the energy range %f to %f keV which does not fully overlap the %s energy band of %f to %f keV %s', } def __init__(self, key, *args): SherpaErr.__init__(self, IOErr.dict, key, *args)
[docs]class ModelErr(SherpaErr): "Error in creating or using a model" dict = {'numthawed': "expected %d thawed parameters, got %d", 'badinstance': '%s instance cannot be created from another model', 'noncall': 'attempted to create %s from non-callable object of type %s', 'needsint': 'A non-overlapping integrated grid is required for model evaluation,\ne.g. [0.1,0.2],[0.2,0.3]', 'alwaysint': '%s model is defined as integrated', 'filterarray': "filter '%s' is not an array", 'filtermismatch': "Mismatch between %s and %s", 'nobkg': 'background model %s for data set %s has not been set', 'nogrid': 'There is no grid on which to evaluate the model', 'needspoint': 'A non-integrated grid is required for model evaluation', } def __init__(self, key, *args): SherpaErr.__init__(self, ModelErr.dict, key, *args)
[docs]class PlotErr(SherpaErr): "Error in creating or using a plotting class" dict = {'nodataormodel': 'data or model plot is missing', 'ordercolors': "orders list length '%s' does not match colors list length '%s'", 'notorder': "'%i' is not a valid order", 'orderarrfail': "mismatch between model orders and response ids", 'plotfac': "%s plot not defined for PHA plotting factor '%i'", 'wrongtype': "Plot type '%s' not found in %s", } def __init__(self, key, *args): SherpaErr.__init__(self, PlotErr.dict, key, *args)
[docs]class StatErr(SherpaErr): dict = {'nostat': "User statistic '%s' has no %s function", 'badstat': '%s not applicable using current statistic: %s', 'chi2noerr': 'If you select chi2 as the statistic, all datasets must provide a staterror column', 'usecstat': 'No background data has been supplied. Use cstat', 'mismatch': 'size mismatch between %s (%d) and %s (%d)', } def __init__(self, key, *args): SherpaErr.__init__(self, StatErr.dict, key, *args)
[docs]class DS9Err(SherpaErr): dict = {'open': "Imager not open", 'delframe': "Could not delete frames", 'retreg': "Could not return region in CIAO format", 'newframe': "Could not create new frame", 'settile': "Could not set tile option", 'noimage': "Could not display image", 'setwcs': "Could not replace WCS", 'setreg': "Could not set CIAO region format", 'badreg': "Could not use %s as a region or region file", } def __init__(self, key, *args): SherpaErr.__init__(self, DS9Err.dict, key, *args)
[docs]class ConfidenceErr(SherpaErr): dict = {'badarg': "%s must be %s", 'badlimits': 'Bad parameter limits', 'needlist': 'Please provide a list of %s', 'frozen': 'Frozen parameter %s cannot be used for %s', 'thawed': 'Thawed parameter %s not found in %s', 'badargconf': '%s is inappropriate for confidence limit estimation', } def __init__(self, key, *args): SherpaErr.__init__(self, ConfidenceErr.dict, key, *args)
[docs]class SessionErr(SherpaErr): dict = {'nofit': 'no %s has been performed', 'noaction': "%s has not been performed", } def __init__(self, key, *args): SherpaErr.__init__(self, SessionErr.dict, key, *args)