Changeset 987 for trunk

Show
Ignore:
Timestamp:
07/26/11 16:21:50 (10 months ago)
Author:
emuller
Message:

Fixes to NEST NineML code to update to latest python lib9ml API

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/nest/nineml.py

    r983 r987  
    2020from __future__ import absolute_import # Not compatible with Python 2.4 
    2121import subprocess 
    22 import neuron 
     22#import neuron 
    2323from pyNN.models import BaseCellType 
    2424#from pyNN.nineml.cells import _build_nineml_celltype 
     
    6666    def __new__(cls, name, bases, dct): 
    6767         
    68         import nineml.abstraction_layer as nineml 
    69         from nineml.abstraction_layer import models                
     68        import nineml.abstraction_layer as al 
     69        from nineml.abstraction_layer import flattening, writers, component_modifiers 
    7070        import nest 
    71          
     71 
    7272        #Extract Parameters Back out from Dict: 
    7373        nineml_model = dct['nineml_model'] 
    7474        synapse_components = dct['synapse_components'] 
    7575 
    76         # Reduce the model:                     
    77         reduced_component = models.reduce_to_single_component( nineml_model, 
    78                                                                componentname=name ) 
    79         reduced_component.backsub_all() 
    80         #reduced_component.backsub_aliases() 
    81         #reduced_component.backsub_equations() 
     76        # Flatten the model: 
     77        assert isinstance(nineml_model, al.ComponentClass) 
     78        if nineml_model.is_flat(): 
     79            flat_component = nineml_model 
     80        else: 
     81            flat_component = flattening.flatten( nineml_model,name ) 
     82         
     83        # Make the substitutions: 
     84        flat_component.backsub_all() 
     85        #flat_component.backsub_aliases() 
     86        #flat_component.backsub_equations() 
    8287 
    83         reduced_component.short_description = "Auto-generated 9ML neuron model for PyNN.nest" 
    84         reduced_component.long_description = "Auto-generated 9ML neuron model for PyNN.nest" 
     88        # Close any open reduce ports: 
     89        component_modifiers.ComponentModifier.close_all_reduce_ports(component = flat_component) 
     90 
     91 
     92        flat_component.short_description = "Auto-generated 9ML neuron model for PyNN.nest" 
     93        flat_component.long_description = "Auto-generated 9ML neuron model for PyNN.nest" 
     94 
     95        # Close any open reduce ports: 
     96        component_modifiers.ComponentModifier.close_all_reduce_ports(component = flat_component) 
    8597 
    8698        # synapse ports: 
     
    91103            #syn_component = nineml_model[syn.namespace] 
    92104            syn_component = nineml_model.subnodes[syn.namespace] 
    93             recv_event_ports = list(syn_component.filter_ports(cls=nineml.EventPort, mode='recv')) 
     105            recv_event_ports = list(syn_component.query.event_recv_ports) 
    94106            # check there's only one 
    95107            if len(recv_event_ports)!=1: 
    96108                raise ValueError, "A synapse component has multiple recv ports.  Cannot dis-ambiguate" 
    97             synapse_ports.append(syn.namespace+'_'+recv_event_ports[0].symbol) 
     109            synapse_ports.append(syn.namespace+'_'+recv_event_ports[0].name) 
    98110 
    99111         
    100112        # New: 
    101         dct["combined_model"] = reduced_component 
     113        dct["combined_model"] = flat_component 
    102114        # TODO: Override this with user layer 
    103115        #default_values = ModelToSingleComponentReducer.flatten_namespace_dict( parameters ) 
    104         dct["default_parameters"] = dict( (name, 1.0) for name in reduced_component.parameters ) 
    105         dct["default_initial_values"] = dict((name, 0.0) for name in reduced_component.state_variables) 
     116        dct["default_parameters"] = dict( (p.name, 1.0) for p in flat_component.parameters ) 
     117        dct["default_initial_values"] = dict((s.name, 0.0) for s in flat_component.state_variables) 
    106118        dct["synapse_types"] = [syn.namespace for syn in synapse_components]  
    107119        dct["standard_receptor_type"] = (dct["synapse_types"] == ('excitatory', 'inhibitory')) 
     
    113125         
    114126        # Recording from bindings: 
    115         dct["recordable"] = [port.name for port in reduced_component.analog_ports] + ['spikes', 'regime'] 
     127        dct["recordable"] = [port.name for port in flat_component.analog_ports] + ['spikes', 'regime'] 
    116128        # TODO bindings -> alias and support recording of them in nest template 
    117         #+ [binding.name for binding in reduced_component.bindings] 
     129        #+ [binding.name for binding in flat_component.bindings] 
    118130         
    119131        dct["weight_variables"] = dict([ (syn.namespace,syn.namespace+'_'+syn.weight_connector ) 
     
    123135 
    124136        # TODO: UL configuration of initial regime. 
    125         initial_regime = reduced_component.regime_map.keys()[0] 
     137        initial_regime = flat_component.regimes_map.keys()[0] 
    126138 
    127139        from nestbuilder import NestFileBuilder 
    128140        nfb = NestFileBuilder(  nest_classname = name,  
    129                                 component = reduced_component,  
     141                                component = flat_component,  
    130142                                synapse_ports = synapse_ports, 
    131143                                initial_regime =  initial_regime,