* tidy up and simplify python/cython/pypi setup and directory structure
* rename python modules with consistent nomenclature (breaking changes!)
This commit is contained in:
4
python/MANIFEST.in
Normal file
4
python/MANIFEST.in
Normal file
@@ -0,0 +1,4 @@
|
||||
include lib/*.hpp
|
||||
include *.cpp
|
||||
include *.pyx
|
||||
include *.pxd
|
35
python/TDMtermite.pxd
Normal file
35
python/TDMtermite.pxd
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
# use some C++ STL libraries
|
||||
from libcpp.string cimport string
|
||||
from libcpp.vector cimport vector
|
||||
from libcpp cimport bool
|
||||
|
||||
cdef extern from "lib/tdm_termite.cpp":
|
||||
pass
|
||||
|
||||
cdef extern from "lib/tdm_termite.hpp":
|
||||
|
||||
cdef cppclass cpptdmtermite "tdm_termite":
|
||||
|
||||
# constructor(s)
|
||||
cpptdmtermite() except +
|
||||
cpptdmtermite(string tdmfile, string tdxfile) except +
|
||||
|
||||
# provide TDM files
|
||||
void submit_files(string tdmfile, string tdxfile) except+
|
||||
|
||||
# get list of channel(-group) ids
|
||||
vector[string] get_channelgroup_ids() except+
|
||||
vector[string] get_channel_ids() except+
|
||||
|
||||
# get data of specific channel
|
||||
vector[double] get_channel_as_double(string id) except+
|
||||
|
||||
# get meta-data
|
||||
string get_channelgroup_info(string id) except+
|
||||
string get_channel_info(string id) except+
|
||||
|
||||
# print a channel(-group)
|
||||
void print_group(string id, const char* filename, bool include_meta,
|
||||
char delimiter, string column_header) except+
|
||||
void print_channel(string id, const char* filename, bool include_meta) except+
|
52
python/TDMtermite.pyx
Normal file
52
python/TDMtermite.pyx
Normal file
@@ -0,0 +1,52 @@
|
||||
# distutils: language = c++
|
||||
# cython: language_level = 3
|
||||
|
||||
from TDMtermite cimport cpptdmtermite
|
||||
|
||||
import json as jn
|
||||
|
||||
cdef class tdmtermite:
|
||||
|
||||
# C++ instance of class => stack allocated (requires nullary constructor!)
|
||||
cdef cpptdmtermite cpptdm
|
||||
|
||||
# constructor
|
||||
def __cinit__(self, string tdmfile, string tdxfile):
|
||||
self.cpptdm = cpptdmtermite(tdmfile,tdxfile)
|
||||
|
||||
# provide TDM files
|
||||
def submit_files(self,string tdmfile, string tdxfile):
|
||||
self.cpptdm.submit_files(tdmfile,tdxfile)
|
||||
|
||||
# get list of channel(-group) ids
|
||||
def get_channelgroup_ids(self):
|
||||
return self.cpptdm.get_channelgroup_ids()
|
||||
def get_channel_ids(self):
|
||||
return self.cpptdm.get_channel_ids()
|
||||
|
||||
# get data of specific channel
|
||||
def get_channel(self, string id):
|
||||
return self.cpptdm.get_channel_as_double(id)
|
||||
|
||||
# get meta-data of channel(-group) (as dictionary)
|
||||
def get_channelgroup_info(self, string id):
|
||||
grpstr = self.cpptdm.get_channelgroup_info(id)
|
||||
return jn.loads(grpstr.decode())
|
||||
def get_channel_info(self, string id):
|
||||
chnstr = self.cpptdm.get_channel_info(id)
|
||||
return jn.loads(chnstr.decode())
|
||||
|
||||
# print a channel(-group)
|
||||
def print_channelgroup(self, string id, const char* filename, bool include_meta,
|
||||
char delimiter, string column_header):
|
||||
self.cpptdm.print_group(id,filename,include_meta,delimiter,column_header)
|
||||
def print_channel(self, string id, const char* filename,
|
||||
bool include_meta):
|
||||
self.cpptdm.print_channel(id,filename,include_meta)
|
||||
|
||||
# print all data grouped by channelgroups
|
||||
def write_all(self, string outputdir) :
|
||||
grpids = self.cpptdm.get_channelgroup_ids()
|
||||
for id in grpids :
|
||||
grpfile = outputdir.decode() + "/channelgroup_" + id.decode() + ".csv"
|
||||
self.cpptdm.print_group(id,grpfile.encode(),True,ord(','),"".encode())
|
1
python/VERSION
Normal file
1
python/VERSION
Normal file
@@ -0,0 +1 @@
|
||||
1.0.6
|
@@ -1,11 +1,11 @@
|
||||
|
||||
import tdm_termite
|
||||
import TDMtermite
|
||||
import json
|
||||
import re
|
||||
|
||||
# create 'tdm_termite' instance object
|
||||
try :
|
||||
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||
jack = TDMtermite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||
except RuntimeError as e :
|
||||
print("failed to load/decode TDM files: " + str(e))
|
||||
|
@@ -1,9 +1,9 @@
|
||||
|
||||
import tdm_termite
|
||||
import TDMtermite
|
||||
|
||||
# create 'tdm_termite' instance object
|
||||
try :
|
||||
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||
jack = TDMtermite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||
# list ids of channelgroups
|
||||
grpids = jack.get_channelgroup_ids()
|
||||
# iterate through groups
|
@@ -1,12 +1,12 @@
|
||||
|
||||
import tdm_termite
|
||||
import TDMtermite
|
||||
# import numpy as np
|
||||
import json
|
||||
import re
|
||||
|
||||
# create 'tdm_termite' instance object
|
||||
try :
|
||||
jack = tdm_termite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||
jack = TDMtermite.tdmtermite(b'samples/SineData.tdm',b'samples/SineData.tdx')
|
||||
except RuntimeError as e :
|
||||
print("failed to load/decode TDM files: " + str(e))
|
||||
|
60
python/makefile
Normal file
60
python/makefile
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
setup:
|
||||
cat ../README.md | grep '^# TDMtermite' -A 50000 > ./README.md
|
||||
#pandoc -f markdown -t rst -o README.rst README.md
|
||||
#python -m rstvalidator README.rst
|
||||
cp -r ../lib ./
|
||||
cp -r ../3rdparty ./
|
||||
cp -v ../LICENSE ./
|
||||
|
||||
setup-clean:
|
||||
rm -vf README.md README.rst LICENSE
|
||||
rm -rf lib/ 3rdparty/
|
||||
|
||||
build: setup
|
||||
python setup.py build
|
||||
|
||||
build-inplace: setup
|
||||
python setup.py build_ext --inplace
|
||||
|
||||
build-install: setup
|
||||
python setup.py install
|
||||
|
||||
build-sdist: setup
|
||||
python setup.py sdist
|
||||
python -m twine check dist/*
|
||||
|
||||
build-bdist: setup
|
||||
python setup.py bdist
|
||||
python -m twine check dist/*
|
||||
|
||||
build-clean:
|
||||
python setup.py clean --all
|
||||
rm -vf TDMtermite*.so TDMtermite*.cpp
|
||||
rm -rvf dist/ IMCtermite.egg-info/
|
||||
|
||||
cibuildwheel-build: setup
|
||||
cibuildwheel --platform linux
|
||||
|
||||
cibuildwheel-clean:
|
||||
rm -rvf wheelhouse/
|
||||
|
||||
pypi-audit:
|
||||
auditwheel repair $(shell find dist/ -name "*-linux_x86_64.whl")
|
||||
|
||||
# username: __token__
|
||||
# password: API-token including "pypi-"
|
||||
pypi-upload-test:
|
||||
python -m twine upload --repository testpypi dist/$(shell ls -t dist/ | head -n1)
|
||||
|
||||
pypi-install-test:
|
||||
python -m pip install --index-url https://test.pypi.org/simple --no-deps TDMtermite-RecordEvolution
|
||||
# python3 -m pip install -i https://test.pypi.org/simple/ TDMtermite-RecordEvolution==0.5
|
||||
|
||||
pypi-upload:
|
||||
python -m twine upload dist/$(shell ls -t dist/ | head -n1)
|
||||
|
||||
clean: setup build-clean cibuildwheel-clean setup-clean
|
||||
|
||||
run-example:
|
||||
PYTHONPATH=$(pwd) python examples/usage.py
|
6
python/pyproject.toml
Normal file
6
python/pyproject.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[build-system]
|
||||
requires = ["setuptools", "wheel","Cython"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.cibuildwheel]
|
||||
before-all = ""
|
23
python/setup.cfg
Normal file
23
python/setup.cfg
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
[metadata]
|
||||
name = TDMtermite
|
||||
description = Extract and read data from National Instruments LabVIEW tdx/tdm files and export them as csv files
|
||||
long_description = file: README.md
|
||||
# long_description_content_type = text/x-rst
|
||||
long_description_content_type = text/markdown
|
||||
version = file: VERSION
|
||||
author = Record Evolution GmbH
|
||||
author_email = mario.fink@record-evolution.de
|
||||
maintainer = Record Evolution GmbH
|
||||
url= https://github.com/RecordEvolution/TDMtermite.git
|
||||
license = MIT License
|
||||
license_files = LICENSE
|
||||
keywords = TDM, TDX, National Instruments, DIAdem, LabVIEW, Measurement Studio, SignalExpress
|
||||
classifiers =
|
||||
Programming Language :: Python :: 3
|
||||
License :: OSI Approved :: MIT License
|
||||
Operating System :: OS Independent
|
||||
Topic :: Scientific/Engineering
|
||||
Topic :: Software Development :: Libraries :: Python Modules
|
||||
|
||||
[options]
|
23
python/setup.py
Normal file
23
python/setup.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from setuptools import Extension, setup
|
||||
from Cython.Build import cythonize
|
||||
import sys
|
||||
|
||||
print("building on platform: "+sys.platform)
|
||||
|
||||
cmpArgs = {
|
||||
"linux": ['-std=c++17','-Wno-unused-variable'],
|
||||
"darwin": ['-std=c++17','-Wno-unused-variable'],
|
||||
"win32": ['/EHsc','/std:c++17']
|
||||
}
|
||||
|
||||
extension = Extension(
|
||||
"TDMtermite",
|
||||
language='c++',
|
||||
sources=["TDMtermite.pyx"],
|
||||
include_dirs=["lib","3rdparty/pugixml"],
|
||||
extra_compile_args=cmpArgs[sys.platform]
|
||||
)
|
||||
|
||||
setup(
|
||||
ext_modules=cythonize(extension,language_level=3)
|
||||
)
|
Reference in New Issue
Block a user