diff options
Diffstat (limited to 'ml/dlib/tools/python/src/vector.cpp')
-rw-r--r-- | ml/dlib/tools/python/src/vector.cpp | 182 |
1 files changed, 0 insertions, 182 deletions
diff --git a/ml/dlib/tools/python/src/vector.cpp b/ml/dlib/tools/python/src/vector.cpp deleted file mode 100644 index a9f81c65e..000000000 --- a/ml/dlib/tools/python/src/vector.cpp +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright (C) 2013 Davis E. King (davis@dlib.net) -// License: Boost Software License See LICENSE.txt for the full license. - -#include "opaque_types.h" -#include <dlib/python.h> -#include <dlib/matrix.h> -#include <dlib/geometry/vector.h> -#include <pybind11/stl_bind.h> -#include "indexing.h" - -using namespace dlib; -using namespace std; - -typedef matrix<double,0,1> cv; - - -void cv_set_size(cv& m, long s) -{ - m.set_size(s); - m = 0; -} - -double dotprod ( const cv& a, const cv& b) -{ - return dot(a,b); -} - -string cv__str__(const cv& v) -{ - ostringstream sout; - for (long i = 0; i < v.size(); ++i) - { - sout << v(i); - if (i+1 < v.size()) - sout << "\n"; - } - return sout.str(); -} - -string cv__repr__ (const cv& v) -{ - std::ostringstream sout; - sout << "dlib.vector(["; - for (long i = 0; i < v.size(); ++i) - { - sout << v(i); - if (i+1 < v.size()) - sout << ", "; - } - sout << "])"; - return sout.str(); -} - -std::shared_ptr<cv> cv_from_object(py::object obj) -{ - try { - long nr = obj.cast<long>(); - auto temp = std::make_shared<cv>(nr); - *temp = 0; - return temp; - } catch(py::cast_error &e) { - py::list li = obj.cast<py::list>(); - const long nr = len(obj); - auto temp = std::make_shared<cv>(nr); - for ( long r = 0; r < nr; ++r) - { - (*temp)(r) = li[r].cast<double>(); - } - return temp; - } -} - -long cv__len__(cv& c) -{ - return c.size(); -} - - -void cv__setitem__(cv& c, long p, double val) -{ - if (p < 0) { - p = c.size() + p; // negative index - } - if (p > c.size()-1) { - PyErr_SetString( PyExc_IndexError, "index out of range" - ); - throw py::error_already_set(); - } - c(p) = val; -} - -double cv__getitem__(cv& m, long r) -{ - if (r < 0) { - r = m.size() + r; // negative index - } - if (r > m.size()-1 || r < 0) { - PyErr_SetString( PyExc_IndexError, "index out of range" - ); - throw py::error_already_set(); - } - return m(r); -} - - -cv cv__getitem2__(cv& m, py::slice r) -{ - size_t start, stop, step, slicelength; - if (!r.compute(m.size(), &start, &stop, &step, &slicelength)) - throw py::error_already_set(); - - cv temp(slicelength); - - for (size_t i = 0; i < slicelength; ++i) { - temp(i) = m(start); start += step; - } - return temp; -} - -py::tuple cv_get_matrix_size(cv& m) -{ - return py::make_tuple(m.nr(), m.nc()); -} - -// ---------------------------------------------------------------------------------------- - -string point__repr__ (const point& p) -{ - std::ostringstream sout; - sout << "point(" << p.x() << ", " << p.y() << ")"; - return sout.str(); -} - -string point__str__(const point& p) -{ - std::ostringstream sout; - sout << "(" << p.x() << ", " << p.y() << ")"; - return sout.str(); -} - -long point_x(const point& p) { return p.x(); } -long point_y(const point& p) { return p.y(); } - -// ---------------------------------------------------------------------------------------- -void bind_vector(py::module& m) -{ - { - py::class_<cv, std::shared_ptr<cv>>(m, "vector", "This object represents the mathematical idea of a column vector.") - .def(py::init()) - .def("set_size", &cv_set_size) - .def("resize", &cv_set_size) - .def(py::init(&cv_from_object)) - .def("__repr__", &cv__repr__) - .def("__str__", &cv__str__) - .def("__len__", &cv__len__) - .def("__getitem__", &cv__getitem__) - .def("__getitem__", &cv__getitem2__) - .def("__setitem__", &cv__setitem__) - .def_property_readonly("shape", &cv_get_matrix_size) - .def(py::pickle(&getstate<cv>, &setstate<cv>)); - - m.def("dot", &dotprod, "Compute the dot product between two dense column vectors."); - } - { - typedef point type; - py::class_<type>(m, "point", "This object represents a single point of integer coordinates that maps directly to a dlib::point.") - .def(py::init<long,long>(), py::arg("x"), py::arg("y")) - .def("__repr__", &point__repr__) - .def("__str__", &point__str__) - .def_property("x", &point_x, [](point& p, long x){p.x()=x;}, "The x-coordinate of the point.") - .def_property("y", &point_y, [](point& p, long y){p.x()=y;}, "The y-coordinate of the point.") - .def(py::pickle(&getstate<type>, &setstate<type>)); - } - { - typedef std::vector<point> type; - py::bind_vector<type>(m, "points", "An array of point objects.") - .def("clear", &type::clear) - .def("resize", resize<type>) - .def("extend", extend_vector_with_python_list<point>) - .def(py::pickle(&getstate<type>, &setstate<type>)); - } -} |