Kaspersky Neuromorphic Platform  1.0.0
API Reference
Loading...
Searching...
No Matches
creators.h
Go to the documentation of this file.
1
21#pragma once
22
23#include <knp/core/projection.h>
24
25#include <exception>
26#include <functional>
27#include <optional>
28#include <random>
29#include <tuple>
30
31#include "synapse_generators.h"
33
38{
39
43namespace creators
44{
45
61template <typename SynapseType>
62[[nodiscard]] knp::core::Projection<SynapseType> all_to_all(
63 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size,
64 size_t postsynaptic_pop_size,
67{
68 return knp::core::Projection<SynapseType>(
69 presynaptic_uid, postsynaptic_uid,
70 synapse_generators::all_to_all<SynapseType>(presynaptic_pop_size, postsynaptic_pop_size, syn_gen),
71 presynaptic_pop_size * postsynaptic_pop_size);
72}
73
74
89template <typename SynapseType>
90[[nodiscard]] knp::core::Projection<SynapseType> one_to_one(
91 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t population_size,
93 std::bind(parameters_generators::default_synapse_gen<SynapseType>, std::placeholders::_1, 0))
94{
95 return knp::core::Projection<SynapseType>(
96 presynaptic_uid, postsynaptic_uid, synapse_generators::one_to_one<SynapseType>(population_size, syn_gen),
97 population_size);
98}
99
100
113template <typename SynapseType, template <typename...> class Container>
114[[nodiscard]] knp::core::Projection<SynapseType> from_container(
115 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid,
116 const Container<typename core::Projection<SynapseType>::Synapse> &container)
117{
118 return typename knp::core::Projection<SynapseType>(
119 presynaptic_uid, postsynaptic_uid, synapse_generators::from_container<SynapseType, Container>(container),
120 container.size());
121}
122
123
134template <typename SynapseType, template <typename, typename, typename...> class Map>
135[[nodiscard]] knp::core::Projection<SynapseType> from_map(
136 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid,
137 const Map<typename std::tuple<size_t, size_t>, typename knp::core::Projection<SynapseType>::SynapseParameters>
138 &synapses_map)
139{
140 return knp::core::Projection<SynapseType>(
141 presynaptic_uid, postsynaptic_uid, synapse_generators::FromMap<SynapseType, Map>(synapses_map),
142 synapses_map.size());
143}
144
145
159template <typename SynapseType>
160[[nodiscard]] knp::core::Projection<SynapseType> fixed_probability(
161 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size,
162 size_t postsynaptic_pop_size, double connection_probability,
165{
166 const auto proj_size = presynaptic_pop_size * postsynaptic_pop_size;
167 auto fp = synapse_generators::FixedProbability<SynapseType>{
168 presynaptic_pop_size, postsynaptic_pop_size, connection_probability, syn_gen};
169
170 return knp::core::Projection<SynapseType>(presynaptic_uid, postsynaptic_uid, fp, proj_size);
171}
172
173
185template <typename SynapseType>
186[[nodiscard]] knp::core::Projection<SynapseType> index_based(
187 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size,
188 size_t postsynaptic_pop_size, parameters_generators::SynGenOptional2ParamsType<SynapseType> syn_gen)
189{
190 const auto proj_size = presynaptic_pop_size * postsynaptic_pop_size;
191
192 return knp::core::Projection<SynapseType>(
193 presynaptic_uid, postsynaptic_uid,
194 synapse_generators::index_based<SynapseType>(presynaptic_pop_size, postsynaptic_pop_size, syn_gen), proj_size);
195}
196
197
211template <typename SynapseType>
212[[nodiscard]] knp::core::Projection<SynapseType> fixed_number_post(
213 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size,
214 size_t postsynaptic_pop_size, size_t neurons_count,
217{
218 const auto proj_size = presynaptic_pop_size * neurons_count;
219
220 return knp::core::Projection<SynapseType>(
221 presynaptic_uid, postsynaptic_uid,
222 synapse_generators::FixedNumberPost<SynapseType>(presynaptic_pop_size, postsynaptic_pop_size, syn_gen),
223 proj_size);
224}
225
226
240template <typename SynapseType>
241[[nodiscard]] knp::core::Projection<SynapseType> fixed_number_pre(
242 const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size,
243 size_t postsynaptic_pop_size, size_t neurons_count,
246{
247 const auto proj_size = postsynaptic_pop_size * neurons_count;
248
249 return knp::core::Projection<SynapseType>(
250 presynaptic_uid, postsynaptic_uid,
251 synapse_generators::FixedNumberPre<SynapseType>(presynaptic_pop_size, postsynaptic_pop_size, syn_gen),
252 proj_size);
253}
254
255
269template <typename DestinationSynapseType, typename SourceSynapseType>
270[[nodiscard]] knp::core::Projection<DestinationSynapseType> clone_projection(
271 const knp::core::Projection<SourceSynapseType> &source_proj,
274 const std::optional<knp::core::UID> &presynaptic_uid = std::nullopt,
275 const std::optional<knp::core::UID> &postsynaptic_uid = std::nullopt)
276{
277 return knp::core::Projection<DestinationSynapseType>(
278 presynaptic_uid.value_or(source_proj.get_presynaptic()),
279 postsynaptic_uid.value_or(source_proj.get_postsynaptic()),
281 source_proj.size());
282}
283
284} // namespace creators
285
286} // namespace knp::framework::projection
const UID & get_postsynaptic() const
Get UID of the associated population to which this projection sends signals.
Definition projection.h:268
const UID & get_presynaptic() const
Get UID of the associated population from which this projection receives spikes.
Definition projection.h:262
size_t size() const
Count number of synapses in the projection.
Definition projection.h:256
typename synapse_traits::synapse_parameters< SynapseType > SynapseParameters
Parameters of the specified synapse type.
Definition projection.h:87
std::tuple< SynapseParameters, size_t, size_t > Synapse
Synapse description structure that contains synapse parameters and indexes of the associated neurons.
Definition projection.h:92
Namespace for framework projection creators.
Definition creators.h:44
knp::core::Projection< DestinationSynapseType > clone_projection(const knp::core::Projection< SourceSynapseType > &source_proj, parameters_generators::SynGen1ParamType< DestinationSynapseType > syn_gen=parameters_generators::default_synapse_gen< DestinationSynapseType >, const std::optional< knp::core::UID > &presynaptic_uid=std::nullopt, const std::optional< knp::core::UID > &postsynaptic_uid=std::nullopt)
Generate a projection which connections are duplicated from another projection.
Definition creators.h:270
knp::core::Projection< SynapseType > fixed_number_pre(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size, size_t postsynaptic_pop_size, size_t neurons_count, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Make connections between each postsynaptic neuron and a fixed number of random presynaptic neurons.
Definition creators.h:241
knp::core::Projection< SynapseType > from_map(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, const Map< typename std::tuple< size_t, size_t >, typename knp::core::Projection< SynapseType >::SynapseParameters > &synapses_map)
Generate projection from std::map object.
Definition creators.h:135
knp::core::Projection< SynapseType > one_to_one(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t population_size, parameters_generators::SynGen1ParamType< SynapseType > syn_gen=std::bind(parameters_generators::default_synapse_gen< SynapseType >, std::placeholders::_1, 0))
Make one-to-one connections between neurons of presynaptic and postsynaptic populations.
Definition creators.h:90
knp::core::Projection< SynapseType > fixed_probability(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size, size_t postsynaptic_pop_size, double connection_probability, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Make connections with some probability between each presynaptic population (source) neuron to each po...
Definition creators.h:160
knp::core::Projection< SynapseType > all_to_all(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size, size_t postsynaptic_pop_size, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Make connections between each presynaptic population (source) neuron to each postsynaptic population ...
Definition creators.h:62
knp::core::Projection< SynapseType > fixed_number_post(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size, size_t postsynaptic_pop_size, size_t neurons_count, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Make connections between each presynaptic neuron and a fixed number of random postsynaptic neurons.
Definition creators.h:212
knp::core::Projection< SynapseType > from_container(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, const Container< typename core::Projection< SynapseType >::Synapse > &container)
Generate projection from container.
Definition creators.h:114
knp::core::Projection< SynapseType > index_based(const knp::core::UID &presynaptic_uid, const knp::core::UID &postsynaptic_uid, size_t presynaptic_pop_size, size_t postsynaptic_pop_size, parameters_generators::SynGenOptional2ParamsType< SynapseType > syn_gen)
Make connections between neurons of presynaptic and postsynaptic populations based on the synapse gen...
Definition creators.h:186
std::function< typename knp::core::Projection< SynapseType >::SynapseParameters(size_t, size_t)> SynGen2ParamsType
Two parameters (index, index) generator type.
std::function< typename knp::core::Projection< SynapseType >::SynapseParameters(size_t)> SynGen1ParamType
One parameter (index) generator type.
knp::core::Projection< SynapseType >::SynapseParameters default_synapse_gen(size_t, size_t)
Default generator of synapse parameters.
std::function< typename std::optional< typename knp::core::Projection< SynapseType >::SynapseParameters >( size_t, size_t)> SynGenOptional2ParamsType
Two parameters (index, index) generator type with optional result.
knp::core::Projection< SynapseType >::SynapseGenerator all_to_all(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, parameters_generators::SynGen2ParamsType< SynapseType > syn_gen=parameters_generators::default_synapse_gen< SynapseType >)
Make connections between each presynaptic population (source) neuron to each postsynaptic population ...
knp::core::Projection< SynapseType >::SynapseGenerator from_container(const Container< typename core::Projection< SynapseType >::Synapse > &container)
Generate synapses from container.
knp::core::Projection< SynapseType >::SynapseGenerator index_based(size_t presynaptic_pop_size, size_t postsynaptic_pop_size, parameters_generators::SynGenOptional2ParamsType< SynapseType > syn_gen)
Make connections between neurons of presynaptic and postsynaptic populations based on the synapse gen...
knp::core::Projection< DestinationSynapseType >::SynapseGenerator clone_projection(const knp::core::Projection< SourceSynapseType > &source_proj, parameters_generators::SynGen1ParamType< DestinationSynapseType > syn_gen=parameters_generators::default_synapse_gen< DestinationSynapseType >)
Make connections duplicated from another projection.
knp::core::Projection< SynapseType >::SynapseGenerator one_to_one(size_t population_size, parameters_generators::SynGen1ParamType< SynapseType > syn_gen=std::bind(parameters_generators::default_synapse_gen< SynapseType >, std::placeholders::_1, 0))
Make one-to-one connections between neurons of presynaptic and postsynaptic populations.
Projection namespace.
Definition connectors.h:35
General projection interface.
Projection connectors.
Parameters generators.