cython setup imc_termite pytho module

This commit is contained in:
Mario Fink 2021-02-12 11:30:16 +01:00
parent 3d9305a1be
commit dd78b37290
7 changed files with 79 additions and 30 deletions

2
.gitignore vendored
View File

@ -10,7 +10,7 @@ nohup.out
raw_eater.cpp
raw_meat.cpp
cyt/*.cpp
cython/*.cpp
/build
*.log

18
cython/imc_termite.pxd Normal file
View File

@ -0,0 +1,18 @@
# cython: language_level = 3
# use some C++ STL libraries
from libcpp.string cimport string
from libcpp.vector cimport vector
from libcpp cimport bool
cdef extern from "imc_raw.hpp" namespace "imc":
cdef cppclass imc_termite "imc::raw":
# constructor(s)
imc_termite() except +
imc_termite(string rawfile) except +
# provide raw file
void submit_file(string rawfile) except+
# get JSON list of channels
vector[string] get_channels() except+
# print all channels
void print_channels(string outputdir) except+

27
cython/py_imc_termite.pyx Normal file
View File

@ -0,0 +1,27 @@
# distutils: language = c++
from imc_termite cimport imc_termite
import json as jn
# import numpy as np
cdef class imctermite:
# C++ instance of class => stack allocated (requires nullary constructor!)
cdef imc_termite cpp_imc
# constructor
def __cinit__(self, string rawfile):
self.cpp_imc = imc_termite(rawfile)
# provide raw file
def submit_file(self,string rawfile):
self.cpp_tdm.set_file(rawfile)
# get JSON list of channels
def get_channels(self, bool data):
return self.cpp_imc.get_channels()
# print a channels
def print_channel(self, string outputdir):
self.cpp_tdm.print_channels(outputdir)

24
cython/setup.py Normal file
View File

@ -0,0 +1,24 @@
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
extensions = Extension(
name="imc_termite",
sources=["cython/py_imc_termite.pyx"],
# libraries=[""],
# library_dirs=["lib"],
include_dirs=["lib"],
language='c++',
extra_compile_args=['-std=c++17','-Wno-unused-variable'],
extra_link_args=['-std=c++17'],
)
setup(
version='0.1',
description='IMCtermite cython extension',
author='Record Evolution GmbH',
author_email='mario.fink@record-evolution.de',
url='https://github.com/RecordEvolution/IMCtermite.git',
name="imc_termite",
ext_modules=cythonize(extensions)
)

View File

@ -5,6 +5,7 @@
#include <fstream>
#include <filesystem>
#include <iostream>
#include "hexshow.hpp"
#include "imc_key.hpp"

View File

@ -58,36 +58,14 @@ docker-build :
docker-run:
docker run -it --rm imctermite:0.1 /bin/bash
# # build CLI executable
# $(EXE) : $(SRC)main.cpp $(LIB)raweat.hpp $(LIB)hexshow.hpp $(LIB)rawmerge.hpp output
# $(CCC) $(OPT) $< -o $@
#-----------------------------------------------------------------------------#
# python
# # development version
# eatdev : $(SRC)main_dev.cpp $(LIB)raweat.hpp
# $(CCC) $(OPT) $< -o $@
#
# # build target for conversion set of .raw files
# eatall : $(SRC)eatall.cpp $(LIB)raweat.hpp
# $(CCC) $(OPT) $< -o $@
# check existence of name of executable globally
# chexe:=$(shell command -v $(EXE))
#
# # install executable if name does not exist yet
# install : $(EXE)
# ifeq ($(chexe),)
# cp $(EXE) /usr/local/bin/
# else
# @echo "executable with name already exists! choose different name!"
# @exit 1
# endif
# # uninstall
# uninstall :
# rm /usr/local/bin/$(EXE)
cython-build : $(CYT)setup.py $(CYT)imc_termite.pxd $(CYT)py_imc_termite.pyx $(HPP)
python3 $< build_ext --inplace
#-----------------------------------------------------------------------------#
# Python
# Python (to be removed)
# build python module
py : $(CYT)setup_raw_eater.py $(CYT)raw_eater.pyx $(CYT)raw_eater.pxd $(LIB)raweat.hpp \

View File

@ -1,10 +1,11 @@
//---------------------------------------------------------------------------//
#include <iostream>
#include <vector>
#include <filesystem>
#include "imc_key.hpp"
#include "imc_block.hpp"
// #include "imc_key.hpp"
// #include "imc_block.hpp"
#include "imc_raw.hpp"
//---------------------------------------------------------------------------//