From 0535ba34b46d4d030780e6ebfdc3efa08466d362 Mon Sep 17 00:00:00 2001 From: Julius Huelsmann Date: Tue, 13 Oct 2020 23:33:35 +0200 Subject: [PATCH 1/3] fixes --- matplotlibcpp.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/matplotlibcpp.h b/matplotlibcpp.h index 93a72be5..334dfb90 100644 --- a/matplotlibcpp.h +++ b/matplotlibcpp.h @@ -345,7 +345,7 @@ template <> struct select_npy_type { const static NPY_TYPES template PyObject* get_array(const std::vector& v) { - npy_intp vsize = v.size(); + auto vsize = static_cast(v.size()); NPY_TYPES type = select_npy_type::type; if (type == NPY_NOTYPE) { size_t memsize = v.size()*sizeof(double); @@ -357,7 +357,7 @@ PyObject* get_array(const std::vector& v) return varray; } - PyObject* varray = PyArray_SimpleNewFromData(1, &vsize, type, (void*)(v.data())); + PyObject* varray = PyArray_SimpleNewFromData(1, &vsize, type, const_cast(static_cast(v.data()))); return varray; } @@ -402,9 +402,9 @@ PyObject* get_array(const std::vector& v) // sometimes, for labels and such, we need string arrays inline PyObject * get_array(const std::vector& strings) { - PyObject* list = PyList_New(strings.size()); + PyObject* list = PyList_New(static_cast(strings.size())); for (std::size_t i = 0; i < strings.size(); ++i) { - PyList_SetItem(list, i, PyString_FromString(strings[i].c_str())); + PyList_SetItem(list, static_cast(i), PyString_FromString(strings[i].c_str())); } return list; } @@ -838,12 +838,12 @@ inline void imshow(void *ptr, const NPY_TYPES type, const int rows, const int co inline void imshow(const unsigned char *ptr, const int rows, const int columns, const int colors, const std::map &keywords = {}, PyObject** out = nullptr) { - detail::imshow((void *) ptr, NPY_UINT8, rows, columns, colors, keywords, out); + detail::imshow(const_cast(static_cast(ptr)), NPY_UINT8, rows, columns, colors, keywords, out); } inline void imshow(const float *ptr, const int rows, const int columns, const int colors, const std::map &keywords = {}, PyObject** out = nullptr) { - detail::imshow((void *) ptr, NPY_FLOAT, rows, columns, colors, keywords, out); + detail::imshow(const_cast(static_cast(ptr)), NPY_FLOAT, rows, columns, colors, keywords, out); } #ifdef WITH_OPENCV @@ -892,7 +892,7 @@ bool scatter(const std::vector& x, PyObject* yarray = detail::get_array(y); PyObject* kwargs = PyDict_New(); - PyDict_SetItemString(kwargs, "s", PyLong_FromLong(s)); + PyDict_SetItemString(kwargs, "s", PyLong_FromLong(static_cast(s))); for (const auto& it : keywords) { PyDict_SetItemString(kwargs, it.first.c_str(), PyString_FromString(it.second.c_str())); @@ -1478,7 +1478,7 @@ template bool plot(const std::vector& y, const std::string& format = "") { std::vector x(y.size()); - for(size_t i=0; i(i); return plot(x,y,format); } @@ -1593,8 +1593,8 @@ inline void figure_size(size_t w, size_t h) const size_t dpi = 100; PyObject* size = PyTuple_New(2); - PyTuple_SetItem(size, 0, PyFloat_FromDouble((double)w / dpi)); - PyTuple_SetItem(size, 1, PyFloat_FromDouble((double)h / dpi)); + PyTuple_SetItem(size, 0, PyFloat_FromDouble(static_cast(w) / dpi)); + PyTuple_SetItem(size, 1, PyFloat_FromDouble(static_cast(h) / dpi)); PyObject* kwargs = PyDict_New(); PyDict_SetItemString(kwargs, "figsize", size); @@ -1877,9 +1877,9 @@ inline void subplot(long nrows, long ncols, long plot_number) // construct positional args PyObject* args = PyTuple_New(3); - PyTuple_SetItem(args, 0, PyFloat_FromDouble(nrows)); - PyTuple_SetItem(args, 1, PyFloat_FromDouble(ncols)); - PyTuple_SetItem(args, 2, PyFloat_FromDouble(plot_number)); + PyTuple_SetItem(args, 0, PyFloat_FromDouble(static_cast(nrows))); + PyTuple_SetItem(args, 1, PyFloat_FromDouble(static_cast(ncols))); + PyTuple_SetItem(args, 2, PyFloat_FromDouble(static_cast(plot_number))); PyObject* res = PyObject_CallObject(detail::_interpreter::get().s_python_function_subplot, args); if(!res) throw std::runtime_error("Call to subplot() failed."); @@ -2290,11 +2290,11 @@ inline std::vector> ginput(const int numClicks = 1, const Py_DECREF(args); if (!res) throw std::runtime_error("Call to ginput() failed."); - const size_t len = PyList_Size(res); + const auto len = static_cast(PyList_Size(res)); std::vector> out; out.reserve(len); for (size_t i = 0; i < len; i++) { - PyObject *current = PyList_GetItem(res, i); + PyObject *current = PyList_GetItem(res, static_cast(i)); std::array position; position[0] = PyFloat_AsDouble(PyTuple_GetItem(current, 0)); position[1] = PyFloat_AsDouble(PyTuple_GetItem(current, 1)); From 547087b4ed3af5aab12b8fd85313f11c0d4fd445 Mon Sep 17 00:00:00 2001 From: Julius Huelsmann Date: Sun, 18 Oct 2020 14:00:40 +0200 Subject: [PATCH 2/3] add alpha option for fill --- matplotlibcpp.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/matplotlibcpp.h b/matplotlibcpp.h index 334dfb90..d509acf9 100644 --- a/matplotlibcpp.h +++ b/matplotlibcpp.h @@ -676,7 +676,7 @@ bool stem(const std::vector &x, const std::vector &y, const st } template< typename Numeric > -bool fill(const std::vector& x, const std::vector& y, const std::map& keywords) +bool fill(const std::vector& x, const std::vector& y, const std::map& keywords, double alpha=1.) { assert(x.size() == y.size()); @@ -693,8 +693,11 @@ bool fill(const std::vector& x, const std::vector& y, const st // construct keyword args PyObject* kwargs = PyDict_New(); + PyDict_SetItemString(kwargs, "alpha", PyFloat_FromDouble(alpha)); for (auto it = keywords.begin(); it != keywords.end(); ++it) { - PyDict_SetItemString(kwargs, it->first.c_str(), PyUnicode_FromString(it->second.c_str())); + + PyDict_SetItemString(kwargs, it->first.c_str(), + PyUnicode_FromString(it->second.c_str())); } PyObject* res = PyObject_Call(detail::_interpreter::get().s_python_function_fill, args, kwargs); @@ -708,7 +711,7 @@ bool fill(const std::vector& x, const std::vector& y, const st } template< typename Numeric > -bool fill_between(const std::vector& x, const std::vector& y1, const std::vector& y2, const std::map& keywords) +bool fill_between(const std::vector& x, const std::vector& y1, const std::vector& y2, const std::map& keywords, double alpha=1.) { assert(x.size() == y1.size()); assert(x.size() == y2.size()); @@ -728,6 +731,7 @@ bool fill_between(const std::vector& x, const std::vector& y1, // construct keyword args PyObject* kwargs = PyDict_New(); + PyDict_SetItemString(kwargs, "alpha", PyFloat_FromDouble(alpha)); for(std::map::const_iterator it = keywords.begin(); it != keywords.end(); ++it) { PyDict_SetItemString(kwargs, it->first.c_str(), PyUnicode_FromString(it->second.c_str())); } From 576d3a04a653cb90bfee86d405836e6dee1c08cc Mon Sep 17 00:00:00 2001 From: Julius Huelsmann Date: Wed, 2 Dec 2020 11:15:41 +0100 Subject: [PATCH 3/3] push work from last week --- matplotlibcpp.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matplotlibcpp.h b/matplotlibcpp.h index d509acf9..6b1f6b34 100644 --- a/matplotlibcpp.h +++ b/matplotlibcpp.h @@ -425,8 +425,8 @@ PyObject* get_listlist(const std::vector>& ll) /// Plot a line through the given x and y data points.. /// /// See: https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.plot.html -template -bool plot(const std::vector &x, const std::vector &y, const std::map& keywords) +template +bool plot(const std::vector &x, const std::vector &y, const std::map& keywords) { assert(x.size() == y.size());