LOLA
synapse.h
Go to the documentation of this file.
1 #pragma once
2 #include "halco/common/iter_all.h"
3 #include "halco/common/typed_array.h"
4 #include "halco/common/typed_heap_array.h"
5 #include "haldls/cerealization.h"
6 #include "haldls/vx/common.h"
7 #include "haldls/vx/synapse.h"
8 #include "haldls/vx/traits.h"
9 #include "hate/visibility.h"
10 #include "lola/vx/cerealization.h"
11 #include "lola/vx/genpybind.h"
12 #include <boost/hana/adapt_struct.hpp>
13 
14 #if defined(__GENPYBIND__) or defined(__GENPYBIND_GENERATED__)
15 #include <pybind11/numpy.h>
16 #endif
17 
19 
20 class GENPYBIND(visible) ColumnCorrelationRow : public haldls::vx::DifferentialWriteTrait
21 {
22 public:
23  typedef std::false_type has_local_data;
24  typedef halco::hicann_dls::vx::ColumnCorrelationRowOnDLS coordinate_type;
25 
26  typedef haldls::vx::ColumnCorrelationQuad::ColumnCorrelationSwitch Value GENPYBIND(visible);
27 
28  typedef halco::common::typed_heap_array<Value, halco::hicann_dls::vx::SynapseOnSynapseRow>
29  Values GENPYBIND(opaque(false));
30 
31  ColumnCorrelationRow() SYMBOL_VISIBLE;
32 
33  Values values;
34 
35  bool operator==(ColumnCorrelationRow const& other) const SYMBOL_VISIBLE;
36  bool operator!=(ColumnCorrelationRow const& other) const SYMBOL_VISIBLE;
37 
38  GENPYBIND(stringstream)
39  friend std::ostream& operator<<(std::ostream& os, ColumnCorrelationRow const& row)
40  SYMBOL_VISIBLE;
41 
42 private:
43  friend struct haldls::vx::detail::VisitPreorderImpl<ColumnCorrelationRow>;
44 };
45 
46 
47 class GENPYBIND(visible) ColumnCurrentRow : public haldls::vx::DifferentialWriteTrait
48 {
49 public:
50  typedef std::false_type has_local_data;
51  typedef halco::hicann_dls::vx::ColumnCurrentRowOnDLS coordinate_type;
52 
53  typedef haldls::vx::ColumnCurrentQuad::ColumnCurrentSwitch Value GENPYBIND(visible);
54 
55  typedef halco::common::typed_heap_array<Value, halco::hicann_dls::vx::SynapseOnSynapseRow>
56  Values GENPYBIND(opaque(false));
57 
58  ColumnCurrentRow() SYMBOL_VISIBLE;
59 
60  Values values;
61 
62  bool operator==(ColumnCurrentRow const& other) const SYMBOL_VISIBLE;
63  bool operator!=(ColumnCurrentRow const& other) const SYMBOL_VISIBLE;
64 
65  GENPYBIND(stringstream)
66  friend std::ostream& operator<<(std::ostream& os, ColumnCurrentRow const& row) SYMBOL_VISIBLE;
67 
68 private:
69  friend struct haldls::vx::detail::VisitPreorderImpl<ColumnCurrentRow>;
70 };
71 
72 
73 class GENPYBIND(visible) SynapseWeightRow : public haldls::vx::DifferentialWriteTrait
74 {
75 public:
76  typedef std::false_type has_local_data;
77  typedef halco::hicann_dls::vx::SynapseWeightRowOnDLS coordinate_type;
78 
79  typedef haldls::vx::SynapseWeightQuad::Value Value GENPYBIND(visible);
80 
81  typedef halco::common::typed_heap_array<Value, halco::hicann_dls::vx::SynapseOnSynapseRow>
82  _values_type GENPYBIND(opaque(false));
83 
85  SynapseWeightRow() SYMBOL_VISIBLE;
86 
88  _values_type values;
89 
90  bool operator==(SynapseWeightRow const& other) const SYMBOL_VISIBLE;
91  bool operator!=(SynapseWeightRow const& other) const SYMBOL_VISIBLE;
92 
93  GENPYBIND(stringstream)
94  friend std::ostream& operator<<(std::ostream& os, SynapseWeightRow const& row) SYMBOL_VISIBLE;
95 
96 private:
97  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseWeightRow>;
98 };
99 
100 
101 class GENPYBIND(visible) SynapseLabelRow : public haldls::vx::DifferentialWriteTrait
102 {
103 public:
104  typedef std::false_type has_local_data;
105  typedef halco::hicann_dls::vx::SynapseLabelRowOnDLS coordinate_type;
106 
107  typedef haldls::vx::SynapseLabelQuad::Value Value GENPYBIND(visible);
108 
109  typedef halco::common::typed_heap_array<Value, halco::hicann_dls::vx::SynapseOnSynapseRow>
110  _values_type GENPYBIND(opaque(false));
111 
113  SynapseLabelRow() SYMBOL_VISIBLE;
114 
116  _values_type values;
117 
118  bool operator==(SynapseLabelRow const& other) const SYMBOL_VISIBLE;
119  bool operator!=(SynapseLabelRow const& other) const SYMBOL_VISIBLE;
120 
121  GENPYBIND(stringstream)
122  friend std::ostream& operator<<(std::ostream& os, SynapseLabelRow const& row) SYMBOL_VISIBLE;
123 
124 private:
125  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseLabelRow>;
126 };
127 
128 
129 class GENPYBIND(visible) SynapseCorrelationCalibRow : public haldls::vx::DifferentialWriteTrait
130 {
131 public:
132  typedef std::false_type has_local_data;
133  typedef halco::hicann_dls::vx::SynapseCorrelationCalibRowOnDLS coordinate_type;
134 
135  typedef haldls::vx::SynapseCorrelationCalibQuad::TimeCalib TimeCalib GENPYBIND(visible);
136  typedef haldls::vx::SynapseCorrelationCalibQuad::AmpCalib AmpCalib GENPYBIND(visible);
137 
138  typedef halco::common::typed_heap_array<TimeCalib, halco::hicann_dls::vx::SynapseOnSynapseRow>
139  _time_calibs_type GENPYBIND(opaque(false));
140  typedef halco::common::typed_heap_array<AmpCalib, halco::hicann_dls::vx::SynapseOnSynapseRow>
141  _amp_calibs_type GENPYBIND(opaque(false));
142 
143 
145  SynapseCorrelationCalibRow() SYMBOL_VISIBLE;
146 
148  _time_calibs_type time_calibs;
149 
151  _amp_calibs_type amp_calibs;
152 
153 
154  bool operator==(SynapseCorrelationCalibRow const& other) const SYMBOL_VISIBLE;
155  bool operator!=(SynapseCorrelationCalibRow const& other) const SYMBOL_VISIBLE;
156 
157  GENPYBIND(stringstream)
158  friend std::ostream& operator<<(std::ostream& os, SynapseCorrelationCalibRow const& row)
159  SYMBOL_VISIBLE;
160 
161 private:
162  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseCorrelationCalibRow>;
163 };
164 
165 
166 class GENPYBIND(visible) SynapseRow : public haldls::vx::DifferentialWriteTrait
167 {
168 public:
169  typedef std::false_type has_local_data;
170  typedef halco::hicann_dls::vx::SynapseRowOnDLS coordinate_type;
171 
172  typedef haldls::vx::SynapseQuad::Weight Weight GENPYBIND(visible);
173  typedef haldls::vx::SynapseQuad::Label Label GENPYBIND(visible);
174  typedef haldls::vx::SynapseQuad::TimeCalib TimeCalib GENPYBIND(visible);
175  typedef haldls::vx::SynapseQuad::AmpCalib AmpCalib GENPYBIND(visible);
176 
177  typedef halco::common::typed_heap_array<Weight, halco::hicann_dls::vx::SynapseOnSynapseRow>
178  _weights_type GENPYBIND(opaque);
179  typedef halco::common::typed_heap_array<Label, halco::hicann_dls::vx::SynapseOnSynapseRow>
180  _labels_type GENPYBIND(opaque);
181  typedef halco::common::typed_heap_array<TimeCalib, halco::hicann_dls::vx::SynapseOnSynapseRow>
182  _time_calibs_type GENPYBIND(opaque);
183  typedef halco::common::typed_heap_array<AmpCalib, halco::hicann_dls::vx::SynapseOnSynapseRow>
184  _amp_calibs_type GENPYBIND(opaque);
185 
187  SynapseRow() SYMBOL_VISIBLE;
188 
190  _weights_type weights;
191 
193  _labels_type labels;
194 
196  _time_calibs_type time_calibs;
197 
199  _amp_calibs_type amp_calibs;
200 
201  bool operator==(SynapseRow const& other) const SYMBOL_VISIBLE;
202  bool operator!=(SynapseRow const& other) const SYMBOL_VISIBLE;
203 
204  GENPYBIND(stringstream)
205  friend std::ostream& operator<<(std::ostream& os, SynapseRow const& row) SYMBOL_VISIBLE;
206 
207 private:
208  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseRow>;
209 };
210 
211 
212 class GENPYBIND(visible) SynapseWeightMatrix : public haldls::vx::DifferentialWriteTrait
213 {
214 public:
215  typedef std::false_type has_local_data;
216  typedef halco::hicann_dls::vx::SynapseWeightMatrixOnDLS coordinate_type;
217 
218  template <typename T>
219  using row_type = halco::common::typed_array<T, halco::hicann_dls::vx::SynapseOnSynapseRow>;
220 
221  template <typename T>
222  using matrix_type =
223  halco::common::typed_heap_array<row_type<T>, halco::hicann_dls::vx::SynapseRowOnSynram>;
224 
225  typedef haldls::vx::SynapseWeightQuad::Value Value GENPYBIND(visible);
226 
227  typedef row_type<Value> _row_type GENPYBIND(opaque(false));
228  typedef matrix_type<Value> _values_type GENPYBIND(opaque(false));
229 
231  SynapseWeightMatrix() SYMBOL_VISIBLE;
232 
234  _values_type values;
235 
236  bool operator==(SynapseWeightMatrix const& other) const SYMBOL_VISIBLE;
237  bool operator!=(SynapseWeightMatrix const& other) const SYMBOL_VISIBLE;
238 
239  GENPYBIND(stringstream)
240  friend std::ostream& operator<<(std::ostream& os, SynapseWeightMatrix const& row)
241  SYMBOL_VISIBLE;
242 
243 private:
244  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseWeightMatrix>;
245 };
246 
247 
248 class GENPYBIND(visible) SynapseLabelMatrix : public haldls::vx::DifferentialWriteTrait
249 {
250 public:
251  typedef std::false_type has_local_data;
252  typedef halco::hicann_dls::vx::SynapseLabelMatrixOnDLS coordinate_type;
253 
254  template <typename T>
255  using row_type = halco::common::typed_array<T, halco::hicann_dls::vx::SynapseOnSynapseRow>;
256 
257  template <typename T>
258  using matrix_type =
259  halco::common::typed_heap_array<row_type<T>, halco::hicann_dls::vx::SynapseRowOnSynram>;
260 
261  typedef haldls::vx::SynapseLabelQuad::Value Value GENPYBIND(visible);
262 
263  typedef row_type<Value> _row_type GENPYBIND(opaque(false));
264  typedef matrix_type<Value> _values_type GENPYBIND(opaque(false));
265 
267  SynapseLabelMatrix() SYMBOL_VISIBLE;
268 
270  _values_type values;
271 
272  bool operator==(SynapseLabelMatrix const& other) const SYMBOL_VISIBLE;
273  bool operator!=(SynapseLabelMatrix const& other) const SYMBOL_VISIBLE;
274 
275  GENPYBIND(stringstream)
276  friend std::ostream& operator<<(std::ostream& os, SynapseLabelMatrix const& row) SYMBOL_VISIBLE;
277 
278 private:
279  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseLabelMatrix>;
280 };
281 
282 
283 class GENPYBIND(visible) SynapseCorrelationCalibMatrix : public haldls::vx::DifferentialWriteTrait
284 {
285 public:
286  typedef std::false_type has_local_data;
287  typedef halco::hicann_dls::vx::SynapseCorrelationCalibMatrixOnDLS coordinate_type;
288 
289  template <typename T>
290  using row_type = halco::common::typed_array<T, halco::hicann_dls::vx::SynapseOnSynapseRow>;
291 
292  template <typename T>
293  using matrix_type =
294  halco::common::typed_heap_array<row_type<T>, halco::hicann_dls::vx::SynapseRowOnSynram>;
295 
296  typedef haldls::vx::SynapseCorrelationCalibQuad::TimeCalib TimeCalib GENPYBIND(visible);
297  typedef haldls::vx::SynapseCorrelationCalibQuad::AmpCalib AmpCalib GENPYBIND(visible);
298 
299  typedef row_type<TimeCalib> _time_calibs_row_type GENPYBIND(opaque(false));
300  typedef row_type<AmpCalib> _amp_calibs_row_type GENPYBIND(opaque(false));
301  typedef matrix_type<TimeCalib> _time_calibs_type GENPYBIND(opaque(false));
302  typedef matrix_type<AmpCalib> _amp_calibs_type GENPYBIND(opaque(false));
303 
306 
308  _time_calibs_type time_calibs;
309 
311  _amp_calibs_type amp_calibs;
312 
313 
314  bool operator==(SynapseCorrelationCalibMatrix const& other) const SYMBOL_VISIBLE;
315  bool operator!=(SynapseCorrelationCalibMatrix const& other) const SYMBOL_VISIBLE;
316 
317  GENPYBIND(stringstream)
318  friend std::ostream& operator<<(std::ostream& os, SynapseCorrelationCalibMatrix const& row)
319  SYMBOL_VISIBLE;
320 
321 private:
322  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseCorrelationCalibMatrix>;
323 };
324 
325 
326 class GENPYBIND(visible) SynapseMatrix : public haldls::vx::DifferentialWriteTrait
327 {
328 public:
329  typedef std::false_type has_local_data;
330  typedef halco::hicann_dls::vx::SynramOnDLS coordinate_type;
331 
332  template <typename T>
333  using row_type = halco::common::typed_array<T, halco::hicann_dls::vx::SynapseOnSynapseRow>;
334 
335  template <typename T>
336  using matrix_type =
337  halco::common::typed_heap_array<row_type<T>, halco::hicann_dls::vx::SynapseRowOnSynram>;
338 
339  typedef haldls::vx::SynapseQuad::Weight Weight GENPYBIND(visible);
340  typedef haldls::vx::SynapseQuad::Label Label GENPYBIND(visible);
341  typedef haldls::vx::SynapseQuad::TimeCalib TimeCalib GENPYBIND(visible);
342  typedef haldls::vx::SynapseQuad::AmpCalib AmpCalib GENPYBIND(visible);
343 
344  typedef row_type<Weight> _weights_row_type GENPYBIND(opaque);
345  typedef row_type<Label> _labels_row_type GENPYBIND(opaque);
346  typedef row_type<TimeCalib> _time_calibs_row_type GENPYBIND(opaque);
347  typedef row_type<AmpCalib> _amp_calibs_row_type GENPYBIND(opaque);
348 
349  typedef matrix_type<Weight> _weights_type GENPYBIND(opaque);
350  typedef matrix_type<Label> _labels_type GENPYBIND(opaque);
351  typedef matrix_type<TimeCalib> _time_calibs_type GENPYBIND(opaque);
352  typedef matrix_type<AmpCalib> _amp_calibs_type GENPYBIND(opaque);
353 
355  SynapseMatrix() SYMBOL_VISIBLE;
356 
358  _weights_type weights;
359 
361  _labels_type labels;
362 
364  _time_calibs_type time_calibs;
365 
367  _amp_calibs_type amp_calibs;
368 
369  bool operator==(SynapseMatrix const& other) const SYMBOL_VISIBLE;
370  bool operator!=(SynapseMatrix const& other) const SYMBOL_VISIBLE;
371 
372  GENPYBIND(stringstream)
373  friend std::ostream& operator<<(std::ostream& os, SynapseMatrix const& row) SYMBOL_VISIBLE;
374 
375 private:
376  friend struct haldls::vx::detail::VisitPreorderImpl<SynapseMatrix>;
377 };
378 
379 
385 class GENPYBIND(visible) CorrelationResetRow
386 {
387 public:
388  typedef std::false_type has_local_data;
389  typedef halco::hicann_dls::vx::CorrelationResetRowOnDLS coordinate_type;
390 
392  CorrelationResetRow() SYMBOL_VISIBLE;
393 
394  bool operator==(CorrelationResetRow const& other) const SYMBOL_VISIBLE;
395  bool operator!=(CorrelationResetRow const& other) const SYMBOL_VISIBLE;
396 
397  GENPYBIND(stringstream)
398  friend std::ostream& operator<<(std::ostream& os, CorrelationResetRow const& row)
399  SYMBOL_VISIBLE;
400 
401 private:
402  friend class haldls::vx::detail::VisitPreorderImpl<CorrelationResetRow>;
403 };
404 
405 } // namespace lola::vx
406 
407 namespace haldls::vx::detail {
408 
409 template <>
410 struct BackendContainerTrait<lola::vx::ColumnCorrelationRow>
411  : public BackendContainerBase<
412  lola::vx::ColumnCorrelationRow,
413  fisch::vx::word_access_type::Omnibus,
414  fisch::vx::word_access_type::OmnibusChipOverJTAG>
415 {};
416 
417 template <>
418 struct VisitPreorderImpl<lola::vx::ColumnCorrelationRow>
419 {
421 
422  template <typename ContainerT, typename VisitorT>
423  static void call(
424  ContainerT& config,
425  typename container_type::coordinate_type const& coord,
426  VisitorT&& visitor)
427  {
428  using halco::common::iter_all;
429  using namespace halco::hicann_dls::vx;
430 
431  visitor(coord, config);
432 
433  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
434  haldls::vx::ColumnCorrelationQuad quad_config;
435  for (auto const syn : iter_all<EntryOnQuad>()) {
436  SynapseOnSynapseRow const syn_on_row(syn, quad);
437  quad_config.m_switches[syn] = config.values[syn_on_row];
438  }
439  visit_preorder(
440  quad_config,
441  ColumnCorrelationQuadOnDLS(
442  quad.toColumnCorrelationQuadOnSynram(), coord.toSynramOnDLS()),
443  visitor);
444  // only on alteration
445  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
446  for (auto const syn : iter_all<EntryOnQuad>()) {
447  SynapseOnSynapseRow const syn_on_row(syn, quad);
448  config.values[syn_on_row] = quad_config.m_switches[syn];
449  }
450  }
451  }
452  }
453 };
454 
455 
456 template <>
457 struct BackendContainerTrait<lola::vx::ColumnCurrentRow>
458  : public BackendContainerBase<
459  lola::vx::ColumnCurrentRow,
460  fisch::vx::word_access_type::Omnibus,
461  fisch::vx::word_access_type::OmnibusChipOverJTAG>
462 {};
463 
464 template <>
465 struct VisitPreorderImpl<lola::vx::ColumnCurrentRow>
466 {
468 
469  template <typename ContainerT, typename VisitorT>
470  static void call(
471  ContainerT& config,
472  typename container_type::coordinate_type const& coord,
473  VisitorT&& visitor)
474  {
475  using halco::common::iter_all;
476  using namespace halco::hicann_dls::vx;
477 
478  visitor(coord, config);
479 
480  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
481  haldls::vx::ColumnCurrentQuad quad_config;
482  for (auto const syn : iter_all<EntryOnQuad>()) {
483  SynapseOnSynapseRow const syn_on_row(syn, quad);
484  quad_config.m_switches[syn] = config.values[syn_on_row];
485  }
486  visit_preorder(
487  quad_config,
488  ColumnCurrentQuadOnDLS(quad.toColumnCurrentQuadOnSynram(), coord.toSynramOnDLS()),
489  visitor);
490  // only on alteration
491  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
492  for (auto const syn : iter_all<EntryOnQuad>()) {
493  SynapseOnSynapseRow const syn_on_row(syn, quad);
494  config.values[syn_on_row] = quad_config.m_switches[syn];
495  }
496  }
497  }
498  }
499 };
500 
501 
502 template <>
503 struct BackendContainerTrait<lola::vx::SynapseWeightRow>
504  : public BackendContainerBase<
505  lola::vx::SynapseWeightRow,
506  fisch::vx::word_access_type::Omnibus,
507  fisch::vx::word_access_type::OmnibusChipOverJTAG>
508 {};
509 
510 template <>
511 struct VisitPreorderImpl<lola::vx::SynapseWeightRow>
512 {
514 
515  template <typename ContainerT, typename VisitorT>
516  static void call(
517  ContainerT& config,
518  typename container_type::coordinate_type const& coord,
519  VisitorT&& visitor)
520  {
521  using halco::common::iter_all;
522  using namespace halco::hicann_dls::vx;
523 
524  visitor(coord, config);
525 
526  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
527  haldls::vx::SynapseWeightQuad quad_config;
528  for (auto const syn : iter_all<EntryOnQuad>()) {
529  SynapseOnSynapseRow const syn_on_row(syn, quad);
530  quad_config.m_values[syn] = config.values[syn_on_row];
531  }
532  visit_preorder(
533  quad_config,
534  SynapseWeightQuadOnDLS(
535  SynapseQuadOnSynram(quad, coord.toSynapseRowOnSynram()), coord.toSynramOnDLS()),
536  visitor);
537  // only on alteration
538  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
539  for (auto const syn : iter_all<EntryOnQuad>()) {
540  SynapseOnSynapseRow const syn_on_row(syn, quad);
541  config.values[syn_on_row] = quad_config.m_values[syn];
542  }
543  }
544  }
545  }
546 };
547 
548 
549 template <>
550 struct BackendContainerTrait<lola::vx::SynapseLabelRow>
551  : public BackendContainerBase<
552  lola::vx::SynapseLabelRow,
553  fisch::vx::word_access_type::Omnibus,
554  fisch::vx::word_access_type::OmnibusChipOverJTAG>
555 {};
556 
557 template <>
558 struct VisitPreorderImpl<lola::vx::SynapseLabelRow>
559 {
561 
562  template <typename ContainerT, typename VisitorT>
563  static void call(
564  ContainerT& config,
565  typename container_type::coordinate_type const& coord,
566  VisitorT&& visitor)
567  {
568  using halco::common::iter_all;
569  using namespace halco::hicann_dls::vx;
570 
571  visitor(coord, config);
572 
573  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
574  haldls::vx::SynapseLabelQuad quad_config;
575  for (auto const syn : iter_all<EntryOnQuad>()) {
576  SynapseOnSynapseRow const syn_on_row(syn, quad);
577  quad_config.m_values[syn] = config.values[syn_on_row];
578  }
579  visit_preorder(
580  quad_config,
581  SynapseLabelQuadOnDLS(
582  SynapseQuadOnSynram(quad, coord.toSynapseRowOnSynram()), coord.toSynramOnDLS()),
583  visitor);
584  // only on alteration
585  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
586  for (auto const syn : iter_all<EntryOnQuad>()) {
587  SynapseOnSynapseRow const syn_on_row(syn, quad);
588  config.values[syn_on_row] = quad_config.m_values[syn];
589  }
590  }
591  }
592  }
593 };
594 
595 
596 template <>
597 struct BackendContainerTrait<lola::vx::SynapseCorrelationCalibRow>
598  : public BackendContainerBase<
599  lola::vx::SynapseCorrelationCalibRow,
600  fisch::vx::word_access_type::Omnibus,
601  fisch::vx::word_access_type::OmnibusChipOverJTAG>
602 {};
603 
604 template <>
605 struct VisitPreorderImpl<lola::vx::SynapseCorrelationCalibRow>
606 {
608 
609  template <typename ContainerT, typename VisitorT>
610  static void call(
611  ContainerT& config,
612  typename container_type::coordinate_type const& coord,
613  VisitorT&& visitor)
614  {
615  using halco::common::iter_all;
616  using namespace halco::hicann_dls::vx;
617 
618  visitor(coord, config);
619 
620  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
621  haldls::vx::SynapseCorrelationCalibQuad quad_config;
622  for (auto const syn : iter_all<EntryOnQuad>()) {
623  SynapseOnSynapseRow const syn_on_row(syn, quad);
624  quad_config.m_time_calibs[syn] = config.time_calibs[syn_on_row];
625  quad_config.m_amp_calibs[syn] = config.amp_calibs[syn_on_row];
626  }
627  visit_preorder(
628  quad_config,
629  SynapseCorrelationCalibQuadOnDLS(
630  SynapseQuadOnSynram(quad, coord.toSynapseRowOnSynram()), coord.toSynramOnDLS()),
631  visitor);
632  // only on alteration
633  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
634  for (auto const syn : iter_all<EntryOnQuad>()) {
635  SynapseOnSynapseRow const syn_on_row(syn, quad);
636  config.time_calibs[syn_on_row] = quad_config.m_time_calibs[syn];
637  config.amp_calibs[syn_on_row] = quad_config.m_amp_calibs[syn];
638  }
639  }
640  }
641  }
642 };
643 
644 
645 template <>
646 struct BackendContainerTrait<lola::vx::SynapseRow>
647  : public BackendContainerBase<
648  lola::vx::SynapseRow,
649  fisch::vx::word_access_type::Omnibus,
650  fisch::vx::word_access_type::OmnibusChipOverJTAG>
651 {};
652 
653 template <>
654 struct VisitPreorderImpl<lola::vx::SynapseRow>
655 {
657 
658  template <typename ContainerT, typename VisitorT>
659  static void call(
660  ContainerT& config,
661  typename container_type::coordinate_type const& coord,
662  VisitorT&& visitor)
663  {
664  using halco::common::iter_all;
665  using namespace halco::hicann_dls::vx;
666 
667  visitor(coord, config);
668 
669  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
670  haldls::vx::SynapseQuad quad_config;
671  for (auto const syn : iter_all<EntryOnQuad>()) {
672  SynapseOnSynapseRow const syn_on_row(syn, quad);
673  quad_config.m_weights.at(syn) = config.weights[syn_on_row];
674  quad_config.m_labels.at(syn) = config.labels[syn_on_row];
675  quad_config.m_time_calibs.at(syn) = config.time_calibs[syn_on_row];
676  quad_config.m_amp_calibs.at(syn) = config.amp_calibs[syn_on_row];
677  }
678  visit_preorder(
679  quad_config,
680  SynapseQuadOnDLS(
681  SynapseQuadOnSynram(quad, coord.toSynapseRowOnSynram()), coord.toSynramOnDLS()),
682  visitor);
683  // only on alteration
684  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
685  for (auto const syn : iter_all<EntryOnQuad>()) {
686  SynapseOnSynapseRow const syn_on_row(syn, quad);
687  config.weights[syn_on_row] = quad_config.m_weights.at(syn);
688  config.labels[syn_on_row] = quad_config.m_labels.at(syn);
689  config.time_calibs[syn_on_row] = quad_config.m_time_calibs.at(syn);
690  config.amp_calibs[syn_on_row] = quad_config.m_amp_calibs.at(syn);
691  }
692  }
693  }
694  }
695 };
696 
697 
698 template <>
699 struct BackendContainerTrait<lola::vx::SynapseWeightMatrix>
700  : public BackendContainerBase<
701  lola::vx::SynapseWeightMatrix,
702  fisch::vx::word_access_type::Omnibus,
703  fisch::vx::word_access_type::OmnibusChipOverJTAG>
704 {};
705 
706 template <>
707 struct VisitPreorderImpl<lola::vx::SynapseWeightMatrix>
708 {
710 
711  template <typename ContainerT, typename VisitorT>
712  static void call(
713  ContainerT& config,
714  typename container_type::coordinate_type const& coord,
715  VisitorT&& visitor)
716  {
717  using halco::common::iter_all;
718  using namespace halco::hicann_dls::vx;
719 
720  visitor(coord, config);
721 
722  for (auto const row : iter_all<SynapseRowOnSynram>()) {
723  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
724  haldls::vx::SynapseWeightQuad quad_config;
725  for (auto const syn : iter_all<EntryOnQuad>()) {
726  SynapseOnSynapseRow const syn_on_row(syn, quad);
727  quad_config.m_values[syn] = config.values[row][syn_on_row];
728  }
729  visit_preorder(
730  quad_config,
731  SynapseWeightQuadOnDLS(SynapseQuadOnSynram(quad, row), coord.toSynramOnDLS()),
732  visitor);
733  // only on alteration
734  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
735  for (auto const syn : iter_all<EntryOnQuad>()) {
736  SynapseOnSynapseRow const syn_on_row(syn, quad);
737  config.values[row][syn_on_row] = quad_config.m_values[syn];
738  }
739  }
740  }
741  }
742  }
743 };
744 
745 template <>
746 struct BackendContainerTrait<lola::vx::SynapseLabelMatrix>
747  : public BackendContainerBase<
748  lola::vx::SynapseLabelMatrix,
749  fisch::vx::word_access_type::Omnibus,
750  fisch::vx::word_access_type::OmnibusChipOverJTAG>
751 {};
752 
753 template <>
754 struct VisitPreorderImpl<lola::vx::SynapseLabelMatrix>
755 {
757 
758  template <typename ContainerT, typename VisitorT>
759  static void call(
760  ContainerT& config,
761  typename container_type::coordinate_type const& coord,
762  VisitorT&& visitor)
763  {
764  using halco::common::iter_all;
765  using namespace halco::hicann_dls::vx;
766 
767  visitor(coord, config);
768 
769  for (auto const row : iter_all<SynapseRowOnSynram>()) {
770  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
771  haldls::vx::SynapseLabelQuad quad_config;
772  for (auto const syn : iter_all<EntryOnQuad>()) {
773  SynapseOnSynapseRow const syn_on_row(syn, quad);
774  quad_config.m_values[syn] = config.values[row][syn_on_row];
775  }
776  visit_preorder(
777  quad_config,
778  SynapseLabelQuadOnDLS(SynapseQuadOnSynram(quad, row), coord.toSynramOnDLS()),
779  visitor);
780  // only on alteration
781  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
782  for (auto const syn : iter_all<EntryOnQuad>()) {
783  SynapseOnSynapseRow const syn_on_row(syn, quad);
784  config.values[row][syn_on_row] = quad_config.m_values[syn];
785  }
786  }
787  }
788  }
789  }
790 };
791 
792 template <>
793 struct BackendContainerTrait<lola::vx::SynapseCorrelationCalibMatrix>
794  : public BackendContainerBase<
795  lola::vx::SynapseCorrelationCalibMatrix,
796  fisch::vx::word_access_type::Omnibus,
797  fisch::vx::word_access_type::OmnibusChipOverJTAG>
798 {};
799 
800 template <>
801 struct VisitPreorderImpl<lola::vx::SynapseCorrelationCalibMatrix>
802 {
804 
805  template <typename ContainerT, typename VisitorT>
806  static void call(
807  ContainerT& config,
808  typename container_type::coordinate_type const& coord,
809  VisitorT&& visitor)
810  {
811  using halco::common::iter_all;
812  using namespace halco::hicann_dls::vx;
813 
814  visitor(coord, config);
815 
816  for (auto const row : iter_all<SynapseRowOnSynram>()) {
817  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
818  haldls::vx::SynapseCorrelationCalibQuad quad_config;
819  for (auto const syn : iter_all<EntryOnQuad>()) {
820  SynapseOnSynapseRow const syn_on_row(syn, quad);
821  quad_config.m_time_calibs[syn] = config.time_calibs[row][syn_on_row];
822  quad_config.m_amp_calibs[syn] = config.amp_calibs[row][syn_on_row];
823  }
824  visit_preorder(
825  quad_config,
826  SynapseCorrelationCalibQuadOnDLS(
827  SynapseQuadOnSynram(quad, row), coord.toSynramOnDLS()),
828  visitor);
829  // only on alteration
830  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
831  for (auto const syn : iter_all<EntryOnQuad>()) {
832  SynapseOnSynapseRow const syn_on_row(syn, quad);
833  config.time_calibs[row][syn_on_row] = quad_config.m_time_calibs[syn];
834  config.amp_calibs[row][syn_on_row] = quad_config.m_amp_calibs[syn];
835  }
836  }
837  }
838  }
839  }
840 };
841 
842 template <>
843 struct BackendContainerTrait<lola::vx::SynapseMatrix>
844  : public BackendContainerBase<
845  lola::vx::SynapseMatrix,
846  fisch::vx::word_access_type::Omnibus,
847  fisch::vx::word_access_type::OmnibusChipOverJTAG>
848 {};
849 
850 template <>
851 struct VisitPreorderImpl<lola::vx::SynapseMatrix>
852 {
854 
855  template <typename ContainerT, typename VisitorT>
856  static void call(
857  ContainerT& config,
858  typename container_type::coordinate_type const& coord,
859  VisitorT&& visitor)
860  {
861  using halco::common::iter_all;
862  using namespace halco::hicann_dls::vx;
863 
864  visitor(coord, config);
865 
866  for (auto const row : iter_all<SynapseRowOnSynram>()) {
867  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
868  haldls::vx::SynapseQuad quad_config;
869  for (auto const syn : iter_all<EntryOnQuad>()) {
870  SynapseOnSynapseRow const syn_on_row(syn, quad);
871  quad_config.m_weights.at(syn) = config.weights[row][syn_on_row];
872  quad_config.m_labels.at(syn) = config.labels[row][syn_on_row];
873  quad_config.m_time_calibs.at(syn) = config.time_calibs[row][syn_on_row];
874  quad_config.m_amp_calibs.at(syn) = config.amp_calibs[row][syn_on_row];
875  }
876  visit_preorder(
877  quad_config, SynapseQuadOnDLS(SynapseQuadOnSynram(quad, row), coord), visitor);
878  // only on alteration
879  if constexpr (!std::is_same<ContainerT, container_type const>::value) {
880  for (auto const syn : iter_all<EntryOnQuad>()) {
881  SynapseOnSynapseRow const syn_on_row(syn, quad);
882  config.weights[row][syn_on_row] = quad_config.m_weights.at(syn);
883  config.labels[row][syn_on_row] = quad_config.m_labels.at(syn);
884  config.time_calibs[row][syn_on_row] = quad_config.m_time_calibs.at(syn);
885  config.amp_calibs[row][syn_on_row] = quad_config.m_amp_calibs.at(syn);
886  }
887  }
888  }
889  }
890  }
891 };
892 
893 template <>
894 struct BackendContainerTrait<lola::vx::CorrelationResetRow>
895  : public BackendContainerBase<
896  lola::vx::CorrelationResetRow,
897  fisch::vx::word_access_type::Omnibus,
898  fisch::vx::word_access_type::OmnibusChipOverJTAG>
899 {};
900 
901 template <>
902 struct VisitPreorderImpl<lola::vx::CorrelationResetRow>
903 {
904  template <typename ContainerT, typename VisitorT>
905  static void call(
906  ContainerT& config,
908  VisitorT&& visitor)
909  {
910  using halco::common::iter_all;
911  using namespace halco::hicann_dls::vx;
912 
913  visitor(coord, config);
914  haldls::vx::CorrelationReset reset_container;
915 
916  for (auto const quad : iter_all<SynapseQuadColumnOnDLS>()) {
917  SynapseQuadOnSynram const quad_on_synram(quad, coord.toSynapseRowOnSynram());
918  CorrelationResetOnDLS const reset_coord(quad_on_synram, coord.toSynramOnDLS());
919 
920  visit_preorder(reset_container, reset_coord, visitor);
921  }
922  }
923 };
924 
925 } // namespace haldls::vx::detail
926 
929 BOOST_HANA_ADAPT_STRUCT(lola::vx::SynapseRow, weights, labels, time_calibs, amp_calibs);
936 BOOST_HANA_ADAPT_STRUCT(lola::vx::SynapseMatrix, weights, labels, time_calibs, amp_calibs);
938 
939 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::ColumnCorrelationRow)
940 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::ColumnCurrentRow)
941 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseRow)
942 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseWeightRow)
943 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseLabelRow)
944 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseCorrelationCalibRow)
945 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseWeightMatrix)
946 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseLabelMatrix)
947 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseCorrelationCalibMatrix)
948 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::SynapseMatrix)
949 EXTERN_INSTANTIATE_CEREAL_SERIALIZE_FREE(lola::vx::CorrelationResetRow)
halco::hicann_dls::vx::ColumnCorrelationRowOnDLS coordinate_type
Definition: synapse.h:24
halco::common::typed_heap_array< Value, halco::hicann_dls::vx::SynapseOnSynapseRow > Values
Definition: synapse.h:29
ColumnCorrelationRow() SYMBOL_VISIBLE
std::false_type has_local_data
Definition: synapse.h:23
haldls::vx::ColumnCorrelationQuad::ColumnCorrelationSwitch Value
Definition: synapse.h:26
halco::common::typed_heap_array< Value, halco::hicann_dls::vx::SynapseOnSynapseRow > Values
Definition: synapse.h:56
haldls::vx::ColumnCurrentQuad::ColumnCurrentSwitch Value
Definition: synapse.h:53
std::false_type has_local_data
Definition: synapse.h:50
halco::hicann_dls::vx::ColumnCurrentRowOnDLS coordinate_type
Definition: synapse.h:51
ColumnCurrentRow() SYMBOL_VISIBLE
Reset correlation capacitors in all quads of a given row on synram.
Definition: synapse.h:386
halco::hicann_dls::vx::CorrelationResetRowOnDLS coordinate_type
Definition: synapse.h:389
CorrelationResetRow() SYMBOL_VISIBLE
Default constructor.
std::false_type has_local_data
Definition: synapse.h:388
halco::hicann_dls::vx::SynapseCorrelationCalibMatrixOnDLS coordinate_type
Definition: synapse.h:287
halco::common::typed_heap_array< row_type< T >, halco::hicann_dls::vx::SynapseRowOnSynram > matrix_type
Definition: synapse.h:294
haldls::vx::SynapseCorrelationCalibQuad::AmpCalib AmpCalib
Definition: synapse.h:297
row_type< AmpCalib > _amp_calibs_row_type
Definition: synapse.h:300
row_type< TimeCalib > _time_calibs_row_type
Definition: synapse.h:299
haldls::vx::SynapseCorrelationCalibQuad::TimeCalib TimeCalib
Definition: synapse.h:296
matrix_type< TimeCalib > _time_calibs_type
Definition: synapse.h:301
SynapseCorrelationCalibMatrix() SYMBOL_VISIBLE
Default constructor.
halco::common::typed_array< T, halco::hicann_dls::vx::SynapseOnSynapseRow > row_type
Definition: synapse.h:290
matrix_type< AmpCalib > _amp_calibs_type
Definition: synapse.h:302
SynapseCorrelationCalibRow() SYMBOL_VISIBLE
Default constructor.
haldls::vx::SynapseCorrelationCalibQuad::AmpCalib AmpCalib
Definition: synapse.h:136
halco::hicann_dls::vx::SynapseCorrelationCalibRowOnDLS coordinate_type
Definition: synapse.h:133
haldls::vx::SynapseCorrelationCalibQuad::TimeCalib TimeCalib
Definition: synapse.h:135
halco::common::typed_heap_array< AmpCalib, halco::hicann_dls::vx::SynapseOnSynapseRow > _amp_calibs_type
Definition: synapse.h:141
halco::common::typed_heap_array< TimeCalib, halco::hicann_dls::vx::SynapseOnSynapseRow > _time_calibs_type
Definition: synapse.h:139
SynapseLabelMatrix() SYMBOL_VISIBLE
Default constructor.
row_type< Value > _row_type
Definition: synapse.h:263
haldls::vx::SynapseLabelQuad::Value Value
Definition: synapse.h:261
halco::common::typed_heap_array< row_type< T >, halco::hicann_dls::vx::SynapseRowOnSynram > matrix_type
Definition: synapse.h:259
matrix_type< Value > _values_type
Definition: synapse.h:264
std::false_type has_local_data
Definition: synapse.h:251
halco::common::typed_array< T, halco::hicann_dls::vx::SynapseOnSynapseRow > row_type
Definition: synapse.h:255
halco::hicann_dls::vx::SynapseLabelMatrixOnDLS coordinate_type
Definition: synapse.h:252
halco::common::typed_heap_array< Value, halco::hicann_dls::vx::SynapseOnSynapseRow > _values_type
Definition: synapse.h:110
std::false_type has_local_data
Definition: synapse.h:104
SynapseLabelRow() SYMBOL_VISIBLE
Default constructor.
haldls::vx::SynapseLabelQuad::Value Value
Definition: synapse.h:107
halco::hicann_dls::vx::SynapseLabelRowOnDLS coordinate_type
Definition: synapse.h:105
row_type< Weight > _weights_row_type
Definition: synapse.h:344
std::false_type has_local_data
Definition: synapse.h:329
matrix_type< Label > _labels_type
Definition: synapse.h:350
halco::common::typed_array< T, halco::hicann_dls::vx::SynapseOnSynapseRow > row_type
Definition: synapse.h:333
halco::hicann_dls::vx::SynramOnDLS coordinate_type
Definition: synapse.h:330
matrix_type< AmpCalib > _amp_calibs_type
Definition: synapse.h:352
SynapseMatrix() SYMBOL_VISIBLE
Default constructor.
haldls::vx::SynapseQuad::TimeCalib TimeCalib
Definition: synapse.h:341
matrix_type< Weight > _weights_type
Definition: synapse.h:349
haldls::vx::SynapseQuad::Weight Weight
Definition: synapse.h:339
haldls::vx::SynapseQuad::Label Label
Definition: synapse.h:340
row_type< TimeCalib > _time_calibs_row_type
Definition: synapse.h:346
row_type< Label > _labels_row_type
Definition: synapse.h:345
haldls::vx::SynapseQuad::AmpCalib AmpCalib
Definition: synapse.h:342
matrix_type< TimeCalib > _time_calibs_type
Definition: synapse.h:351
row_type< AmpCalib > _amp_calibs_row_type
Definition: synapse.h:347
halco::common::typed_heap_array< row_type< T >, halco::hicann_dls::vx::SynapseRowOnSynram > matrix_type
Definition: synapse.h:337
halco::common::typed_heap_array< Weight, halco::hicann_dls::vx::SynapseOnSynapseRow > _weights_type
Definition: synapse.h:178
halco::common::typed_heap_array< TimeCalib, halco::hicann_dls::vx::SynapseOnSynapseRow > _time_calibs_type
Definition: synapse.h:182
haldls::vx::SynapseQuad::AmpCalib AmpCalib
Definition: synapse.h:175
SynapseRow() SYMBOL_VISIBLE
Default constructor.
halco::common::typed_heap_array< Label, halco::hicann_dls::vx::SynapseOnSynapseRow > _labels_type
Definition: synapse.h:180
haldls::vx::SynapseQuad::Label Label
Definition: synapse.h:173
haldls::vx::SynapseQuad::Weight Weight
Definition: synapse.h:172
halco::hicann_dls::vx::SynapseRowOnDLS coordinate_type
Definition: synapse.h:170
haldls::vx::SynapseQuad::TimeCalib TimeCalib
Definition: synapse.h:174
std::false_type has_local_data
Definition: synapse.h:169
halco::common::typed_heap_array< AmpCalib, halco::hicann_dls::vx::SynapseOnSynapseRow > _amp_calibs_type
Definition: synapse.h:184
haldls::vx::SynapseWeightQuad::Value Value
Definition: synapse.h:225
matrix_type< Value > _values_type
Definition: synapse.h:228
halco::common::typed_heap_array< row_type< T >, halco::hicann_dls::vx::SynapseRowOnSynram > matrix_type
Definition: synapse.h:223
std::false_type has_local_data
Definition: synapse.h:215
halco::common::typed_array< T, halco::hicann_dls::vx::SynapseOnSynapseRow > row_type
Definition: synapse.h:219
halco::hicann_dls::vx::SynapseWeightMatrixOnDLS coordinate_type
Definition: synapse.h:216
row_type< Value > _row_type
Definition: synapse.h:227
SynapseWeightMatrix() SYMBOL_VISIBLE
Default constructor.
haldls::vx::SynapseWeightQuad::Value Value
Definition: synapse.h:79
halco::hicann_dls::vx::SynapseWeightRowOnDLS coordinate_type
Definition: synapse.h:77
halco::common::typed_heap_array< Value, halco::hicann_dls::vx::SynapseOnSynapseRow > _values_type
Definition: synapse.h:82
std::false_type has_local_data
Definition: synapse.h:76
SynapseWeightRow() SYMBOL_VISIBLE
Default constructor.
#define GENPYBIND_TAG_LOLA_VX
Definition: genpybind.h:4
Definition: cadc.h:465
lola::vx::ColumnCorrelationRow ColumnCorrelationRow
Definition: synapse.h:7
lola::vx::SynapseCorrelationCalibRow SynapseCorrelationCalibRow
Definition: synapse.h:12
lola::vx::CorrelationResetRow CorrelationResetRow
Definition: synapse.h:17
lola::vx::SynapseMatrix SynapseMatrix
Definition: synapse.h:16
lola::vx::ColumnCurrentRow ColumnCurrentRow
Definition: synapse.h:8
lola::vx::SynapseWeightRow SynapseWeightRow
Definition: synapse.h:10
lola::vx::SynapseCorrelationCalibMatrix SynapseCorrelationCalibMatrix
Definition: synapse.h:15
lola::vx::SynapseWeightMatrix SynapseWeightMatrix
Definition: synapse.h:13
lola::vx::SynapseRow SynapseRow
Definition: synapse.h:9
lola::vx::SynapseLabelRow SynapseLabelRow
Definition: synapse.h:11
lola::vx::SynapseLabelMatrix SynapseLabelMatrix
Definition: synapse.h:14
Definition: dac.h:14
Definition: dac.h:14
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:423
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:470
static void call(ContainerT &config, lola::vx::CorrelationResetRow::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:905
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:806
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:610
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:759
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:563
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:856
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:659
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:712
static void call(ContainerT &config, typename container_type::coordinate_type const &coord, VisitorT &&visitor)
Definition: synapse.h:516
BOOST_HANA_ADAPT_STRUCT(lola::vx::ColumnCorrelationRow, values)