Skip to content
Snippets Groups Projects
Commit cbe9d2bb authored by Carl Klemm's avatar Carl Klemm
Browse files

Inital commit of python bindings

parents
No related branches found
No related tags found
No related merge requests found
cmake_minimum_required(VERSION 3.15...3.22)
project(eisgeneratorpy VERSION "1.0")
if(SKBUILD)
# Scikit-Build does not add your site-packages to the search path
# automatically, so we need to add it _or_ the pybind11 specific directory
# here.
execute_process(
COMMAND "${PYTHON_EXECUTABLE}" -c
"import pybind11; print(pybind11.get_cmake_dir())"
OUTPUT_VARIABLE _tmp_dir
OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ECHO STDOUT)
list(APPEND CMAKE_PREFIX_PATH "${_tmp_dir}")
endif()
# Now we can find pybind11
find_package(pybind11 CONFIG REQUIRED)
pybind11_add_module(_core MODULE src/main.cpp)
target_compile_definitions(_core PRIVATE VERSION_INFO=${PROJECT_VERSION})
target_link_libraries(_core PUBLIC -leisgenerator)
install(TARGETS _core DESTINATION .)
#!/bin/python
import eisgeneratorpy as eis
def printData(data):
print('Omega, Re, Im')
for i in data:
print(f'{i.omega},{i.im.real},{i.im.imag}')
model = eis.Model("C{1e-6}R{1e3}")
eis.Log.level = eis.Log.level.DEBUG
print(f'set log level: {eis.Log.level}')
with eis.ostream_redirect(stdout=True, stderr=True):
data = model.execute(1e6)
print(data.im)
ranges = list([])
neededParameters = model.getFlatParametersCount()
for i in range(neededParameters):
ranges.append(eis.Range(1, 1000, 1000, True))
omegaRange = eis.Range(1, 1000, 25, True)
print('Ranges:')
for eisRange in ranges:
print(f'{eisRange.start} {eisRange.end} {eisRange.count}')
neededIterations = model.getRequiredStepsForSweeps(list(ranges))
print(f'will need {neededIterations} iterations')
for i in range(neededIterations):
#print(f'Spectra {i}:')
sweep = model.executeParamByIndex(ranges, omegaRange, i)
#printData(sweep)
import nox
nox.options.sessions = ["lint", "tests"]
@nox.session
def lint(session: nox.Session) -> None:
"""
Run the linter.
"""
session.install("pre-commit")
session.run("pre-commit", "run", "--all-files", *session.posargs)
@nox.session
def tests(session: nox.Session) -> None:
"""
Run the unit and regular tests.
"""
session.install(".[test]")
session.run("pytest", *session.posargs)
setup.py 0 → 100644
import sys
try:
from skbuild import setup
except ImportError:
print(
"Please update pip, you need pip 10 or greater,\n"
" or you need to install the PEP 518 requirements in pyproject.toml yourself",
file=sys.stderr,
)
raise
from setuptools import find_packages
setup(
name="eisgeneratorpy",
version="0.0.1",
description="a minimal example package (with pybind11)",
author="Henry Schreiner",
license="MIT",
packages=find_packages(where="src"),
package_dir={"": "src"},
cmake_install_dir="src/eisgeneratorpy",
include_package_data=True,
python_requires=">=3.6",
)
from ._core import __doc__, __version__, Model, DataPoint, Range, Log, ostream_redirect
#include <pybind11/pybind11.h>
#include <pybind11/complex.h>
#include <pybind11/stl.h>
#include <pybind11/stl_bind.h>
#include <pybind11/iostream.h>
#include <eisgenerator/model.h>
#include <eisgenerator/eistype.h>
#include <eisgenerator/log.h>
#include <vector>
namespace py = pybind11;
using namespace eis;
PYBIND11_MODULE(_core, m)
{
py::class_<Model>(m, "Model")
.def(py::init<const std::string&>())
.def("execute", &Model::execute)
.def("executeSweep", &Model::executeSweep)
.def("executeParamByIndex", &Model::executeParamByIndex)
.def_static("getRequiredStepsForSweeps", &Model::getRequiredStepsForSweeps)
.def("getFlatParametersCount", &Model::getFlatParametersCount);
py::class_<DataPoint>(m, "DataPoint")
.def_readwrite("omega", &DataPoint::omega)
.def_readwrite("im", &DataPoint::im);
py::class_<Range>(m, "Range")
.def(py::init<fvalue, fvalue, size_t, bool>(), py::arg("logI") = false)
.def_readwrite("start", &Range::start)
.def_readwrite("end", &Range::end)
.def_readwrite("count", &Range::count)
.def_readwrite("log", &Range::log);
py::class_<Log>(m, "Log")
.def_readwrite_static("level", &Log::level);
py::enum_<Log::Level>(m, "Level")
.value("DEBUG", Log::DEBUG)
.value("INFO", Log::INFO)
.value("WARN", Log::WARN)
.value("ERROR", Log::ERROR);
m.def("testVector", &testVector);
py::add_ostream_redirect(m, "ostream_redirect");
m.attr("__version__") = "1.0";
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment