コード例 #1
0
 def translate(self, parameters, copy=True):
     """Translate standardized model parameters to simulator-specific parameters."""
     if copy:
         _parameters = deepcopy(parameters)
     else:
         _parameters = parameters
     cls = self.__class__
     if parameters.schema != self.get_schema():
         raise Exception(
             "Schemas do not match: %s != %s" %
             (parameters.schema, self.get_schema())
         )  # should replace this with a PyNN-specific exception type
     native_parameters = {}
     for name in parameters.keys():
         D = self.translations[name]
         pname = D['translated_name']
         if callable(D['forward_transform']):
             pval = D['forward_transform'](**_parameters)
         else:
             try:
                 pval = eval(D['forward_transform'], globals(), _parameters)
             except NameError as errmsg:
                 raise NameError(
                     "Problem translating '%s' in %s. Transform: '%s'. Parameters: %s. %s"
                     % (pname, cls.__name__, D['forward_transform'],
                        parameters, errmsg))
             except ZeroDivisionError:
                 raise
                 #pval = 1e30 # this is about the highest value hoc can deal with
         native_parameters[pname] = pval
     return ParameterSpace(native_parameters,
                           schema=None,
                           shape=parameters.shape)
コード例 #2
0
ファイル: projections.py プロジェクト: muffgaga/PyNN
    def set(self, **attributes):
        """
        Set connection attributes for all connections on the local MPI node.

        Attribute names may be 'weights', 'delays', or the name of any parameter
        of a synapse dynamics model (e.g. 'U' for TsodyksMarkramSynapse).

        Each attribute value may be:
            (1) a single number
            (2) a RandomDistribution object
            (3) a list/1D array of the same length as the number of local connections
            (4) a 2D array with the same dimensions as the connectivity matrix
                (as returned by `get(format='array')`
            (5) a mapping function, which accepts a single float argument (the
                distance between pre- and post-synaptic cells) and returns a single value.

        Weights should be in nA for current-based and µS for conductance-based
        synapses. Delays should be in milliseconds.
        """
        # should perhaps add a "distribute" argument, for symmetry with "gather" in get()
        parameter_space = ParameterSpace(attributes,
                                         self.synapse_type.get_schema(),
                                         (self.pre.size, self.post.size))
        if isinstance(self.synapse_type, StandardSynapseType):
            parameter_space = self.synapse_type.translate(parameter_space)
        self._set_attributes(parameter_space)
コード例 #3
0
 def test_create_with_list_of_lists(self):
     schema = {'a': Sequence}
     ps = ParameterSpace({'a': [[1, 2, 3], [4, 5, 6]]}, schema, shape=(2, ))
     ps.evaluate()
     assert_array_equal(
         ps['a'],
         np.array(
             [Sequence([1, 2, 3]), Sequence([4, 5, 6])], dtype=Sequence))
コード例 #4
0
 def test_create_with_tuple(self):
     schema = {'a': Sequence}
     ps = ParameterSpace({'a': (1, 2, 3)}, schema, shape=(2, ))
     ps.evaluate()
     assert_array_equal(
         ps['a'],
         np.array(
             [Sequence([1, 2, 3]), Sequence([1, 2, 3])], dtype=Sequence))
コード例 #5
0
 def _get_parameters(self, *names):
     """
     return a ParameterSpace containing native parameters
     """
     parameter_dict = {}
     for name in names:
         parameter_dict[name] = simplify(self._parameters[name])
     return ParameterSpace(parameter_dict, shape=(self.local_size, ))
コード例 #6
0
 def test_iteration_items(self):
     ps = ParameterSpace({'a': [2, 3, 5, 8, 13], 'b': 7, 'c': lambda i: 3 * i + 2}, shape=(5,))
     ps.evaluate(mask=[1, 3, 4])
     expected = {'a': np.array([3, 8, 13]),
                 'c': np.array([5, 11, 14]),
                 'b': np.array([7, 7, 7])}
     for key, value in ps.items():
         assert_array_equal(expected[key], value)
コード例 #7
0
 def test_evaluate_with_mask(self):
     ps = ParameterSpace({'a': [2, 3, 5, 8, 13], 'b': 7, 'c': lambda i: 3 * i + 2}, shape=(5,))
     ps.evaluate(mask=[1, 3, 4])
     expected = {'a': np.array([3, 8, 13]),
                 'c': np.array([5, 11, 14]),
                 'b': np.array([7, 7, 7])}
     for key in expected:
         assert_array_equal(expected[key], ps[key])
コード例 #8
0
 def __init__(self, **parameters):
     self._device = nest.Create(self.nest_name)
     self.cell_list = []
     self.parameter_space = ParameterSpace(self.default_parameters,
                                           self.get_schema(),
                                           shape=(1,))
     if parameters:
         self.parameter_space.update(**parameters)
コード例 #9
0
 def __init__(self, **parameters):
     """
     `parameters` should be a mapping object, e.g. a dict
     """
     self.parameter_space = ParameterSpace(self.default_parameters,
                                           self.get_schema(),
                                           shape=None)
     if parameters:
         self.parameter_space.update(**parameters)
コード例 #10
0
ファイル: electrodes.py プロジェクト: muffgaga/PyNN
 def __init__(self, **parameters):
     self._device   = nest.Create(self.nest_name)
     self.cell_list = []
     parameter_space = ParameterSpace(self.default_parameters,
                                      self.get_schema(),
                                      shape=(1,))
     parameter_space.update(**parameters)
     parameter_space = self.translate(parameter_space)
     self.set_native_parameters(parameter_space)
コード例 #11
0
ファイル: populations.py プロジェクト: tclose/PyNN
 def _get_parameters(self, *names):
     """
     return a ParameterSpace containing native parameters
     """
     parameter_dict = {}
     for name in names:
         value = simplify(getattr(self.brian_group, name))
         parameter_dict[name] = value
     return ParameterSpace(parameter_dict, shape=(self.size, ))
コード例 #12
0
 def _get_parameters(self, *names):
     """Return a ParameterSpace containing native parameters"""
     parameter_space = {}
     for name in names:
         value = simplify(self.celltype.parameter_space[name])
         if isinstance(value, np.ndarray):
             value = value[self.mask]
         parameter_space[name] = value
     return ParameterSpace(parameter_space, shape=(self.size, ))
コード例 #13
0
 def test_columnwise_iteration_single_column(self):
     ps2d = ParameterSpace({'a': [[2, 3, 5, 8, 13], [21, 34, 55, 89, 144]],
                            'b': 7,
                            'c': lambda i, j: 3 * i - 2 * j}, shape=(2, 5))
     ps2d.evaluate(mask=(slice(None), 3))
     expected = [{'a': np.array([8, 89]), 'b': np.array([7, 7]), 'c': np.array([-6, -3])}]
     actual = list(ps2d.columns())
     for x, y in zip(actual, expected):
         for key in y:
             assert_array_equal(x[key], y[key])
コード例 #14
0
 def parameter_space(self):
     timing_parameters = self.timing_dependence.parameter_space
     weight_parameters = self.weight_dependence.parameter_space
     parameters = ParameterSpace({'weight': self.weight,
                                  'delay': self.delay,
                                  'dendritic_delay_fraction': self.dendritic_delay_fraction},
                                 self.get_schema())
     parameters.update(**timing_parameters)
     parameters.update(**weight_parameters)
     return parameters
コード例 #15
0
 def test_evaluate(self):
     ps = ParameterSpace(
         {
             'a': [2, 3, 5, 8],
             'b': 7,
             'c': lambda i: 3 * i + 2
         }, shape=(4, ))
     self.assertIsInstance(ps['c'], LazyArray)
     ps.evaluate()
     assert_array_equal(ps['c'], np.array([2, 5, 8, 11]))
コード例 #16
0
def test_reverse_translate():
    M = StandardModelType
    M.default_parameters = {'a': 22.2, 'b': 33.3, 'c': 44.4}
    M.translations = build_translations(
        ('a', 'A'),
        ('b', 'B', 1000.0),
        ('c', 'C', 'c + a', 'C - A'),
    )
    assert_equal(_parameter_space_to_dict(M().reverse_translate(ParameterSpace({'A': 23.4, 'B': 34500.0, 'C': 69.0})), 88),
                 {'a': 23.4, 'b': 34.5, 'c': 45.6})
コード例 #17
0
 def test_columnwise_iteration(self):
     ps2d = ParameterSpace({'a': [[2, 3, 5, 8, 13], [21, 34, 55, 89, 144]],
                            'b': 7,
                            'c': lambda i, j: 3 * i - 2 * j}, shape=(2, 5))
     ps2d.evaluate(mask=(slice(None), [1, 3, 4]))
     expected = [{'a': np.array([3, 34]), 'b': np.array([7, 7]), 'c': np.array([-2, 1])},
                 {'a': np.array([8, 89]), 'b': np.array([7, 7]), 'c': np.array([-6, -3])},
                 {'a': np.array([13, 144]), 'b': np.array([7, 7]), 'c': np.array([-8, -5])}]
     for x, y in zip(ps2d.columns(), expected):
         for key in y:
             assert_array_equal(x[key], y[key])
コード例 #18
0
 def _get_parameters(self, *names):
     """
     return a ParameterSpace containing native parameters
     """
     parameter_dict = {}
     for name in names:
         value = getattr(self.brian2_group, name)
         if hasattr(value, "shape") and value.shape:
             value = value[self.mask]
         parameter_dict[name] = simplify(value)
     return ParameterSpace(parameter_dict, shape=(self.size,))
コード例 #19
0
ファイル: populations.py プロジェクト: tclose/PyNN
 def _get_parameters(self, *names):
     """
     return a ParameterSpace containing native parameters
     """
     parameter_dict = {}
     for name in names:
         value = simplify(getattr(self.brian_group, name))
         if isinstance(value, numpy.ndarray):
             value = value[self.mask]
         parameter_dict[name] = value
     return ParameterSpace(parameter_dict, shape=(self.size, ))
コード例 #20
0
 def _get_parameters(self, *names):
     """
     return a ParameterSpace containing native parameters
     """
     parameter_dict = {}
     for name in names:
         if name == 'spike_times':  # hack
             parameter_dict[name] = [Sequence(getattr(id._cell, name)) for id in self]
         else:
             parameter_dict[name] = simplify(numpy.array([getattr(id._cell, name) for id in self]))
     return ParameterSpace(parameter_dict, shape=(self.local_size,))
コード例 #21
0
    def __init__(self, **parameters):
        self._device = nest.Create(self.nest_name)
        self.cell_list = []
        self.parameter_space = ParameterSpace(self.default_parameters,
                                              self.get_schema(),
                                              shape=(1, ))
        if parameters:
            self.parameter_space.update(**parameters)

        self.min_delay = state.min_delay
        self.timestep = state.dt  # NoisyCurrentSource has a parameter called "dt", so use "timestep" here
コード例 #22
0
 def _get_parameters(self, *names):
     """Return a ParameterSpace containing native parameters"""
     parameter_space = {}
     for name in names:
         value = self.celltype.parameter_space[name]
         value = simplify(value)
         # lazyarray cannot handle np.bool_
         if isinstance(value, np.bool_):
             value = bool(value)
         parameter_space[name] = value
     return ParameterSpace(parameter_space, shape=(self.size, ))
コード例 #23
0
def test_instantiate():
    """
    Instantiating a StandardModelType should set self.parameter_space to a
    ParameterSpace object containing the provided parameters.
    """
    M = StandardModelType
    M.default_parameters = {'a': 0.0, 'b': 0.0}
    P1 = {'a': 22.2, 'b': 33.3}
    m = M(**P1)
    assert_equal(m.parameter_space._parameters, ParameterSpace(P1, None, None)._parameters)
    M.default_parameters = {}
コード例 #24
0
ファイル: electrodes.py プロジェクト: treestreamymw/PyNN
 def __init__(self, **parameters):
     super(StandardCurrentSource, self).__init__(**parameters)
     self.cell_list = []
     self.indices = []
     simulator.state.current_sources.append(self)
     parameter_space = ParameterSpace(self.default_parameters,
                                      self.get_schema(),
                                      shape=(1, ))
     parameter_space.update(**parameters)
     parameter_space = self.translate(parameter_space)
     self.set_native_parameters(parameter_space)
コード例 #25
0
ファイル: populations.py プロジェクト: NeuralEnsemble/PyNN
 def _get_parameters(self, *names):
     """
     return a ParameterSpace containing native parameters
     """
     parameter_dict = {}
     for name in names:
         value = self.parent._parameters[name]
         if isinstance(value, np.ndarray):
             value = value[self.mask]
         parameter_dict[name] = simplify(value)
     return ParameterSpace(parameter_dict, shape=(self.size,))  # or local size?
コード例 #26
0
 def test_evaluate_with_mask_2D(self):
     ps2d = ParameterSpace(
         {
             'a': [[2, 3, 5, 8, 13], [21, 34, 55, 89, 144]],
             'b': 7,
             'c': lambda i, j: 3 * i - 2 * j
         },
         shape=(2, 5))
     ps2d.evaluate(mask=(slice(None), [1, 3, 4]))
     assert_array_equal(ps2d['a'], np.array([[3, 8, 13], [34, 89, 144]]))
     assert_array_equal(ps2d['c'], np.array([[-2, -6, -8], [1, -3, -5]]))
コード例 #27
0
def test_translate_with_invalid_transformation():
    M = StandardModelType
    M.translations = build_translations(
        ('a', 'A'),
        ('b', 'B', 'b + z', 'B-Z'),
    )
    M.default_parameters = {'a': 22.2, 'b': 33.3}
    # really we should trap such errors in build_translations(), not in translate()
    m = M()
    assert_raises(NameError,
                  m.translate,
                  ParameterSpace({'a': 23.4, 'b': 34.5}, m.get_schema(), None))
コード例 #28
0
def test_translate_with_divide_by_zero_error():
    M = StandardModelType
    M.default_parameters = {'a': 22.2, 'b': 33.3}
    M.translations = build_translations(
        ('a', 'A'),
        ('b', 'B', 'b/0', 'B*0'),
    )
    m = M()
    native_parameters = m.translate(ParameterSpace({'a': 23.4, 'b': 34.5}, m.get_schema(), 77))
    assert_raises(ZeroDivisionError,
                  native_parameters.evaluate,
                  simplify=True)
コード例 #29
0
 def __init__(self, **parameters):
     self._devices = []
     self.cell_list = []
     self._amplitudes = None
     self._times = None
     self._h_iclamps = {}
     parameter_space = ParameterSpace(self.default_parameters,
                                      self.get_schema(),
                                      shape=(1, ))
     parameter_space.update(**parameters)
     parameter_space = self.translate(parameter_space)
     self.set_native_parameters(parameter_space)
コード例 #30
0
ファイル: electrodes.py プロジェクト: rgerkin/PyNN
 def __init__(self, **parameters):
     super(StandardCurrentSource, self).__init__(**parameters)
     global current_sources
     self.cell_list = []
     self.indices   = []
     self.ind = len(current_sources) # Todo use self.indices instead...
     current_sources.append(self)
     parameter_space = ParameterSpace(self.default_parameters,
                                      self.get_schema(),
                                      shape=(1,))
     parameter_space.update(**parameters)
     parameter_space = self.translate(parameter_space)
     self.set_native_parameters(parameter_space)