Skip to content

Commit

Permalink
merged from ign-math6
Browse files Browse the repository at this point in the history
Signed-off-by: Louise Poubel <[email protected]>
  • Loading branch information
chapulina committed Dec 28, 2021
2 parents 03cedb9 + bb43b30 commit 5bca8d3
Show file tree
Hide file tree
Showing 8 changed files with 222 additions and 6 deletions.
2 changes: 0 additions & 2 deletions src/python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ if (PYTHONLIBS_FOUND)
Frustum_TEST
GaussMarkovProcess_TEST
Inertial_TEST
Kmeans_TEST
MassMatrix3_TEST
Matrix4_TEST
OrientedBox_TEST
Expand All @@ -106,7 +105,6 @@ if (PYTHONLIBS_FOUND)
Sphere_TEST
SphericalCoordinates_TEST
Temperature_TEST
Triangle3_TEST
Vector3Stats_TEST
)

Expand Down
3 changes: 3 additions & 0 deletions src/python_pybind11/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ if (${pybind11_FOUND})
src/Angle.cc
src/Color.cc
src/Helpers.cc
src/Kmeans.cc
src/Material.cc
src/Rand.cc
src/RollingMean.cc
Expand Down Expand Up @@ -79,6 +80,7 @@ if (${pybind11_FOUND})
Color_TEST
Filter_TEST
Helpers_TEST
Kmeans_TEST
Line2_TEST
Line3_TEST
Material_TEST
Expand All @@ -92,6 +94,7 @@ if (${pybind11_FOUND})
Spline_TEST
StopWatch_TEST
Triangle_TEST
Triangle3_TEST
Vector2_TEST
Vector3_TEST
Vector4_TEST
Expand Down
60 changes: 60 additions & 0 deletions src/python_pybind11/src/Kmeans.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright (C) 2021 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include <string>
#include <vector>

#include "Kmeans.hh"
#include <ignition/math/Kmeans.hh>
#include <pybind11/stl.h>

namespace ignition
{
namespace math
{
namespace python
{
void defineMathKmeans(py::module &m, const std::string &typestr)
{
using Class = ignition::math::Kmeans;
std::string pyclass_name = typestr;
py::class_<Class>(m,
pyclass_name.c_str(),
py::buffer_protocol(),
py::dynamic_attr())
.def(py::init<const std::vector<ignition::math::Vector3d>&>())
.def("observations",
py::overload_cast<const std::vector<ignition::math::Vector3d>&>
(&Class::Observations),
"Set the observations to cluster.")
.def("observations",
py::overload_cast<>(&Class::Observations, py::const_),
"Get the observations to cluster.")
.def("append_observations",
&Class::AppendObservations,
"Add observations to the cluster.")
.def("cluster",
[](Class &self, int k) {
std::vector<ignition::math::Vector3<double>> centroids;
std::vector<unsigned int> labels;
bool result = self.Cluster(k, centroids, labels);
return std::make_tuple(result, centroids, labels);
},
"Executes the k-means algorithm.");
}
} // namespace python
} // namespace math
} // namespace ignition
42 changes: 42 additions & 0 deletions src/python_pybind11/src/Kmeans.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright (C) 2021 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

#ifndef IGNITION_MATH_PYTHON__KMEANS_HH_
#define IGNITION_MATH_PYTHON__KMEANS_HH_

#include <pybind11/pybind11.h>
#include <string>

namespace py = pybind11;

namespace ignition
{
namespace math
{
namespace python
{
/// Define a pybind11 wrapper for an ignition::math::Kmeans
/**
* \param[in] module a pybind11 module to add the definition to
* \param[in] typestr name of the type used by Python
*/
void defineMathKmeans(py::module &m, const std::string &typestr);
} // namespace python
} // namespace math
} // namespace ignition

#endif // IGNITION_MATH_PYTHON__KMEANS_HH_
106 changes: 106 additions & 0 deletions src/python_pybind11/src/Triangle3.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/*
* Copyright (C) 2021 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

#ifndef IGNITION_MATH_PYTHON__TRIANGLE3_HH_
#define IGNITION_MATH_PYTHON__TRIANGLE3_HH_

#include <string>

#include <pybind11/pybind11.h>
#include <pybind11/operators.h>

#include <ignition/math/Triangle3.hh>

namespace py = pybind11;
using namespace pybind11::literals;

namespace ignition
{
namespace math
{
namespace python
{
/// Define a pybind11 wrapper for an ignition::math::Triangle3
/**
* \param[in] module a pybind11 module to add the definition to
* \param[in] typestr name of the type used by Python
*/
template<typename T>
void defineMathTriangle3(py::module &m, const std::string &typestr)
{
using Class = ignition::math::Triangle3<T>;
py::class_<Class>(m,
typestr.c_str(),
py::buffer_protocol(),
py::dynamic_attr())
.def(py::init<>())
.def(py::init<const math::Vector3<T> &,
const math::Vector3<T> &,
const math::Vector3<T> &>())
.def(py::init<const Class>())
.def("set",
py::overload_cast<const unsigned int, const math::Vector3<T> &>
(&Class::Set),
"Set one vertex of the triangle.")
.def("set",
py::overload_cast<const math::Vector3<T> &,
const math::Vector3<T> &,
const math::Vector3<T> &>
(&Class::Set),
"Set all vertices of the triangle.")
.def("valid",
&Class::Valid,
"Get whether this triangle is valid, based on triangle "
"inequality: the sum of the lengths of any two sides must be greater "
"than the length of the remaining side.")
.def("side",
&Class::Side,
"Get a line segment for one side of the triangle.")
.def("contains",
py::overload_cast<const Line3<T>&>(&Class::Contains, py::const_),
"Check if this triangle completely contains the given line "
"segment.")
.def("contains",
py::overload_cast<const Vector3<T>&>(&Class::Contains, py::const_),
"Get whether this triangle contains the given point")
.def("intersects",
&Class::Intersects,
"Get whether the given line intersects this triangle.")
.def("perimeter",
&Class::Perimeter,
"Get the length of the triangle's perimeter.")
.def("area", &Class::Area, "Get the area of this triangle.")
.def("normal", &Class::Normal, "Get the triangle's normal vector.")
.def("__copy__", [](const Class &self) {
return Class(self);
})
.def("__deepcopy__", [](const Class &self, py::dict) {
return Class(self);
}, "memo"_a)
.def("__getitem__",
(&Class::operator[]))
.def("__getitem__",
py::overload_cast<const std::size_t>(&Class::operator[], py::const_))
.def("__setitem__",
[](Class* vec, unsigned index, T val) { (*vec)[index] = val; });
}

} // namespace python
} // namespace gazebo
} // namespace ignition

#endif // IGNITION_MATH_PYTHON__TRIANGLE3_HH_
8 changes: 8 additions & 0 deletions src/python_pybind11/src/_ignition_math_pybind11.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "Color.hh"
#include "Filter.hh"
#include "Helpers.hh"
#include "Kmeans.hh"
#include "Line2.hh"
#include "Line3.hh"
#include "Material.hh"
Expand All @@ -31,6 +32,7 @@
#include "Spline.hh"
#include "StopWatch.hh"
#include "Triangle.hh"
#include "Triangle3.hh"
#include "Vector2.hh"
#include "Vector3.hh"
#include "Vector4.hh"
Expand All @@ -47,6 +49,8 @@ PYBIND11_MODULE(math, m)

ignition::math::python::defineMathHelpers(m);

ignition::math::python::defineMathKmeans(m, "Kmeans");

ignition::math::python::defineMathMaterial(m, "Material");

ignition::math::python::defineMathMovingWindowFilter<int>(
Expand Down Expand Up @@ -94,6 +98,10 @@ PYBIND11_MODULE(math, m)
ignition::math::python::defineMathTriangle<double>(m, "Triangled");
ignition::math::python::defineMathTriangle<float>(m, "Trianglef");

ignition::math::python::defineMathTriangle3<int>(m, "Triangle3i");
ignition::math::python::defineMathTriangle3<double>(m, "Triangle3d");
ignition::math::python::defineMathTriangle3<float>(m, "Triangle3f");

ignition::math::python::defineMathQuaternion<int>(m, "Quaternioni");
ignition::math::python::defineMathQuaternion<double>(m, "Quaterniond");
ignition::math::python::defineMathQuaternion<float>(m, "Quaternionf");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import unittest
from ignition.math import Kmeans
from ignition.math import Vector3d
from ignition.math import vector_vector3d


class TestKmeans(unittest.TestCase):
Expand Down Expand Up @@ -128,13 +127,13 @@ def test_kmeans_append(self):

kmeans.append_observations(obs2)

obs_copy = vector_vector3d(kmeans.observations())
obs_copy = kmeans.observations()

for i in range(obs_copy.size()):
for i in range(len(obs_copy)):
self.assertEqual(obs_total[i], obs_copy[i])

# Append an empty vector.
emptyVector = vector_vector3d()
emptyVector = []
self.assertFalse(kmeans.append_observations(emptyVector))


Expand Down
File renamed without changes.

0 comments on commit 5bca8d3

Please sign in to comment.