##// END OF EJS Templates
Fixed bug range diff, the upper range was wrong, tstart and tstop...
Fixed bug range diff, the upper range was wrong, tstart and tstop were swapped Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r26:de55e7be9096
r33:ebdfb72336f0
Show More
CoreWrappers.cpp
126 lines | 5.1 KiB | text/x-c | CppLexer
#include <pybind11/pybind11.h>
#include <pybind11/operators.h>
#include <pybind11/embed.h>
#include <pybind11/numpy.h>
#include <pybind11/chrono.h>
#include <pybind11/functional.h>
#include <string>
#include <sstream>
#include "pywrappers_common.h"
#include "CoreWrappers.h"
#include <Data/DataSeriesType.h>
#include <Data/ScalarSeries.h>
#include <Data/VectorSeries.h>
#include <Data/Unit.h>
#include <Data/IDataProvider.h>
#include <Variable/VariableController2.h>
#include <Time/TimeController.h>
#include <Network/Downloader.h>
namespace py = pybind11;
using namespace std::chrono;
PYBIND11_MODULE(pysciqlopcore,m){
py::enum_<DataSeriesType>(m, "DataSeriesType")
.value("SCALAR", DataSeriesType::SCALAR)
.value("SPECTROGRAM", DataSeriesType::SPECTROGRAM)
.value("UNKNOWN", DataSeriesType::UNKNOWN)
.export_values();
py::class_<Unit>(m, "Unit")
.def_readwrite("name", &Unit::m_Name)
.def_readwrite("time_unit", &Unit::m_TimeUnit)
.def(py::self == py::self)
.def(py::self != py::self)
.def("__repr__",__repr__<Unit>);
py::class_<Response>(m,"Response")
.def("status_code", &Response::status_code);
py::class_<Downloader>(m,"Downloader")
.def_static("get", Downloader::get)
.def_static("getAsync", Downloader::getAsync)
.def_static("downloadFinished", Downloader::downloadFinished);
py::class_<DataSeriesIteratorValue>(m,"DataSeriesIteratorValue")
.def_property_readonly("x", &DataSeriesIteratorValue::x)
.def("value", py::overload_cast<>(&DataSeriesIteratorValue::value, py::const_))
.def("value", py::overload_cast<int>(&DataSeriesIteratorValue::value, py::const_));
py::class_<IDataSeries, std::shared_ptr<IDataSeries>>(m, "IDataSeries")
.def("nbPoints", &IDataSeries::nbPoints)
.def_property_readonly("xAxisUnit", &IDataSeries::xAxisUnit)
.def_property_readonly("yAxisUnit", &IDataSeries::yAxisUnit)
.def_property_readonly("valuesUnit", &IDataSeries::valuesUnit)
.def("__getitem__", [](IDataSeries& serie, int key) {
return *(serie.begin()+key);
}, py::is_operator())
.def("__len__", &IDataSeries::nbPoints)
.def("__iter__", [](IDataSeries& serie) {
return py::make_iterator(serie.begin(), serie.end());
}, py::keep_alive<0, 1>())
.def("__repr__",__repr__<IDataSeries>);
py::class_<ScalarSeries, std::shared_ptr<ScalarSeries>, IDataSeries>(m, "ScalarSeries")
.def("nbPoints", &ScalarSeries::nbPoints);
py::class_<VectorSeries, std::shared_ptr<VectorSeries>, IDataSeries>(m, "VectorSeries")
.def("nbPoints", &VectorSeries::nbPoints);
py::class_<IDataProvider, std::shared_ptr<IDataProvider>>(m, "IDataProvider");
py::class_<Variable,std::shared_ptr<Variable>>(m, "Variable")
.def(py::init<const QString&>())
.def_property("name", &Variable::name, &Variable::setName)
.def_property("range", &Variable::range, &Variable::setRange)
.def_property("cacheRange", &Variable::cacheRange, &Variable::setCacheRange)
.def_property_readonly("nbPoints", &Variable::nbPoints)
.def_property_readonly("dataSeries", &Variable::dataSeries)
.def("__len__", [](Variable& variable) {
auto rng = variable.dataSeries()->xAxisRange(variable.range().m_TStart,variable.range().m_TEnd);
return std::distance(rng.first,rng.second);
})
.def("__iter__", [](Variable& variable) {
auto rng = variable.dataSeries()->xAxisRange(variable.range().m_TStart,variable.range().m_TEnd);
return py::make_iterator(rng.first, rng.second);
}, py::keep_alive<0, 1>())
.def("__getitem__", [](Variable& variable, int key) {
//insane and slow!
auto rng = variable.dataSeries()->xAxisRange(variable.range().m_TStart,variable.range().m_TEnd);
if(key<0)
return *(rng.second+key);
else
return *(rng.first+key);
})
.def("__repr__",__repr__<Variable>);
py::class_<DateTimeRange>(m,"SqpRange")
//.def("fromDateTime", &DateTimeRange::fromDateTime, py::return_value_policy::move)
.def(py::init([](double start, double stop){return DateTimeRange{start, stop};}))
.def(py::init([](system_clock::time_point start, system_clock::time_point stop)
{
double start_ = 0.001 * duration_cast<milliseconds>(start.time_since_epoch()).count();
double stop_ = 0.001 * duration_cast<milliseconds>(stop.time_since_epoch()).count();
return DateTimeRange{start_, stop_};
}))
.def_property_readonly("start", [](const DateTimeRange& range){
return system_clock::from_time_t(range.m_TStart);
})
.def_property_readonly("stop", [](const DateTimeRange& range){
return system_clock::from_time_t(range.m_TEnd);
})
.def("__repr__", __repr__<DateTimeRange>);
}