21 #ifndef CYPRESS_UTILS_NEURON_PARAMETERS_HPP 22 #define CYPRESS_UTILS_NEURON_PARAMETERS_HPP 38 #define NAMED_PARAMETER(NAME, IDX) \ 39 static constexpr size_t idx_##NAME = IDX; \ 40 void NAME(Real x) { arr[IDX] = x; } \ 41 Real &NAME() { return arr[IDX]; } \ 42 Real NAME() const { return arr[IDX]; } 48 std::vector<Real> m_params;
49 std::vector<std::string> m_parameter_names;
60 const std::vector<Real> &
parameter()
const {
return m_params; };
67 for (
size_t i = 0; i < m_parameter_names.size(); i++) {
68 if (m_parameter_names[i] == name) {
73 throw std::invalid_argument(
"Unknown neuron parameter" + name);
78 for (
size_t i = 0; i < m_parameter_names.size(); i++) {
79 if (m_parameter_names[i] == name) {
83 throw std::invalid_argument(
"Unknown neuron parameter" + name);
85 void print(std::ostream &out = std::cout)
87 out <<
"# Neuron Parameters: " << std::endl;
88 for (
size_t i = 0; i < m_params.size(); i++) {
89 out << m_parameter_names[i] <<
": " << m_params[i] << std::endl;
100 std::map<std::string, T> input;
101 for (
auto i = obj.begin(); i != obj.end(); i++) {
102 const Json value = i.value();
104 if (value.is_number()) {
105 input.emplace(i.key(), value);
111 template <
typename T>
113 const std::vector<std::string> &names,
114 const std::vector<T> &defaults)
116 std::vector<T> res(names.size());
117 for (
size_t i = 0; i < res.size(); i++) {
118 auto it = input.find(names[i]);
119 if (it != input.end()) {
124 res[i] = defaults.at(i);
126 "For " + names[i] +
" the default value " +
127 std::to_string(defaults[i]) +
" is used");
130 for (
auto elem : input) {
131 throw std::invalid_argument(
"Unknown parameter \"" + elem.first +
"\"");
139 #undef NAMED_PARAMETER Definition: neurons_base.hpp:54
std::map< std::string, T > json_to_map(const cypress::Json &obj)
Definition: neuron_parameters.hpp:98
const std::vector< Real > & parameter() const
Definition: neuron_parameters.hpp:60
void print(std::ostream &out=std::cout)
Definition: neuron_parameters.hpp:85
NeuronParameter()
Definition: neuron_parameters.hpp:58
double Real
Definition: types.hpp:56
nlohmann::json Json
Definition: json.hpp:27
std::vector< T > read_check(std::map< std::string, T > &input, const std::vector< std::string > &names, const std::vector< T > &defaults)
Definition: neuron_parameters.hpp:112
Definition: neuron_parameters.hpp:46
Definition: brainscales_lib.hpp:39
void info(const std::string &module, const std::string &message)