def set(self, **kw):
     if 'abseps' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, abseps=kw['abseps'])
         for x in self._xdatadict:
             self.variables[x] = Variable(interp(copy(self.tdata),
                                       self.funcspec[x].toarray()), 't',
                               Interval(x, self.xtype[x], self.xdomain[x],
                                        self._abseps), x)
     if 'checklevel' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, checklevel=kw['checklevel'])
     if 'globalt0' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, globalt0=kw['globalt0'])
Exemplo n.º 2
0
 def set(self, **kw):
     """Set ODE system parameters"""
     if remain(kw.keys(), self._validKeys) != []:
         raise KeyError("Invalid keys in argument")
     if 'globalt0' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, globalt0=kw['globalt0'])
         # set this True so that can adjust the input time arrays
         # to new globalt0
         self._extInputsChanged = True
     if 'checklevel' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, checklevel=kw['checklevel'])
     if 'abseps' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, abseps=kw['abseps'])
     # optional keys for this call are ['pars', 'tdomain', 'ics',
     #   'algparams', 'tdata', 'xdomain', 'pdomain', 'inputs']
     if 'ics' in kw:
         for k_temp, v in kw['ics'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.funcspec.vars+self.funcspec.auxvars:
                 self._xdatadict[k] = ensurefloat(v)
             else:
                 raise ValueError('Illegal variable name %s'%k)
         self.initialconditions.update(self._xdatadict)
     tchange = False
     if 'tdata' in kw:
         self.tdata = kw['tdata']
         tchange = True
     if 'tdomain' in kw:
         self.tdomain = kw['tdomain']
         self.indepvariable.indepdomain.set(self.tdomain)
         tchange = True
     if tchange:
         if self.tdomain[0] > self.tdata[0]:
             if self.indepvariable.indepdomain.contains(self.tdata[0]) == uncertain:
                 self.diagnostics.warnings.append((W_UNCERTVAL,
                                                   (self.tdata[0],self.tdomain)))
             else:
                 print 'tdata cannot be specified below smallest '\
                       'value in tdomain\n (possibly due to uncertain bounding).'\
                       ' It has been automatically adjusted from\n ', \
                       self.tdata[0], 'to', self.tdomain[0], '(difference of', \
                       self.tdomain[0]-self.tdata[0], ')'
                 if self._modeltag:
                     print 'Try reducing step size in model.'
             self.tdata[0] = self.tdomain[0]
         if self.tdomain[1] < self.tdata[1]:
             if self.indepvariable.indepdomain.contains(self.tdata[1]) == uncertain:
                 self.diagnostics.warnings.append((W_UNCERTVAL,
                                                   (self.tdata[1],self.tdomain)))
             else:
                 print 'tdata cannot be specified above largest '\
                       'value in tdomain\n (possibly due to uncertain bounding).'\
                       ' It has been automatically adjusted from\n ', \
                       self.tdomain[1], 'to', \
                       self.tdomain[1], '(difference of', \
                       self.tdata[1]-self.tdomain[1], ')'
                 if self._modeltag:
                     print 'Try reducing step size in model.'
             self.tdata[1] = self.tdomain[1]
         self.indepvariable.depdomain.set(self.tdata)
     if 'xdomain' in kw:
         for k_temp, v in kw['xdomain'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.funcspec.vars+self.funcspec.auxvars:
                 if isinstance(v, _seq_types):
                     assert len(v) == 2, \
                            "Invalid size of domain specification for "+k
                     if v[0] >= v[1]:
                         raise PyDSTool_ValueError('xdomain values must be'
                                                   'in order of increasing '
                                                   'size')
                     else:
                         self.xdomain[k] = copy(v)
                 elif isinstance(v, _num_types):
                     self.xdomain[k] = [v, v]
                 else:
                     raise PyDSTool_TypeError('Invalid type for xdomain spec'
                                              ' '+k)
             else:
                 raise ValueError('Illegal variable name')
             try:
                 self.variables[k].depdomain.set(v)
             except TypeError:
                 raise TypeError('xdomain must be a dictionary of variable'
                                   ' names -> valid interval 2-tuples or '
                                   'singletons')
             try:
                 evs = self.eventstruct.events.values()
             except AttributeError:
                 evs = []
             for ev in evs:
                 ev.xdomain[k] = self.xdomain[k]
     if 'pdomain' in kw:
         for k_temp, v in kw['pdomain'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.funcspec.pars:
                 if isinstance(v, _seq_types):
                     assert len(v) == 2, \
                            "Invalid size of domain specification for "+k
                     if v[0] >= v[1]:
                         raise PyDSTool_ValueError('pdomain values must be'
                                                   'in order of increasing '
                                                   'size')
                     else:
                         self.pdomain[k] = copy(v)
                 elif isinstance(v, _num_types):
                     self.pdomain[k] = [v, v]
                 else:
                     raise PyDSTool_TypeError('Invalid type for pdomain spec'
                                              ' '+k)
             else:
                 raise ValueError('Illegal parameter name')
             try:
                 self.parameterDomains[k].depdomain.set(v)
             except TypeError:
                 raise TypeError('xdomain must be a dictionary of parameter'
                                   ' names -> valid interval 2-tuples or '
                                   'singletons')
             try:
                 evs = self.eventstruct.events.values()
             except AttributeError:
                 evs = []
             for ev in evs:
                 ev.pdomain[k] = self.pdomain[k]
     if 'pars' in kw:
         for k_temp, v in kw['pars'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.pars:
                 cval = self.parameterDomains[k].contains(v)
                 if self.checklevel < 3:
                     if cval is not notcontained:
                         self.pars[k] = ensurefloat(v)
                         if cval is uncertain and self.checklevel == 2:
                             print 'Warning: Parameter %s: value at bound'%str(k)
                     else:
                         raise PyDSTool_ValueError('Parameter %s: value out of bounds'%str(k))
                 else:
                     if cval is contained:
                         self.pars[k] = ensurefloat(v)
                     elif cval is uncertain:
                         raise PyDSTool_UncertainValueError('Parameter %s: value at bound'%str(k))
                     else:
                         raise PyDSTool_ValueError('Parameter %s: value out of bounds'%str(k))
             else:
                 raise PyDSTool_ValueError('Illegal parameter name '+str(k))
     if 'algparams' in kw:
         for k, v in kw['algparams'].iteritems():
             self.algparams[k] = v
             if k in ('eventActive', 'eventTol', 'eventDelay', 'eventDir', 'eventInt', 'eventTerm',
                      'maxbisect'):
                 raise ValueError("Use appropriate setX method in Generator.eventstruct")
     if 'inputs' in kw:
         assert self.inputs, ('Cannot provide inputs after '
                             'initialization without them')
         inputs = copy(kw['inputs'])
         _inputs = {}
         if isinstance(inputs, Trajectory):
             # extract the variables
             _inputs = self._FScompatibleNames(inputs.variables)
         elif isinstance(inputs, Variable):
             _inputs = {self._FScompatibleNames(inputs.name): inputs}
         elif isinstance(inputs, Pointset):
             # turn into Variables
             for n in inputs.coordnames:
                 x_array = inputs[n]
                 nFS = self._FScompatibleNames(n)
                 _input[nFS] = Variable(interp1d(inputs.indepvararray,
                                                 x_array), 't',
                                        Interval(nFS, float, extent(x_array),
                                                 abseps=self._abseps),
                                        name=n)
         elif isinstance(inputs, dict):
             _inputs = self._FScompatibleNames(inputs)
             # ensure values are Variables
             for v in _inputs.values():
                 if not isinstance(v, Variable):
                     raise TypeError("Invalid specification of inputs")
         else:
             raise TypeError("Invalid specification of inputs")
         for v in _inputs.values():
             if not iscontinuous(v):
                 raise ValueError("External inputs for ODE system must be "
                                  "continously defined")
         if _inputs:
             for i in _inputs:
                 assert i in self.inputs, 'Incorrect input name provided'
                 self.inputs[i] = _inputs[i]
             # re-calc inputs ixmaps
             self._generate_ixmaps('inputs')
         self._extInputsChanged = True
     if 'inputs_t0' in kw:
         assert self.inputs, ('Cannot provide inputs after '
                             'initialization without them')
         inputs_t0 = self._FScompatibleNames(kw['inputs_t0'])
         for iname, t0 in inputs_t0.items():
             self.inputs[iname]._internal_t_offset = t0
         self._extInputsChanged = True
Exemplo n.º 3
0
 def set(self, **kw):
     """Set ImplicitFnGen parameters"""
     if remain(kw.keys(), self._validKeys) != []:
         raise KeyError("Invalid keys in argument")
     if 'globalt0' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, globalt0=kw['globalt0'])
     if 'checklevel' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, checklevel=kw['checklevel'])
     if 'abseps' in kw:
         # pass up to generic treatment for this
         ctsGen.set(self, abseps=kw['abseps'])
     # optional keys for this call are ['pars', 'tdomain', 'xdomain', 'pdomain']
     if 'xdomain' in kw:
         for k_temp, v in kw['xdomain'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.funcspec.vars+self.funcspec.auxvars:
                 if isinstance(v, _seq_types):
                     assert len(v) == 2, \
                            "Invalid size of domain specification for "+k
                     if v[0] >= v[1]:
                         raise PyDSTool_ValueError('xdomain values must be'
                                                   'in order of increasing '
                                                   'size')
                 elif isinstance(v, _num_types):
                     pass
                 else:
                     raise PyDSTool_TypeError('Invalid type for xdomain spec'
                                              ' '+k)
                 self.xdomain[k] = v
             else:
                 raise ValueError('Illegal variable name')
             try:
                 self.variables[k].depdomain.set(v)
             except TypeError:
                 raise TypeError('xdomain must be a dictionary of variable'
                                   ' names -> valid interval 2-tuples or '
                                   'singletons')
     if 'tdata' in kw:
         self.tdata = kw['tdata']
     if 'tdomain' in kw:
         self.tdomain = kw['tdomain']
         self.indepvariable.indepdomain.set(self.tdomain)
     if self.tdomain[0] > self.tdata[0]:
         if self.indepvariable.indepdomain.contains(self.tdata[0]) == uncertain:
             self.diagnostics.warnings.append((W_UNCERTVAL,
                                               (self.tdata[0],self.tdomain)))
         else:
             print 'tdata cannot be specified below smallest '\
                   'value in tdomain\n (possibly due to uncertain bounding).'\
                   ' It has been automatically adjusted from\n ', self.tdata[0], \
                   'to', self.tdomain[0], '(difference of', \
                   self.tdomain[0]-self.tdata[0], ')'
         self.tdata[0] = self.tdomain[0]
     if self.tdomain[1] < self.tdata[1]:
         if self.indepvariable.indepdomain.contains(self.tdata[1]) == uncertain:
             self.diagnostics.warnings.append((W_UNCERTVAL,
                                               (self.tdata[1],self.tdomain)))
         else:
             print 'tdata cannot be specified above largest '\
                   'value in tdomain\n (possibly due to uncertain bounding).'\
                   ' It has been automatically adjusted from\n ', \
                   self.tdomain[1], 'to', \
                   self.tdomain[1], '(difference of', \
                   self.tdata[1]-self.tdomain[1], ')'
         self.tdata[1] = self.tdomain[1]
     self.indepvariable.depdomain.set(self.tdata)
     if 'pdomain' in kw:
         for k_temp, v in kw['pdomain'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.funcspec.pars:
                 if isinstance(v, _seq_types):
                     assert len(v) == 2, \
                            "Invalid size of domain specification for "+k
                     if v[0] >= v[1]:
                         raise PyDSTool_ValueError('pdomain values must be'
                                                   'in order of increasing '
                                                   'size')
                     else:
                         self.pdomain[k] = copy(v)
                 elif isinstance(v, _num_types):
                     self.pdomain[k] = [v, v]
                 else:
                     raise PyDSTool_TypeError('Invalid type for pdomain spec'
                                              ' '+k)
             else:
                 raise ValueError('Illegal parameter name')
             try:
                 self.parameterDomains[k].depdomain.set(v)
             except TypeError:
                 raise TypeError('pdomain must be a dictionary of parameter'
                                   ' names -> valid interval 2-tuples or '
                                   'singletons')
     if 'ics' in kw:
         for k_temp, v in kw['ics'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.funcspec.vars+self.funcspec.auxvars:
                 self._xdatadict[k] = ensurefloat(v)
             else:
                 raise ValueError('Illegal variable name')
         self.initialconditions.update(self._xdatadict)
     if 'pars' in kw:
         if not self.pars:
             raise ValueError('No pars were declared for this object'
                                ' at initialization.')
         for k_temp, v in kw['pars'].iteritems():
             k = self._FScompatibleNames(k_temp)
             if k in self.pars:
                 cval = self.parameterDomains[k].contains(v)
                 if self.checklevel < 3:
                     if cval is not notcontained:
                         self.pars[k] = ensurefloat(v)
                         if cval is uncertain and self.checklevel == 2:
                             print 'Warning: Parameter value at bound'
                     else:
                         raise PyDSTool_ValueError('Parameter value out of bounds')
                 else:
                     if cval is contained:
                         self.pars[k] = ensurefloat(v)
                     elif cval is uncertain:
                         raise PyDSTool_UncertainValueError('Parameter value at bound')
                     else:
                         raise PyDSTool_ValueError('Parameter value out of bounds')
             else:
                 raise PyDSTool_AttributeError('Illegal parameter name')
     if 'algparams' in kw:
         for k, v in kw['algparams'].iteritems():
             self.algparams[k] = v
     if 'solvemethod' in self.algparams:
         if self.algparams['solvemethod'] not in _implicitSolveMethods:
             raise PyDSTool_ValueError('Invalid implicit solver type')
Exemplo n.º 4
0
    def set(self, **kw):
        """Set ODE system parameters"""

        validKeys = ['globalt0', 'xdomain', 'tdata', 'tdomain', 'checklevel',
                     'ics', 'pars', 'algparams', 'inputs', 'pdomain']
        assert remain(kw.keys(), validKeys) == [], "Invalid keys in argument"
        if 'globalt0' in kw:
            # pass up to generic treatment for this
            ctsGen.set(self, globalt0=kw['globalt0'])
            # set this True so that can adjust the input time arrays
            # to new globalt0
            self._extInputsChanged = True
        if 'checklevel' in kw:
            # pass up to generic treatment for this
            ctsGen.set(self, checklevel=kw['checklevel'])
        # optional keys for this call are ['pars', 'tdomain', 'ics',
        #   'algparams', 'tdata', 'xdomain', 'pdomain', 'inputs']
        if 'ics' in kw:
            for k_temp, v in kw['ics'].iteritems():
                k = k_temp.replace(NAMESEP, "_")
                if k in self.funcspec.vars+self.funcspec.auxvars:
                    self._xdatadict[k] = v
                else:
                    raise ValueError, 'Illegal variable name %s'%k
            self.initialconditions.update(self._xdatadict)
        if 'tdata' in kw:
            self._tdata = kw['tdata']
        if 'tdomain' in kw:
            self._tdomain = kw['tdomain']
            self.indepvariable.indepdomain.set(self._tdomain)
        if self._tdomain[0] > self._tdata[0]:
            print 'tdata cannot be specified below smallest '\
                  'value in tdomain\n (possibly due to uncertain bounding).'\
                  ' It has been automatically adjusted from\n ', \
                  self._tdata[0], 'to', self._tdomain[0], '(difference of', \
                  self._tdomain[0]-self._tdata[0], ')'
            if self._modeltag:
                  print 'Try reducing step size in model.'
            self._tdata[0] = self._tdomain[0]
        if self._tdomain[1] < self._tdata[1]:
            print 'tdata cannot be specified above largest '\
                  'value in tdomain\n (possibly due to uncertain bounding).'\
                  ' It has been automatically adjusted from\n ', \
                  self._tdomain[1], 'to', \
                  self._tdomain[1], '(difference of', \
                  self._tdata[1]-self._tdomain[1], ')'
            if self._modeltag:
                  print 'Try reducing step size in model.'
            self._tdata[1] = self._tdomain[1]
        self.indepvariable.depdomain.set(self._tdata)
        if 'xdomain' in kw:
            for k_temp, v in kw['xdomain'].iteritems():
                k = k_temp.replace(NAMESEP, "_")   # use internal names
                if k in self.funcspec.vars+self.funcspec.auxvars:
                    if type(v) in [list, Array, NArray]:
                        assert len(v) == 2, \
                               "Invalid size of domain specification for "+k
                        if v[0] >= v[1]:
                            raise PyDSTool_ValueError('xdomain values must be'
                                                      'in order of increasing '
                                                      'size')
                        else:
                            self._xdomain[k] = copy(v)
                    elif type(v) in [float, int]:
                        self._xdomain[k] = [v, v]
                    else:
                        raise PyDSTool_TypeError('Invalid type for xdomain spec'
                                                 ' '+k)
                else:
                    raise ValueError, 'Illegal variable name'
                try:
                    self.variables[k].depdomain.set(v)
                except TypeError:
                    raise TypeError, ('xdomain must be a dictionary of variable'
                                      ' names -> valid interval 2-tuples or '
                                      'singletons')
                for ev in self.eventstruct.events.values():
                    ev._xdomain[k] = self._xdomain[k]
        if 'pdomain' in kw:
            for k_temp, v in kw['pdomain'].iteritems():
                k = k_temp.replace(NAMESEP, "_")   # use internal names
                if k in self.funcspec.pars:
                    if type(v) in [list, Array, NArray]:
                        assert len(v) == 2, \
                               "Invalid size of domain specification for "+k
                        if v[0] >= v[1]:
                            raise PyDSTool_ValueError('pdomain values must be'
                                                      'in order of increasing '
                                                      'size')
                        else:
                            self._pdomain[k] = copy(v)
                    elif type(v) in [float, int]:
                        self._pdomain[k] = [v, v]
                    else:
                        raise PyDSTool_TypeError('Invalid type for pdomain spec'
                                                 ' '+k)
                else:
                    raise ValueError, 'Illegal parameter name'
                try:
                    self.parameterDomains[k].depdomain.set(v)
                except TypeError:
                    raise TypeError, ('xdomain must be a dictionary of parameter'
                                      ' names -> valid interval 2-tuples or '
                                      'singletons')
                for ev in self.eventstruct.events.values():
                    ev._pdomain[k] = self._pdomain[k]
        if 'pars' in kw:
            assert self.numpars > 0, ('No pars were declared for this '
                                      'model')
            for k_temp, v in kw['pars'].iteritems():
                k = k_temp.replace(NAMESEP, "_")
                if k in self.pars:
                    cval = self.parameterDomains[k].contains(v)
                    if self.checklevel < 3:
                        if cval is not notcontained:
                            self.pars[k] = v
                            if cval is uncertain and self.checklevel == 2:
                                print 'Warning: Parameter value at bound'
                        else:
                            raise PyDSTool_ValueError, 'Parameter value out of bounds'
                    else:
                        if cval is contained:
                            self.pars[k] = v
                        elif cval is uncertain:
                            raise PyDSTool_UncertainValueError, 'Parameter value at bound'
                        else:
                            raise PyDSTool_ValueError, 'Parameter value out of bounds'
                else:
                    raise PyDSTool_ValueError, 'Illegal parameter name'
        if 'algparams' in kw:
            for k, v in kw['algparams'].iteritems():
                self._algparams[k] = v
        if 'inputs' in kw:
            assert self.inputs, ('Cannot provide inputs after '
                                             'initialization without them')
            inputs = copy(kw['inputs'])
            _inputs = {}
            if isinstance(inputs, Trajectory):
                # extract the variables
                _inputs = inputs.variables
            elif isinstance(inputs, Variable):
                _inputs = {inputs.name: inputs}
            elif isinstance(inputs, Pointset):
                # turn into Variables
                _inputs = dict(zip(inputs.coordnames,
                            [Variable(inputs[n],name=n) for n in inputs.coordnames]))
            elif isinstance(inputs, dict):
                _inputs = inputs
                # ensure values are Variables or Pointsets
                for k, v in _inputs.iteritems():
                    if not isinstance(v, Variable):
                        try:
                            _inputs[k]=Variable(v)
                        except:
                            raise TypeError, "Invalid specification of inputs"
            else:
                raise TypeError, "Invalid specification of inputs"
            for v in _inputs.values():
                if not iscontinuous(v):
                    raise ValueError, "External inputs for ODE system must be continously defined"
            if _inputs:
                for i in _inputs:
                    assert i in self.inputs, 'Incorrect input name provided'
                    self.inputs[i] = _inputs[i]
                # re-calc inputs ixmaps
                self._generate_ixmaps('inputs')
            self._extInputsChanged = True                    
Exemplo n.º 5
0
    def set(self, **kw):
        """Set ImplicitFnGen parameters"""

        validKeys = [
            'globalt0', 'xdomain', 'tdata', 'tdomain', 'checklevel', 'ics',
            'pars', 'algparams', 'pdomain'
        ]
        assert remain(kw.keys(), validKeys) == [], "Invalid keys in argument"
        if 'globalt0' in kw:
            # pass up to generic treatment for this
            ctsGen.set(self, globalt0=kw['globalt0'])
        if 'checklevel' in kw:
            # pass up to generic treatment for this
            ctsGen.set(self, checklevel=kw['checklevel'])
        # optional keys for this call are ['pars', 'tdomain', 'xdomain', 'pdomain']
        if 'xdomain' in kw:
            for k_temp, v in kw['xdomain'].iteritems():
                k = k_temp.replace(NAMESEP, "_")
                if k in self.funcspec.vars + self.funcspec.auxvars:
                    if type(v) in [list, Array, NArray]:
                        assert len(v) == 2, \
                               "Invalid size of domain specification for "+k
                        if v[0] >= v[1]:
                            raise PyDSTool_ValueError('xdomain values must be'
                                                      'in order of increasing '
                                                      'size')
                    elif type(v) in [float, int]:
                        pass
                    else:
                        raise PyDSTool_TypeError(
                            'Invalid type for xdomain spec'
                            ' ' + k)
                    self._xdomain[k] = v
                else:
                    raise ValueError, 'Illegal variable name'
                try:
                    self.variables[k].depdomain.set(v)
                except TypeError:
                    raise TypeError, (
                        'xdomain must be a dictionary of variable'
                        ' names -> valid interval 2-tuples or '
                        'singletons')
        if 'tdata' in kw:
            self._tdata = kw['tdata']
        if 'tdomain' in kw:
            self._tdomain = kw['tdomain']
            self.indepvariable.indepdomain.set(self._tdomain)
        if self._tdomain[0] > self._tdata[0]:
            print 'tdata cannot be specified below smallest '\
                  'value in tdomain\n (possibly due to uncertain bounding).'\
                  ' It has been automatically adjusted from\n ', self._tdata[0], \
                  'to', self._tdomain[0], '(difference of', \
                  self._tdomain[0]-self._tdata[0], ')'
            self._tdata[0] = self._tdomain[0]
        if self._tdomain[1] < self._tdata[1]:
            print 'tdata cannot be specified above largest '\
                  'value in tdomain\n (possibly due to uncertain bounding).'\
                  ' It has been automatically adjusted from\n ', \
                  self._tdomain[1], 'to', \
                  self._tdomain[1], '(difference of', \
                  self._tdata[1]-self._tdomain[1], ')'
            self._tdata[1] = self._tdomain[1]
        self.indepvariable.depdomain.set(self._tdata)
        if 'pdomain' in kw:
            for k_temp, v in kw['pdomain'].iteritems():
                k = k_temp.replace(NAMESEP, "_")
                if k in self.funcspec.pars:
                    if type(v) in [list, Array, NArray]:
                        assert len(v) == 2, \
                               "Invalid size of domain specification for "+k
                        if v[0] >= v[1]:
                            raise PyDSTool_ValueError('pdomain values must be'
                                                      'in order of increasing '
                                                      'size')
                        else:
                            self._pdomain[k] = copy(v)
                    elif type(v) in [float, int]:
                        self._pdomain[k] = [v, v]
                    else:
                        raise PyDSTool_TypeError(
                            'Invalid type for pdomain spec'
                            ' ' + k)
                else:
                    raise ValueError, 'Illegal parameter name'
                try:
                    self.parameterDomains[k].depdomain.set(v)
                except TypeError:
                    raise TypeError, (
                        'pdomain must be a dictionary of parameter'
                        ' names -> valid interval 2-tuples or '
                        'singletons')
        if 'ics' in kw:
            for k_temp, v in kw['ics'].iteritems():
                k = k_temp.replace(NAMESEP, "_")
                if k in self.funcspec.vars + self.funcspec.auxvars:
                    self._xdatadict[k] = v
                else:
                    raise ValueError, 'Illegal variable name'
            self.initialconditions.update(self._xdatadict)
        if 'pars' in kw:
            if not self.pars:
                raise ValueError, ('No pars were declared for this object'
                                   ' at initialization.')
            for k_temp, v in kw['pars'].iteritems():
                k = k_temp.replace(NAMESEP, "_")
                if k in self.pars:
                    cval = self.parameterDomains[k].contains(v)
                    if self.checklevel < 3:
                        if cval is not notcontained:
                            self.pars[k] = v
                            if cval is uncertain and self.checklevel == 2:
                                print 'Warning: Parameter value at bound'
                        else:
                            raise PyDSTool_ValueError, 'Parameter value out of bounds'
                    else:
                        if cval is contained:
                            self.pars[k] = v
                        elif cval is uncertain:
                            raise PyDSTool_UncertainValueError, 'Parameter value at bound'
                        else:
                            raise PyDSTool_ValueError, 'Parameter value out of bounds'
                else:
                    raise PyDSTool_AttributeError, 'Illegal parameter name'
        if 'algparams' in kw:
            for k, v in kw['algparams'].iteritems():
                self._algparams[k] = v
        if 'solvemethod' in self._algparams:
            if self._algparams['solvemethod'] not in _implicitSolveMethods:
                raise PyDSTool_ValueError, 'Invalid implicit solver type'