From 1ec81cafe696f3d13ebe85beeca5312bf61bf717 Mon Sep 17 00:00:00 2001 From: Mario Fink Date: Mon, 25 Jan 2021 18:18:39 +0100 Subject: [PATCH] initialize cython interface for tdm_reaper --- cython/setup.py | 10 +++++----- cython/tdm_reaper.pxd | 29 +++++++++++++++++++++++++++ cython/tdm_reaper.pyx | 46 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 cython/tdm_reaper.pxd create mode 100644 cython/tdm_reaper.pyx diff --git a/cython/setup.py b/cython/setup.py index 1a7e79e..8ccff2b 100644 --- a/cython/setup.py +++ b/cython/setup.py @@ -3,17 +3,17 @@ from distutils.extension import Extension from Cython.Build import cythonize extensions = Extension( - name="tdm_ripper", - sources=["pytdm_ripper.pyx"], + name="tdm_reaper", + sources=["cython/tdm_reaper.pyx"], # libraries=[""], library_dirs=["lib"], include_dirs=["lib"], language='c++', - extra_compile_args=['-std=c++11','-Wno-unused-variable'], - extra_link_args=['-std=c++11'], + extra_compile_args=['-std=c++17','-Wno-unused-variable'], + extra_link_args=['-std=c++17'], ) setup( - name="tdm_ripper", + name="tdm_reaper", ext_modules=cythonize(extensions) ) diff --git a/cython/tdm_reaper.pxd b/cython/tdm_reaper.pxd new file mode 100644 index 0000000..bdbb3de --- /dev/null +++ b/cython/tdm_reaper.pxd @@ -0,0 +1,29 @@ +# cython: language_level = 3 +# distutils: language = c++ + +# use some C++ STL libraries +from libcpp.string cimport string +from libcpp.vector cimport vector +from libcpp cimport bool + +cdef extern from "../lib/tdm_reaper.hpp": + cdef cppclass raw_eater: + # constructor(s) + raw_eater() except + + # set new file for decoding + # void set_file(string) + # # perform conversion (pass any C++ exceptions to Python) + # void setup_and_conversion() except + + # # get validity of data format + # bool get_valid() + # # get channel name and unit + # string get_name() + # string get_unit() + # # get time step and time unit + # double get_dt() + # string get_temp_unit() + # # get data array of time and measured quantity's channel + # vector[double] get_time() + # vector[double] get_data() + # # dump all data to .csv + # void write_table(const char*,char delimiter) diff --git a/cython/tdm_reaper.pyx b/cython/tdm_reaper.pyx new file mode 100644 index 0000000..482ae31 --- /dev/null +++ b/cython/tdm_reaper.pyx @@ -0,0 +1,46 @@ + +from tdm_reaper cimport tdmreaper +import numpy as np +import re +import os + +cdef class tdmripper: + + # C++ instance of class => stack allocated (requires nullary constructor!) + cdef tdm_reaper tdminst + + # constructor + def __cinit__(self): + self.tdminst = tdm_reaper() + + # def set_file(self, string rawfile): + # if not os.path.isfile(rawfile) : + # raise ValueError("'" + str(rawfile) + "' does not exist") + # self.rawit.set_file(rawfile) + # + # def do_conversion(self): + # self.rawit.setup_and_conversion() + # + # def validity(self): + # return self.rawit.get_valid() + # + # def channel_name(self): + # return self.rawit.get_name() + # + # def unit(self): + # return self.rawit.get_unit() + # + # def dt(self): + # return self.rawit.get_dt() + # + # def time_unit(self): + # return self.rawit.get_temp_unit() + # + # def get_time(self): + # return self.rawit.get_time() + # + # def get_channel(self): + # return self.rawit.get_data() + # + # def write_table(self, const char* csvfile, char delimiter): + # self.rawit.write_table(csvfile,delimiter)