def newCurve(self, initargs): """Create new curve with arguments specified in the dictionary initargs.""" curvetype = initargs['type'].upper() if curvetype not in self.curve_list: raise PyDSTool_TypeError(str(curvetype) + ' not an allowable curve type') # Check name cname = initargs['name'] if 'force' in initargs: if initargs['force'] and cname in self.curves: del self.curves[cname] if cname in self.curves: raise ValueError('Ambiguous name field: ' + cname \ + ' already exists (use force=True to override)') # Check parameters if (curvetype != 'UD-C' and self.model.pars == {}) or \ (curvetype == 'UD-C' and 'userpars' not in initargs): raise ValueError('No parameters defined for this system!') # Process initial point initargs = initargs.copy() # ensures no side-effects outside if 'initpoint' not in initargs or initargs['initpoint'] is None: # Default to initial conditions for model if self.model.icdict == {}: raise ValueError('No initial point defined for this system!') elif 'uservars' in initargs: if remain(initargs['uservars'], self.model.icdict.keys()) == []: # uservars just used to select a subset of system's regular state vars initargs['initpoint'] = filteredDict(self.model.icdict, initargs['uservars']) else: raise ValueError('No initial point defined for this system!') else: initargs['initpoint'] = self.model.icdict.copy() #for p in initargs['freepars']: # initargs['initpoint'][p] = self.model.pars[p] else: if isinstance(initargs['initpoint'], dict): initargs['initpoint'] = initargs['initpoint'].copy() #for p in initargs['freepars']: # if p not in initargs['initpoint'].keys(): # initargs['initpoint'][p] = self.model.pars[p] elif isinstance(initargs['initpoint'], str): curvename, pointname = initargs['initpoint'].split(':') pointtype = pointname.strip('0123456789') if curvename not in self.curves: raise KeyError('No curve of name ' + curvename + ' exists.') else: point = self.curves[curvename].getSpecialPoint(pointtype, pointname) if point is None: raise KeyError('No point of name ' + pointname + ' exists.') else: initargs['initpoint'] = point # Separate from if-else above since 'str' clause returns type Point if isinstance(initargs['initpoint'], Point): # Check to see if point contains a cycle. If it does, assume # we are starting at a cycle and save it in initcycle for v in initargs['initpoint'].labels.values(): if 'cycle' in v: initargs['initcycle'] = v # Dictionary w/ cycle, name, and tangent information # Save initial point information initPoint = {} if 'curvename' in locals() and curvename in self.curves: initPoint = self.curves[curvename].parsdict.copy() initPoint.update(initargs['initpoint'].copy().todict()) initargs['initpoint'] = initPoint # initargs['initpoint'] = initargs['initpoint'].copy().todict() #for p in initargs['freepars']: # if p not in initargs['initpoint'].keys(): # initargs['initpoint'][p] = self.model.pars[p] # Process cycle if 'initcycle' in initargs: if isinstance(initargs['initcycle'], ndarray): c0 = {} c0['data'] = args(V = {'udotps': None, 'rldot': None}) c0['cycle'] = Pointset({'coordnames': self.gensys.funcspec.vars, 'coordarray': initargs['initcycle'][1:,:].copy(), 'indepvarname': 't', 'indepvararray': initargs['initcycle'][0,:].copy() }) initargs['initcycle'] = c0 elif isinstance(initargs['initcycle'], Pointset): c0 = {} c0['data'] = args(V = {'udotps': None, 'rldot': None}) c0['cycle'] = initargs['initcycle'] initargs['initcycle'] = c0 # Load auto module if required automod = None if curvetype in auto_list: if self._autoMod is None: self.loadAutoMod() automod = self._autoMod self.curves[cname] = self.curve_list[curvetype](self.model, self.gensys, automod, self.plot, initargs)
def newCurve(self, initargs): """Create new curve with arguments specified in the dictionary initargs.""" curvetype = initargs['type'].upper() if curvetype not in self.curve_list: raise PyDSTool_TypeError( str(curvetype) + ' not an allowable curve type') # Check name cname = initargs['name'] if 'force' in initargs: if initargs['force'] and cname in self.curves: del self.curves[cname] if cname in self.curves: raise ValueError('Ambiguous name field: ' + cname \ + ' already exists (use force=True to override)') # Check parameters if (curvetype != 'UD-C' and self.model.pars == {}) or \ (curvetype == 'UD-C' and 'userpars' not in initargs): raise ValueError('No parameters defined for this system!') # Process initial point initargs = initargs.copy() # ensures no side-effects outside if 'initpoint' not in initargs or initargs['initpoint'] is None: # Default to initial conditions for model if self.model.icdict == {}: raise ValueError('No initial point defined for this system!') elif 'uservars' in initargs: if remain(initargs['uservars'], self.model.icdict.keys()) == []: # uservars just used to select a subset of system's regular state vars initargs['initpoint'] = filteredDict( self.model.icdict, initargs['uservars']) else: raise ValueError( 'No initial point defined for this system!') else: initargs['initpoint'] = self.model.icdict.copy() #for p in initargs['freepars']: # initargs['initpoint'][p] = self.model.pars[p] else: if isinstance(initargs['initpoint'], dict): initargs['initpoint'] = initargs['initpoint'].copy() #for p in initargs['freepars']: # if p not in initargs['initpoint'].keys(): # initargs['initpoint'][p] = self.model.pars[p] elif isinstance(initargs['initpoint'], str): curvename, pointname = initargs['initpoint'].split(':') pointtype = pointname.strip('0123456789') if curvename not in self.curves: raise KeyError('No curve of name ' + curvename + ' exists.') else: point = self.curves[curvename].getSpecialPoint( pointtype, pointname) if point is None: raise KeyError('No point of name ' + pointname + ' exists.') else: initargs['initpoint'] = point # Separate from if-else above since 'str' clause returns type Point if isinstance(initargs['initpoint'], Point): # Check to see if point contains a cycle. If it does, assume # we are starting at a cycle and save it in initcycle for v in initargs['initpoint'].labels.values(): if 'cycle' in v: initargs[ 'initcycle'] = v # Dictionary w/ cycle, name, and tangent information # Save initial point information initPoint = {} if 'curvename' in locals() and curvename in self.curves: initPoint = self.curves[curvename].parsdict.copy() initPoint.update(initargs['initpoint'].copy().todict()) initargs['initpoint'] = initPoint # initargs['initpoint'] = initargs['initpoint'].copy().todict() #for p in initargs['freepars']: # if p not in initargs['initpoint'].keys(): # initargs['initpoint'][p] = self.model.pars[p] # Process cycle if 'initcycle' in initargs: if isinstance(initargs['initcycle'], ndarray): c0 = {} c0['data'] = args(V={'udotps': None, 'rldot': None}) c0['cycle'] = Pointset({ 'coordnames': self.gensys.funcspec.vars, 'coordarray': initargs['initcycle'][1:, :].copy(), 'indepvarname': 't', 'indepvararray': initargs['initcycle'][0, :].copy() }) initargs['initcycle'] = c0 elif isinstance(initargs['initcycle'], Pointset): c0 = {} c0['data'] = args(V={'udotps': None, 'rldot': None}) c0['cycle'] = initargs['initcycle'] initargs['initcycle'] = c0 # Load auto module if required automod = None if curvetype in auto_list: if self._autoMod is None: self.loadAutoMod() automod = self._autoMod self.curves[cname] = self.curve_list[curvetype](self.model, self.gensys, automod, self.plot, initargs)
def test_filteredDict_works_as_expected_for_Point(): p = Point({'x': 1, 'y': 2, 'z': 3}) assert {} == filteredDict(p, ['w']) assert {'x': 1, 'y': 2} == filteredDict(p, ['x', 'y']) assert {'z': 3} == filteredDict(p, ['x', 'y'], neg=True)
def test_filteredDict_works_as_expected_when_key_is_absent(): d = {'x': 1, 'y': 2, 'z': 3} assert {} == filteredDict(d, ['w']) assert d == filteredDict(d, ['w'], neg=True)
def test_filteredDict_negative_works_as_expected(): d = {'x': 1, 'y': 2, 'z': 3} assert {} == filteredDict(d, d.keys(), neg=True) assert {'y': 2, 'z': 3} == filteredDict(d, ['x'], neg=True) assert {'z': 3} == filteredDict(d, ['x', 'y'], neg=True)
def test_filteredDict_works_as_expected(): d = {'x': 1, 'y': 2, 'z': 3} assert d == filteredDict(d, d.keys()) assert {'x': 1} == filteredDict(d, ['x']) assert {'x': 1, 'y': 2} == filteredDict(d, ['x', 'y'])