Changeset 439

Show
Ignore:
Timestamp:
08/12/08 14:18:42 (3 months ago)
Author:
pierre
Message:

Optimization of the set() method in nest2, using a simple call to nest.SetStatus? to speed up the setting of parameters

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/nest2/__init__.py

    r434 r439  
    718718        else: 
    719719            raise common.InvalidParameterValueError 
     720         
    720721        # This is not very efficient for simple and scaled parameters. 
    721722        # Should call nest.SetStatus(self.cell_local,...) for the parameters in 
     
    725726        # in the computation vary between cells, since if this is not the case 
    726727        # we can do the computation here and use nest.SetStatus. 
    727         for cell in self.cell_local: 
    728             cell.set_parameters(**param_dict) 
     728        for key, value in param_dict.items(): 
     729            if not isinstance(self.celltype, str): 
     730                # Here we check the consistency of the given parameters 
     731                try: 
     732                    self.celltype.default_parameters[key] 
     733                except Exception: 
     734                    raise common.NonExistentParameterError(key, self.celltype.__class__) 
     735                if type(value) != type(self.celltype.default_parameters[key]): 
     736                    raise common.InvalidParameterValueError 
     737                 
     738                # Then we do the call to SetStatus 
     739                if key in self.celltype.scaled_parameters(): 
     740                    translation = self.celltype.translations[key] 
     741                    value = eval(translation['forward_transform'], globals(), {key:value}) 
     742                    nest.SetStatus(self.cell_local,translation['translated_name'],value) 
     743                elif key in self.celltype.simple_parameters(): 
     744                    translation = self.celltype.translations[key] 
     745                    nest.SetStatus(self.cell_local, translation['translated_name'], value) 
     746                else: 
     747                    for cell in self.cell_local: 
     748                        cell.set_parameters(**{key:value}) 
     749            else: 
     750                try: 
     751                    nest.SetStatus(self.cell_local, key, value) 
     752                except Exception: 
     753                    raise common.InvalidParameterValueError 
    729754 
    730755    def tset(self, parametername, value_array): 
     
    768793            rarr = rarr[:len(self.cell_local)] 
    769794            if not isinstance(self.celltype, str): 
     795                try: 
     796                    self.celltype.default_parameters[parametername] 
     797                except Exception: 
     798                    raise common.NonExistentParameterError(parametername, self.celltype.__class__) 
    770799                if parametername in self.celltype.scaled_parameters(): 
    771800                    translation = self.celltype.translations[parametername]