##// END OF EJS Templates
Updated TS lib...
jeandet -
r88:4e4ec6844f70
parent child
Show More
@@ -1,1 +1,1
1 Subproject commit 315a61fe6174e66bc0a94c1c91d7b3656649873f
1 Subproject commit 16093a64038da071e4dac879fc3fd2ec9fc21c5d
@@ -1,43 +1,42
1 #ifndef SCIQLOP_SPECTROGRAMTIMESERIE_H
1 #ifndef SCIQLOP_SPECTROGRAMTIMESERIE_H
2 #define SCIQLOP_SPECTROGRAMTIMESERIE_H
2 #define SCIQLOP_SPECTROGRAMTIMESERIE_H
3
3
4 #include "CoreGlobal.h"
4 #include "CoreGlobal.h"
5
5
6 #include <TimeSeries.h>
6 #include <TimeSeries.h>
7 #include <cmath>
7 #include <cmath>
8
8
9 class SCIQLOP_CORE_EXPORT SpectrogramTimeSerie
9 class SCIQLOP_CORE_EXPORT SpectrogramTimeSerie
10 : public TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>
10 : public TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>
11 {
11 {
12 public:
12 public:
13 double min_sampling = std::nan("");
13 double min_sampling = std::nan("");
14 double max_sampling = std::nan("");
14 double max_sampling = std::nan("");
15 bool y_is_log = true;
15 bool y_is_log = true;
16 using item_t =
16 using item_t =
17 decltype(std::declval<
17 decltype(std::declval<
18 TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>>()[0]);
18 TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>>()[0]);
19
19
20 using iterator_t = decltype(
20 using iterator_t = decltype(
21 std::declval<TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>>()
21 std::declval<TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>>()
22 .begin());
22 .begin());
23
23
24 SpectrogramTimeSerie() {}
24 SpectrogramTimeSerie() {}
25 SpectrogramTimeSerie(SpectrogramTimeSerie::axis_t&& t,
25 SpectrogramTimeSerie(SpectrogramTimeSerie::axis_t&& t,
26 SpectrogramTimeSerie::axis_t&& y,
26 SpectrogramTimeSerie::axis_t&& y,
27 SpectrogramTimeSerie::container_type<
27 SpectrogramTimeSerie::data_t&& values,
28 SpectrogramTimeSerie::raw_value_type>&& values,
29 std::vector<std::size_t>& shape, double min_sampling,
28 std::vector<std::size_t>& shape, double min_sampling,
30 double max_sampling, bool y_is_log = true)
29 double max_sampling, bool y_is_log = true)
31 : TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>(t, values,
30 : TimeSeries::TimeSerie<double, SpectrogramTimeSerie, 2>(t, values,
32 shape),
31 shape),
33 min_sampling{min_sampling}, max_sampling{max_sampling}, y_is_log{
32 min_sampling{min_sampling}, max_sampling{max_sampling}, y_is_log{
34 y_is_log}
33 y_is_log}
35 {
34 {
36 _axes[1] = y;
35 _axes[1] = y;
37 }
36 }
38
37
39 ~SpectrogramTimeSerie() = default;
38 ~SpectrogramTimeSerie() = default;
40 using TimeSerie::TimeSerie;
39 using TimeSerie::TimeSerie;
41 };
40 };
42
41
43 #endif // SCIQLOP_SPECTROGRAMTIMESERIE_H
42 #endif // SCIQLOP_SPECTROGRAMTIMESERIE_H
@@ -1,302 +1,297
1 #include "CoreWrappers.h"
1 #include "CoreWrappers.h"
2
2
3 #include "pywrappers_common.h"
3 #include "pywrappers_common.h"
4
4
5 #include <Common/debug.h>
5 #include <Common/debug.h>
6 #include <Data/DataSeriesType.h>
6 #include <Data/DataSeriesType.h>
7 #include <Data/IDataProvider.h>
7 #include <Data/IDataProvider.h>
8 #include <Network/Downloader.h>
8 #include <Network/Downloader.h>
9 #include <Time/TimeController.h>
9 #include <Time/TimeController.h>
10 #include <Variable/Variable2.h>
10 #include <Variable/Variable2.h>
11 #include <Variable/VariableController2.h>
11 #include <Variable/VariableController2.h>
12 #include <pybind11/chrono.h>
12 #include <pybind11/chrono.h>
13 #include <pybind11/embed.h>
13 #include <pybind11/embed.h>
14 #include <pybind11/functional.h>
14 #include <pybind11/functional.h>
15 #include <pybind11/numpy.h>
15 #include <pybind11/numpy.h>
16 #include <pybind11/operators.h>
16 #include <pybind11/operators.h>
17 #include <pybind11/pybind11.h>
17 #include <pybind11/pybind11.h>
18 #include <pybind11/stl.h>
18 #include <pybind11/stl.h>
19 #include <pybind11/stl_bind.h>
19 #include <pybind11/stl_bind.h>
20 #include <sstream>
20 #include <sstream>
21 #include <string>
21 #include <string>
22
22
23 namespace py = pybind11;
23 namespace py = pybind11;
24 using namespace std::chrono;
24 using namespace std::chrono;
25
25
26 template<typename T, typename U, bool row_major = true>
26 template<typename T, typename U, bool row_major = true>
27 void copy_vector(py::array_t<double>& t, py::array_t<double>& values, T& dest_t,
27 void copy_vector(py::array_t<double>& t, py::array_t<double>& values, T& dest_t,
28 U& dest_values)
28 U& dest_values)
29 {
29 {
30 auto t_view = t.unchecked<1>();
30 auto t_view = t.unchecked<1>();
31 auto values_view = values.unchecked<2>();
31 auto values_view = values.unchecked<2>();
32 for(std::size_t i = 0; i < t.size(); i++)
32 for(std::size_t i = 0; i < t.size(); i++)
33 {
33 {
34 dest_t[i] = t_view[i];
34 dest_t[i] = t_view[i];
35 dest_values[i] = {values_view(i, 0), values_view(i, 1), values_view(i, 2)};
35 dest_values[i] = {values_view(i, 0), values_view(i, 1), values_view(i, 2)};
36 }
36 }
37 }
37 }
38
38
39 template<typename T, typename U>
39 template<typename T, typename U>
40 void copy_scalar(py::array_t<double>& t, py::array_t<double>& values, T& dest_t,
40 void copy_scalar(py::array_t<double>& t, py::array_t<double>& values, T& dest_t,
41 U& dest_values)
41 U& dest_values)
42 {
42 {
43 auto t_view = t.unchecked<1>();
43 auto t_view = t.unchecked<1>();
44 if(values.ndim() == 1)
44 if(values.ndim() == 1)
45 {
45 {
46 auto values_view = values.unchecked<1>();
46 auto values_view = values.unchecked<1>();
47 for(std::size_t i = 0; i < t.size(); i++)
47 for(std::size_t i = 0; i < t.size(); i++)
48 {
48 {
49 dest_t[i] = t_view[i];
49 dest_t[i] = t_view[i];
50 dest_values[i] = values_view[i];
50 dest_values[i] = values_view[i];
51 }
51 }
52 }
52 }
53 else if(values.ndim() == 2 && values.shape(1) == 1)
53 else if(values.ndim() == 2 && values.shape(1) == 1)
54 {
54 {
55 auto values_view = values.unchecked<2>();
55 auto values_view = values.unchecked<2>();
56 for(std::size_t i = 0; i < t.size(); i++)
56 for(std::size_t i = 0; i < t.size(); i++)
57 {
57 {
58 dest_t[i] = t_view[i];
58 dest_t[i] = t_view[i];
59 dest_values[i] = values_view(i, 0);
59 dest_values[i] = values_view(i, 0);
60 }
60 }
61 }
61 }
62 }
62 }
63 template<typename T, typename U>
63 template<typename T, typename U>
64 void copy_multicomp(py::array_t<double>& t, py::array_t<double>& values,
64 void copy_multicomp(py::array_t<double>& t, py::array_t<double>& values,
65 T& dest_t, U& dest_values)
65 T& dest_t, U& dest_values)
66 {
66 {
67 auto t_view = t.unchecked<1>();
67 auto t_view = t.unchecked<1>();
68 auto values_view = values.unchecked<2>();
68 auto values_view = values.unchecked<2>();
69 const auto width = values.shape(1);
69 const auto width = values.shape(1);
70 for(std::size_t i = 0; i < t.size(); i++)
70 for(std::size_t i = 0; i < t.size(); i++)
71 {
71 {
72 dest_t[i] = t_view[i];
72 dest_t[i] = t_view[i];
73 for(int j = 0; j < width; j++)
73 for(int j = 0; j < width; j++)
74 {
74 {
75 dest_values[i * width + j] = values_view(i, j);
75 dest_values[i * width + j] = values_view(i, j);
76 }
76 }
77 }
77 }
78 }
78 }
79
79
80 template<typename T, typename U>
80 template<typename T, typename U>
81 void copy_spectro(py::array_t<double>& t, py::array_t<double>& y,
81 void copy_spectro(py::array_t<double>& t, py::array_t<double>& y,
82 py::array_t<double>& values, T& dest_t, T& dest_y,
82 py::array_t<double>& values, T& dest_t, T& dest_y,
83 U& dest_values)
83 U& dest_values)
84 {
84 {
85 auto t_view = t.unchecked<1>();
85 auto t_view = t.unchecked<1>();
86 auto y_view = y.unchecked<1>();
86 auto y_view = y.unchecked<1>();
87 auto values_view = values.unchecked<2>();
87 auto values_view = values.unchecked<2>();
88 const auto width = values.shape(1);
88 const auto width = values.shape(1);
89 for(std::size_t i = 0; i < y.size(); i++)
89 for(std::size_t i = 0; i < y.size(); i++)
90 {
90 {
91 dest_y[i] = y_view[i];
91 dest_y[i] = y_view[i];
92 }
92 }
93 for(std::size_t i = 0; i < t.size(); i++)
93 for(std::size_t i = 0; i < t.size(); i++)
94 {
94 {
95 dest_t[i] = t_view[i];
95 dest_t[i] = t_view[i];
96 for(int j = 0; j < width; j++)
96 for(int j = 0; j < width; j++)
97 {
97 {
98 dest_values[i * width + j] = values_view(i, j);
98 dest_values[i * width + j] = values_view(i, j);
99 }
99 }
100 }
100 }
101 }
101 }
102
102
103 PYBIND11_MODULE(pysciqlopcore, m)
103 PYBIND11_MODULE(pysciqlopcore, m)
104 {
104 {
105 pybind11::bind_vector<std::vector<double>>(m, "VectorDouble");
105 pybind11::bind_vector<std::vector<double>>(m, "VectorDouble");
106
106
107 py::enum_<DataSeriesType>(m, "DataSeriesType")
107 py::enum_<DataSeriesType>(m, "DataSeriesType")
108 .value("SCALAR", DataSeriesType::SCALAR)
108 .value("SCALAR", DataSeriesType::SCALAR)
109 .value("SPECTROGRAM", DataSeriesType::SPECTROGRAM)
109 .value("SPECTROGRAM", DataSeriesType::SPECTROGRAM)
110 .value("VECTOR", DataSeriesType::VECTOR)
110 .value("VECTOR", DataSeriesType::VECTOR)
111 .value("MULTICOMPONENT", DataSeriesType::MULTICOMPONENT)
111 .value("MULTICOMPONENT", DataSeriesType::MULTICOMPONENT)
112 .value("NONE", DataSeriesType::NONE)
112 .value("NONE", DataSeriesType::NONE)
113 .export_values();
113 .export_values();
114
114
115 py::class_<Response>(m, "Response")
115 py::class_<Response>(m, "Response")
116 .def("status_code", &Response::status_code);
116 .def("status_code", &Response::status_code);
117
117
118 py::class_<Downloader>(m, "Downloader")
118 py::class_<Downloader>(m, "Downloader")
119 .def_static("get", Downloader::get)
119 .def_static("get", Downloader::get)
120 .def_static("getAsync", Downloader::getAsync)
120 .def_static("getAsync", Downloader::getAsync)
121 .def_static("downloadFinished", Downloader::downloadFinished);
121 .def_static("downloadFinished", Downloader::downloadFinished);
122
122
123 py::class_<IDataProvider, std::shared_ptr<IDataProvider>>(m, "IDataProvider");
123 py::class_<IDataProvider, std::shared_ptr<IDataProvider>>(m, "IDataProvider");
124
124
125 py::class_<TimeSeries::ITimeSerie, std::shared_ptr<TimeSeries::ITimeSerie>>(
125 py::class_<TimeSeries::ITimeSerie, std::shared_ptr<TimeSeries::ITimeSerie>>(
126 m, "ITimeSerie")
126 m, "ITimeSerie")
127 .def_property_readonly(
127 .def_property_readonly(
128 "size", [](const TimeSeries::ITimeSerie& ts) { return ts.size(); })
128 "size", [](const TimeSeries::ITimeSerie& ts) { return ts.size(); })
129 .def("__len__",
129 .def("__len__",
130 [](const TimeSeries::ITimeSerie& ts) { return ts.size(); })
130 [](const TimeSeries::ITimeSerie& ts) { return ts.size(); })
131 .def_property_readonly(
131 .def_property_readonly(
132 "shape", [](const TimeSeries::ITimeSerie& ts) { return ts.shape(); })
132 "shape", [](const TimeSeries::ITimeSerie& ts) { return ts.shape(); })
133 .def_property_readonly(
133 .def_property_readonly(
134 "t",
134 "t",
135 [](TimeSeries::ITimeSerie& ts) -> decltype(ts.axis(0))& {
135 [](TimeSeries::ITimeSerie& ts) -> decltype(ts.axis(0))& {
136 return ts.axis(0);
136 return ts.axis(0);
137 },
137 },
138 py::return_value_policy::reference)
138 py::return_value_policy::reference)
139 .def(
139 .def(
140 "axis",
140 "axis",
141 [](TimeSeries::ITimeSerie& ts, unsigned int index)
141 [](TimeSeries::ITimeSerie& ts, unsigned int index)
142 -> decltype(ts.axis(0))& { return ts.axis(index); },
142 -> decltype(ts.axis(0))& { return ts.axis(index); },
143 py::return_value_policy::reference);
143 py::return_value_policy::reference);
144
144
145 py::class_<ScalarTimeSerie, TimeSeries::ITimeSerie,
145 py::class_<ScalarTimeSerie, TimeSeries::ITimeSerie,
146 std::shared_ptr<ScalarTimeSerie>>(m, "ScalarTimeSerie")
146 std::shared_ptr<ScalarTimeSerie>>(m, "ScalarTimeSerie")
147 .def(py::init<>())
147 .def(py::init<>())
148 .def(py::init<std::size_t>())
148 .def(py::init<std::size_t>())
149 .def(py::init([](py::array_t<double> t, py::array_t<double> values) {
149 .def(py::init([](py::array_t<double> t, py::array_t<double> values) {
150 assert(t.size() == values.size());
150 assert(t.size() == values.size());
151 ScalarTimeSerie::axis_t _t(t.size());
151 ScalarTimeSerie::axis_t _t(t.size());
152 ScalarTimeSerie::axis_t _values(t.size());
152 ScalarTimeSerie::axis_t _values(t.size());
153 copy_scalar(t, values, _t, _values);
153 copy_scalar(t, values, _t, _values);
154 return ScalarTimeSerie(_t, _values);
154 return ScalarTimeSerie(_t, _values);
155 }))
155 }))
156 .def("__getitem__",
156 .def("__getitem__",
157 [](ScalarTimeSerie& ts, std::size_t key) { return ts[key]; })
157 [](ScalarTimeSerie& ts, std::size_t key) { return ts[key]; })
158 .def("__setitem__", [](ScalarTimeSerie& ts, std::size_t key,
158 .def("__setitem__", [](ScalarTimeSerie& ts, std::size_t key,
159 double value) { *(ts.begin() + key) = value; });
159 double value) { *(ts.begin() + key) = value; });
160
160
161 py::class_<VectorTimeSerie::raw_value_type>(m, "vector")
161 py::class_<VectorTimeSerie::raw_value_type>(m, "vector")
162 .def(py::init<>())
162 .def(py::init<>())
163 .def(py::init<double, double, double>())
163 .def(py::init<double, double, double>())
164 .def("__repr__", __repr__<VectorTimeSerie::raw_value_type>)
164 .def("__repr__", __repr__<VectorTimeSerie::raw_value_type>)
165 .def_readwrite("x", &VectorTimeSerie::raw_value_type::x)
165 .def_readwrite("x", &VectorTimeSerie::raw_value_type::x)
166 .def_readwrite("y", &VectorTimeSerie::raw_value_type::y)
166 .def_readwrite("y", &VectorTimeSerie::raw_value_type::y)
167 .def_readwrite("z", &VectorTimeSerie::raw_value_type::z);
167 .def_readwrite("z", &VectorTimeSerie::raw_value_type::z);
168
168
169 py::class_<VectorTimeSerie, TimeSeries::ITimeSerie,
169 py::class_<VectorTimeSerie, TimeSeries::ITimeSerie,
170 std::shared_ptr<VectorTimeSerie>>(m, "VectorTimeSerie")
170 std::shared_ptr<VectorTimeSerie>>(m, "VectorTimeSerie")
171 .def(py::init<>())
171 .def(py::init<>())
172 .def(py::init<std::size_t>())
172 .def(py::init<std::size_t>())
173 .def(py::init([](py::array_t<double> t, py::array_t<double> values) {
173 .def(py::init([](py::array_t<double> t, py::array_t<double> values) {
174 assert(t.size() * 3 == values.size());
174 assert(t.size() * 3 == values.size());
175 VectorTimeSerie::axis_t _t(t.size());
175 VectorTimeSerie::axis_t _t(t.size());
176 VectorTimeSerie::container_type<VectorTimeSerie::raw_value_type>
176 VectorTimeSerie::data_t _values(t.size());
177 _values(t.size());
178 copy_vector(t, values, _t, _values);
177 copy_vector(t, values, _t, _values);
179 return VectorTimeSerie(_t, _values);
178 return VectorTimeSerie(_t, _values);
180 }))
179 }))
181 .def(
180 .def(
182 "__getitem__",
181 "__getitem__",
183 [](VectorTimeSerie& ts, std::size_t key)
182 [](VectorTimeSerie& ts, std::size_t key)
184 -> VectorTimeSerie::raw_value_type& { return ts[key]; },
183 -> VectorTimeSerie::raw_value_type& { return ts[key]; },
185 py::return_value_policy::reference)
184 py::return_value_policy::reference)
186 .def("__setitem__", [](VectorTimeSerie& ts, std::size_t key,
185 .def("__setitem__", [](VectorTimeSerie& ts, std::size_t key,
187 VectorTimeSerie::raw_value_type value) {
186 VectorTimeSerie::raw_value_type value) {
188 *(ts.begin() + key) = value;
187 *(ts.begin() + key) = value;
189 });
188 });
190
189
191 py::class_<MultiComponentTimeSerie::iterator_t>(m,
190 py::class_<MultiComponentTimeSerie::iterator_t>(m,
192 "MultiComponentTimeSerieItem")
191 "MultiComponentTimeSerieItem")
193 .def("__getitem__", [](MultiComponentTimeSerie::iterator_t& self,
192 .def("__getitem__", [](MultiComponentTimeSerie::iterator_t& self,
194 std::size_t key) { return (*self)[key]; })
193 std::size_t key) { return (*self)[key]; })
195 .def("__setitem__",
194 .def("__setitem__",
196 [](MultiComponentTimeSerie::iterator_t& self, std::size_t key,
195 [](MultiComponentTimeSerie::iterator_t& self, std::size_t key,
197 double value) { (*self)[key] = value; });
196 double value) { (*self)[key] = value; });
198
197
199 py::class_<MultiComponentTimeSerie, TimeSeries::ITimeSerie,
198 py::class_<MultiComponentTimeSerie, TimeSeries::ITimeSerie,
200 std::shared_ptr<MultiComponentTimeSerie>>(
199 std::shared_ptr<MultiComponentTimeSerie>>(
201 m, "MultiComponentTimeSerie")
200 m, "MultiComponentTimeSerie")
202 .def(py::init<>())
201 .def(py::init<>())
203 .def(py::init<const std::vector<std::size_t>>())
202 .def(py::init<const std::vector<std::size_t>>())
204 .def(py::init([](py::array_t<double> t, py::array_t<double> values) {
203 .def(py::init([](py::array_t<double> t, py::array_t<double> values) {
205 assert((t.size() < values.size()) |
204 assert((t.size() < values.size()) |
206 (t.size() == 0)); // TODO check geometry
205 (t.size() == 0)); // TODO check geometry
207 MultiComponentTimeSerie::axis_t _t(t.size());
206 MultiComponentTimeSerie::axis_t _t(t.size());
208 MultiComponentTimeSerie::container_type<
207 MultiComponentTimeSerie::data_t _values(values.size());
209 MultiComponentTimeSerie::raw_value_type>
210 _values(values.size());
211 copy_multicomp(t, values, _t, _values);
208 copy_multicomp(t, values, _t, _values);
212 std::vector<std::size_t> shape;
209 std::vector<std::size_t> shape;
213 shape.push_back(values.shape(0));
210 shape.push_back(values.shape(0));
214 shape.push_back(values.shape(1));
211 shape.push_back(values.shape(1));
215 return MultiComponentTimeSerie(_t, _values, shape);
212 return MultiComponentTimeSerie(_t, _values, shape);
216 }))
213 }))
217 .def("__getitem__",
214 .def("__getitem__",
218 [](MultiComponentTimeSerie& ts,
215 [](MultiComponentTimeSerie& ts,
219 std::size_t key) -> MultiComponentTimeSerie::iterator_t {
216 std::size_t key) -> MultiComponentTimeSerie::iterator_t {
220 return ts.begin() + key;
217 return ts.begin() + key;
221 });
218 });
222
219
223 py::class_<SpectrogramTimeSerie::iterator_t>(m, "SpectrogramTimeSerieItem")
220 py::class_<SpectrogramTimeSerie::iterator_t>(m, "SpectrogramTimeSerieItem")
224 .def("__getitem__", [](SpectrogramTimeSerie::iterator_t& self,
221 .def("__getitem__", [](SpectrogramTimeSerie::iterator_t& self,
225 std::size_t key) { return (*self)[key]; })
222 std::size_t key) { return (*self)[key]; })
226 .def("__setitem__",
223 .def("__setitem__",
227 [](SpectrogramTimeSerie::iterator_t& self, std::size_t key,
224 [](SpectrogramTimeSerie::iterator_t& self, std::size_t key,
228 double value) { (*self)[key] = value; });
225 double value) { (*self)[key] = value; });
229
226
230 py::class_<SpectrogramTimeSerie, TimeSeries::ITimeSerie,
227 py::class_<SpectrogramTimeSerie, TimeSeries::ITimeSerie,
231 std::shared_ptr<SpectrogramTimeSerie>>(m, "SpectrogramTimeSerie")
228 std::shared_ptr<SpectrogramTimeSerie>>(m, "SpectrogramTimeSerie")
232 .def(py::init<>())
229 .def(py::init<>())
233 .def(py::init<const std::vector<std::size_t>>())
230 .def(py::init<const std::vector<std::size_t>>())
234 .def(py::init([](py::array_t<double> t, py::array_t<double> y,
231 .def(py::init([](py::array_t<double> t, py::array_t<double> y,
235 py::array_t<double> values, double min_sampling,
232 py::array_t<double> values, double min_sampling,
236 double max_sampling, bool y_is_log) {
233 double max_sampling, bool y_is_log) {
237 if(t.size() >= values.size() and t.size() != 0)
234 if(t.size() >= values.size() and t.size() != 0)
238 SCIQLOP_ERROR(decltype(py::self), "Doesn't look like a Spectrogram");
235 SCIQLOP_ERROR(decltype(py::self), "Doesn't look like a Spectrogram");
239 if(y.size() != values.shape(1))
236 if(y.size() != values.shape(1))
240 SCIQLOP_ERROR(decltype(py::self),
237 SCIQLOP_ERROR(decltype(py::self),
241 "Y axis size and data shape are incompatible");
238 "Y axis size and data shape are incompatible");
242 SpectrogramTimeSerie::axis_t _t(t.size());
239 SpectrogramTimeSerie::axis_t _t(t.size());
243 SpectrogramTimeSerie::axis_t _y(y.size());
240 SpectrogramTimeSerie::axis_t _y(y.size());
244 SpectrogramTimeSerie::container_type<
241 SpectrogramTimeSerie::data_t _values(values.size());
245 SpectrogramTimeSerie::raw_value_type>
246 _values(values.size());
247 copy_spectro(t, y, values, _t, _y, _values);
242 copy_spectro(t, y, values, _t, _y, _values);
248 std::vector<std::size_t> shape;
243 std::vector<std::size_t> shape;
249 shape.push_back(values.shape(0));
244 shape.push_back(values.shape(0));
250 shape.push_back(values.shape(1));
245 shape.push_back(values.shape(1));
251 return SpectrogramTimeSerie(std::move(_t), std::move(_y),
246 return SpectrogramTimeSerie(std::move(_t), std::move(_y),
252 std::move(_values), shape, min_sampling,
247 std::move(_values), shape, min_sampling,
253 max_sampling, y_is_log);
248 max_sampling, y_is_log);
254 }))
249 }))
255 .def("__getitem__",
250 .def("__getitem__",
256 [](SpectrogramTimeSerie& ts,
251 [](SpectrogramTimeSerie& ts,
257 std::size_t key) -> SpectrogramTimeSerie::iterator_t {
252 std::size_t key) -> SpectrogramTimeSerie::iterator_t {
258 return ts.begin() + key;
253 return ts.begin() + key;
259 });
254 });
260
255
261 py::class_<Variable2, std::shared_ptr<Variable2>>(m, "Variable2")
256 py::class_<Variable2, std::shared_ptr<Variable2>>(m, "Variable2")
262 .def(py::init<const QString&>())
257 .def(py::init<const QString&>())
263 .def_property("name", &Variable2::name, &Variable2::setName)
258 .def_property("name", &Variable2::name, &Variable2::setName)
264 .def_property_readonly("range", &Variable2::range)
259 .def_property_readonly("range", &Variable2::range)
265 .def_property_readonly("nbPoints", &Variable2::nbPoints)
260 .def_property_readonly("nbPoints", &Variable2::nbPoints)
266 .def_property_readonly(
261 .def_property_readonly(
267 "data",
262 "data",
268 [](Variable2& var) -> std::shared_ptr<TimeSeries::ITimeSerie> {
263 [](Variable2& var) -> std::shared_ptr<TimeSeries::ITimeSerie> {
269 return var.data();
264 return var.data();
270 })
265 })
271 .def("set_data",
266 .def("set_data",
272 [](Variable2& var, std::vector<TimeSeries::ITimeSerie*> ts_list,
267 [](Variable2& var, std::vector<TimeSeries::ITimeSerie*> ts_list,
273 const DateTimeRange& range) { var.setData(ts_list, range); })
268 const DateTimeRange& range) { var.setData(ts_list, range); })
274 .def("__len__", &Variable2::nbPoints)
269 .def("__len__", &Variable2::nbPoints)
275 .def("__repr__", __repr__<Variable2>);
270 .def("__repr__", __repr__<Variable2>);
276
271
277 py::class_<DateTimeRange>(m, "SqpRange")
272 py::class_<DateTimeRange>(m, "SqpRange")
278 //.def("fromDateTime", &DateTimeRange::fromDateTime,
273 //.def("fromDateTime", &DateTimeRange::fromDateTime,
279 // py::return_value_policy::move)
274 // py::return_value_policy::move)
280 .def(py::init([](double start, double stop) {
275 .def(py::init([](double start, double stop) {
281 return DateTimeRange{start, stop};
276 return DateTimeRange{start, stop};
282 }))
277 }))
283 .def(py::init(
278 .def(py::init(
284 [](system_clock::time_point start, system_clock::time_point stop) {
279 [](system_clock::time_point start, system_clock::time_point stop) {
285 double start_ =
280 double start_ =
286 0.001 *
281 0.001 *
287 duration_cast<milliseconds>(start.time_since_epoch()).count();
282 duration_cast<milliseconds>(start.time_since_epoch()).count();
288 double stop_ =
283 double stop_ =
289 0.001 *
284 0.001 *
290 duration_cast<milliseconds>(stop.time_since_epoch()).count();
285 duration_cast<milliseconds>(stop.time_since_epoch()).count();
291 return DateTimeRange{start_, stop_};
286 return DateTimeRange{start_, stop_};
292 }))
287 }))
293 .def_property_readonly("start",
288 .def_property_readonly("start",
294 [](const DateTimeRange& range) {
289 [](const DateTimeRange& range) {
295 return system_clock::from_time_t(range.m_TStart);
290 return system_clock::from_time_t(range.m_TStart);
296 })
291 })
297 .def_property_readonly("stop",
292 .def_property_readonly("stop",
298 [](const DateTimeRange& range) {
293 [](const DateTimeRange& range) {
299 return system_clock::from_time_t(range.m_TEnd);
294 return system_clock::from_time_t(range.m_TEnd);
300 })
295 })
301 .def("__repr__", __repr__<DateTimeRange>);
296 .def("__repr__", __repr__<DateTimeRange>);
302 }
297 }
General Comments 0
You need to be logged in to leave comments. Login now