From 4f7f99166c5ccf230b51c7ba0992f68272e88e96 Mon Sep 17 00:00:00 2001
From: Simon Oehrl <oehrl@vr.rwth-aachen.de>
Date: Wed, 10 Jul 2019 16:47:44 +0200
Subject: [PATCH] Fix pynesci bindings

---
 pynesci/src/consumer/CMakeLists.txt           |  2 +-
 pynesci/src/consumer/device_data_view.hpp     |  3 +-
 .../consumer/nest_multimeter_data_view.hpp    |  2 +-
 .../src/consumer/spike_detector_data_view.hpp | 32 +++++++++----------
 4 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/pynesci/src/consumer/CMakeLists.txt b/pynesci/src/consumer/CMakeLists.txt
index 895260d..de0783f 100644
--- a/pynesci/src/consumer/CMakeLists.txt
+++ b/pynesci/src/consumer/CMakeLists.txt
@@ -34,6 +34,6 @@ add_python_module(
   HEADERS ${HEADERS}
   PYTHON_SOURCES ${PYTHON_SOURCES}
   INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}
-  LINK_LIBRARIES nesci::consumer Boost::python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} Boost::disable_autolinking
+  LINK_LIBRARIES Boost::python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} Boost::disable_autolinking conduit nesci::nesci nesci::consumer
   OUTPUT_DIRECTORY ${PYCONSUMER_OUTPUT_DIR}
   )
diff --git a/pynesci/src/consumer/device_data_view.hpp b/pynesci/src/consumer/device_data_view.hpp
index 979bec0..95872b1 100644
--- a/pynesci/src/consumer/device_data_view.hpp
+++ b/pynesci/src/consumer/device_data_view.hpp
@@ -21,6 +21,7 @@
 
 #include <string>
 
+#include "boost/python.hpp"
 #include "nesci/consumer/device_data_view.hpp"
 #include "pyconsumer.hpp"
 #include "pynesci/suppress_warnings.hpp"
@@ -32,7 +33,7 @@ SUPPRESS_WARNINGS_BEGIN
 
 void ExposeDeviceDataView() {
   class_<nesci::consumer::DeviceDataView>("DeviceDataView",
-                                          init<const conduit::Node&>())
+                                          init<const conduit::Node*>())
       .def("HasName", &nesci::consumer::DeviceDataView::HasName)
       .def("GetDeviceName", &nesci::consumer::DeviceDataView::GetName)
       .def("GetDeviceType", &nesci::consumer::DeviceDataView::GetType);
diff --git a/pynesci/src/consumer/nest_multimeter_data_view.hpp b/pynesci/src/consumer/nest_multimeter_data_view.hpp
index 886c830..cfd3b7b 100644
--- a/pynesci/src/consumer/nest_multimeter_data_view.hpp
+++ b/pynesci/src/consumer/nest_multimeter_data_view.hpp
@@ -87,7 +87,7 @@ boost::python::list GetNestMultimeterFloatingPointAttributeValues(
 void ExposeNestMultimeterDataView() {
   class_<nesci::consumer::NestMultimeterDataView,
          bases<nesci::consumer::DeviceDataView>>("NestMultimeterDataView",
-                                                 init<const conduit::Node&>())
+                                                 init<const conduit::Node*>())
       .def("IsValid", &nesci::consumer::NestMultimeterDataView::IsValid)
       .def("GetTimestep", &nesci::consumer::NestMultimeterDataView::GetTimestep)
       .def("GetNeuronIds",
diff --git a/pynesci/src/consumer/spike_detector_data_view.hpp b/pynesci/src/consumer/spike_detector_data_view.hpp
index e192e3e..f44c863 100644
--- a/pynesci/src/consumer/spike_detector_data_view.hpp
+++ b/pynesci/src/consumer/spike_detector_data_view.hpp
@@ -30,35 +30,35 @@ namespace consumer {
 
 SUPPRESS_WARNINGS_BEGIN
 
-boost::python::object IsSpikeDetectorValid(
-    nesci::consumer::DeviceDataView* spike_detector) {
-  return static_cast<boost::python::object>(spike_detector->IsValid());
-}
-
 boost::python::list GetSpikeDetectorTimesteps(
-    nesci::consumer::DeviceDataView* spike_detector) {
+    nesci::consumer::SpikeDetectorDataView* spike_detector) {
   boost::python::list ret_val;
-  for (const auto& data : spike_detector->GetTimesteps()) {
-    ret_val.append(data);
+  const auto timesteps = spike_detector->GetTimesteps();
+  for (conduit::index_t i = 0, count = timesteps.number_of_elements();
+       i < count; ++i) {
+    ret_val.append(timesteps[i]);
   }
   return ret_val;
 }
 
 boost::python::list GetSpikeDetectorNeuronIds(
-    nesci::consumer::DeviceDataView* spike_detector) {
+    nesci::consumer::SpikeDetectorDataView* spike_detector) {
   boost::python::list ret_val;
-  for (const auto& data : spike_detector->GetNeuronIds()) {
-    ret_val.append(data);
+  const auto neuron_ids = spike_detector->GetNeuronIds();
+  for (conduit::index_t i = 0, count = neuron_ids.number_of_elements();
+       i < count; ++i) {
+    ret_val.append(neuron_ids[i]);
   }
   return ret_val;
 }
 
 void ExposeSpikeDetectorDataView() {
-  class_<nesci::consumer::SpikeDetectorDataView>(
-      "SpikeDetectorDataView", init<const conduit::Node & node>())
-      .def("IsSpikeDetectorValid", &IsValid)
-      .def("GetSpikeDetectorTimesteps", &GetTimesteps)
-      .def("GetSpikeDetectorNeuronIds", &GetNeuronIds);
+  class_<nesci::consumer::SpikeDetectorDataView,
+         bases<nesci::consumer::DeviceDataView>>("SpikeDetectorDataView",
+                                                 init<const conduit::Node*>())
+      .def("IsValid", &nesci::consumer::SpikeDetectorDataView::IsValid)
+      .def("GetTimesteps", &GetSpikeDetectorTimesteps)
+      .def("GetNeuronIds", &GetSpikeDetectorNeuronIds);
 }
 
 SUPPRESS_WARNINGS_END
-- 
GitLab