- Timestamp:
- 12/17/10 08:07:44 (17 months ago)
- Location:
- branches/reorganization
- Files:
-
- 1 added
- 6 modified
-
src/common.py (modified) (3 diffs)
-
src/nest/__init__.py (modified) (4 diffs)
-
src/standardmodels/__init__.py (modified) (2 diffs)
-
test/system/test_nest.py (modified) (3 diffs)
-
test/unittests/test_basepopulation.py (modified) (3 diffs)
-
test/unittests/test_nest.py (added)
-
test/unittests/test_standardmodels.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/reorganization/src/common.py
r877 r878 506 506 else: 507 507 raise errors.InvalidParameterValueError 508 for name, val in param_dict.items(): 509 if name not in self.celltype.get_parameter_names(): 510 raise errors.NonExistentParameterError(name, self.celltype, self.celltype.get_parameter_names()) 511 if isinstance(val, (float, int)): 512 param_dict[name] = float(val) 513 elif isinstance(val, (list, numpy.ndarray)): 514 pass # ought to check list/array only contains numeric types 515 else: 516 raise errors.InvalidParameterValueError 508 param_dict = self.celltype.checkParameters(param_dict, with_defaults=False) 517 509 logger.debug("%s.set(%s)", self.label, param_dict) 518 510 if hasattr(self, "_set_array"): … … 865 857 for variable, value in self.celltype.default_initial_values.items(): 866 858 self.initialize(variable, value) 867 # # should only create recorders for recordable variables: pointless creating a 'v' recorder for a spike source868 # self.recorders = {'spikes': self.recorder_class('spikes', population=self),869 # 'v' : self.recorder_class('v', population=self),870 # 'gsyn' : self.recorder_class('gsyn', population=self)}871 859 self.recorders = {} 872 860 Population.nPop += 1 … … 975 963 976 964 class PopulationView(BasePopulation): 965 """ 966 docstring needed 967 """ 977 968 978 969 def __init__(self, parent, selector, label=None): -
branches/reorganization/src/nest/__init__.py
r876 r878 7 7 import nest 8 8 from pyNN.nest import simulator 9 from pyNN import common, recording, errors, space, standardmodels,__doc__9 from pyNN import common, recording, errors, space, __doc__ 10 10 common.simulator = simulator 11 11 recording.simulator = simulator … … 24 24 from pyNN.nest.recording import * 25 25 from pyNN.random import RandomDistribution 26 from pyNN import standardmodels 26 27 27 28 Set = set … … 222 223 else: 223 224 raise errors.InvalidParameterValueError 224 225 param_dict = self.celltype.checkParameters(param_dict, with_defaults=False) 225 226 # The default implementation in common is is not very efficient for 226 227 # simple and scaled parameters. … … 231 232 # in the computation vary between cells, since if this is not the case 232 233 # we can do the computation here and use nest.SetStatus. 233 to_be_set = {} 234 for key, value in param_dict.items(): 235 if not isinstance(self.celltype, str): 236 # Here we check the consistency of the given parameters 237 try: 238 self.celltype.default_parameters[key] 239 except Exception: 240 raise errors.NonExistentParameterError(key, self.celltype.__class__) 241 if type(value) != type(self.celltype.default_parameters[key]): 242 if isinstance(value, int) and isinstance(self.celltype.default_parameters[key], float): 243 value = float(value) 244 elif (isinstance(value, numpy.ndarray) and len(value.shape) == 1) and isinstance(self.celltype.default_parameters[key], list): 245 pass 246 else: 247 raise errors.InvalidParameterValueError("The parameter %s should be a %s, you supplied a %s" % (key, 248 type(self.celltype.default_parameters[key]), 249 type(value))) 250 # Then we do the call to SetStatus 251 if key in self.celltype.scaled_parameters() or key in self.celltype.computed_parameters(): 234 235 if isinstance(self.celltype, standardmodels.StandardCellType): 236 to_be_set = {} 237 for key, value in param_dict.items(): 238 if key in self.celltype.scaled_parameters(): 252 239 translation = self.celltype.translations[key] 253 240 value = eval(translation['forward_transform'], globals(), {key:value}) 254 to_be_set[translation['translated_name']] = value 241 to_be_set[translation['translated_name']] = value 255 242 elif key in self.celltype.simple_parameters(): 256 243 translation = self.celltype.translations[key] 257 244 to_be_set[translation['translated_name']] = value 258 245 else: 259 to_be_set[key] = value 260 else: 261 try: 262 nest.SetStatus(self.local_cells, key, value) 263 except Exception: 264 raise errors.InvalidParameterValueError 246 assert key in self.celltype.computed_parameters() 265 247 nest.SetStatus(self.local_cells.tolist(), to_be_set) 248 for key, value in param_dict.items(): 249 if key in self.celltype.computed_parameters(): 250 for cell in self: 251 cell.set_parameters(**{key:value}) 252 else: 253 nest.SetStatus(self.local_cells.tolist(), param_dict) 266 254 267 255 def initialize(self, variable, value): -
branches/reorganization/src/standardmodels/__init__.py
r875 r878 58 58 59 59 def __init__(self, parameters): 60 assert set(self.translations.keys()) == set(self.default_parameters.keys()), \ 61 "%s != %s" % (self.translations.keys(), self.default_parameters.keys()) 60 62 self.parameters = self.__class__.checkParameters(parameters, with_defaults=True) 61 63 self.parameters = self.__class__.translate(self.parameters) … … 122 124 123 125 124 125 126 126 class StandardCellType(StandardModelType, models.BaseCellType): 127 127 """Base class for standardized cell model classes.""" -
branches/reorganization/test/system/test_nest.py
r876 r878 28 28 29 29 class ht_neuron(nest.NativeCellType): 30 default_initial_values = {31 'V_m': -65.0,32 'Theta': -51.033 }34 default_parameters = {35 'Tau_m': 16.0,36 'Theta_eq': -51.0,37 }38 30 nest_model = 'ht_neuron' 39 31 conductance_based = True 40 synapse_types = ['AMPA']41 32 standard_receptor_type = False 42 33 … … 44 35 injectable = False 45 36 nest_model = "poisson_generator" 46 default_parameters = {47 'rate': 0.0,48 'start': 0.0,49 'stop': 1e1250 }51 37 52 38 parameters = {'Tau_m': 17.0} … … 54 40 p1.initialize('V_m', -70.0) 55 41 p1.initialize('Theta', -50.0) 42 p1.set('Theta_eq', -51.5) 43 assert_equal(p1.get('Theta_eq'), [-51.5]*10) 56 44 print p1.get('Tau_m') 57 45 p1.rset('Tau_m', RandomDistribution('uniform', [15.0, 20.0])) -
branches/reorganization/test/unittests/test_basepopulation.py
r870 r878 11 11 class MockStandardCell(standardmodels.StandardCellType): 12 12 recordable = ['v', 'spikes'] 13 default_parameters = {'tau_m': 999.9, 'i_offset': 321, 'spike_times': [0,1,2], 'foo': 33.3} 13 default_parameters = {'tau_m': 999.9, 'i_offset': 321.0, 'spike_times': [0,1,2], 'foo': 33.3} 14 translations = {'tau_m': None, 'i_offset': None, 'spike_times': None, 'foo': None} 14 15 @classmethod 15 16 def translate(cls, parameters): … … 202 203 assert_raises(errors.InvalidParameterValueError, p.set, {'foo': 'bar'}) 203 204 205 def test_set_inconsistent_type(): 206 p = MockPopulation() 207 p._set_array = Mock() 208 assert_raises(errors.InvalidParameterValueError, p.set, 'tau_m', [12.34, 56.78]) 209 204 210 def test_set_with_no_get_array(): 205 211 mock_cell = Mock() … … 214 220 p = MockPopulation() 215 221 p._set_array = Mock() 216 p.set(' foo', range(10))217 p._set_array.assert_called_with(**{' foo': range(10)})222 p.set('spike_times', range(10)) 223 p._set_array.assert_called_with(**{'spike_times': range(10)}) 218 224 219 225 def test_tset_with_numeric_values(): -
branches/reorganization/test/unittests/test_standardmodels.py
r814 r878 48 48 """ 49 49 M = StandardModelType 50 M.default_parameters = {'a': 0.0, 'b': 0.0} 51 M.translations = {'a': None, 'b': None} 50 52 P1 = {'a': 22.2, 'b': 33.3} 51 53 P2 = {'A': 22.2, 'B': 333}
