-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #432 from ami-iit/bindings/toml
Develop the python bindings for toml implementation of the parameters handler
- Loading branch information
Showing
9 changed files
with
353 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
...ython/ParametersHandler/include/BipedalLocomotion/bindings/ParametersHandler/TomlModule.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/** | ||
* @file TomlModule.h | ||
* @authors Giulio Romualdi | ||
* @copyright 2021 Istituto Italiano di Tecnologia (IIT). This software may be modified and | ||
* distributed under the terms of the GNU Lesser General Public License v2.1 or any later version. | ||
*/ | ||
|
||
#ifndef BIPEDAL_LOCOMOTION_BINDINGS_PARAMETERS_HANDLER_TOML_MODULE_H | ||
#define BIPEDAL_LOCOMOTION_BINDINGS_PARAMETERS_HANDLER_TOML_MODULE_H | ||
|
||
#include <pybind11/pybind11.h> | ||
|
||
namespace BipedalLocomotion | ||
{ | ||
namespace bindings | ||
{ | ||
namespace ParametersHandler | ||
{ | ||
|
||
void CreateTomlModule(pybind11::module& module); | ||
|
||
} // namespace ParametersHandler | ||
} // namespace bindings | ||
} // namespace BipedalLocomotion | ||
|
||
#endif // BIPEDAL_LOCOMOTION_BINDINGS_PARAMETERS_HANDLER_TOML_MODULE_H |
26 changes: 26 additions & 0 deletions
26
...etersHandler/include/BipedalLocomotion/bindings/ParametersHandler/TomlParametersHandler.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/** | ||
* @file TomlParametersHandler | ||
* @authors Giulio Romualdi | ||
* @copyright 2021 Istituto Italiano di Tecnologia (IIT). This software may be modified and | ||
* distributed under the terms of the GNU Lesser General Public License v2.1 or any later version. | ||
*/ | ||
|
||
#ifndef BIPEDAL_LOCOMOTION_BINDINGS_PARAMETERS_HANDLER_TOML_PARAMETERS_HANDLER_H | ||
#define BIPEDAL_LOCOMOTION_BINDINGS_PARAMETERS_HANDLER_TOML_PARAMETERS_HANDLER_H | ||
|
||
#include <pybind11/pybind11.h> | ||
|
||
namespace BipedalLocomotion | ||
{ | ||
namespace bindings | ||
{ | ||
namespace ParametersHandler | ||
{ | ||
|
||
void CreateTomlParameterHandler(pybind11::module& module); | ||
|
||
} // namespace ParametersHandler | ||
} // namespace bindings | ||
} // namespace BipedalLocomotion | ||
|
||
#endif // BIPEDAL_LOCOMOTION_BINDINGS_PARAMETERS_HANDLER_TOML_PARAMETERS_HANDLER_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/** | ||
* @file TomlModule.cpp | ||
* @authors Giulio Romualdi | ||
* @copyright 2021 Istituto Italiano di Tecnologia (IIT). This software may be modified and | ||
* distributed under the terms of the GNU Lesser General Public License v2.1 or any later version. | ||
*/ | ||
|
||
#include <pybind11/pybind11.h> | ||
|
||
#include <BipedalLocomotion/bindings/ParametersHandler/TomlModule.h> | ||
#include <BipedalLocomotion/bindings/ParametersHandler/TomlParametersHandler.h> | ||
|
||
namespace BipedalLocomotion | ||
{ | ||
namespace bindings | ||
{ | ||
namespace ParametersHandler | ||
{ | ||
void CreateTomlModule(pybind11::module& module) | ||
{ | ||
CreateTomlParameterHandler(module); | ||
} | ||
} // namespace ParametersHandler | ||
} // namespace bindings | ||
} // namespace BipedalLocomotion |
36 changes: 36 additions & 0 deletions
36
bindings/python/ParametersHandler/src/TomlParametersHandler.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/** | ||
* @file TomlParametersHandler.cpp | ||
* @authors Giulio Romualdi | ||
* @copyright 2021 Istituto Italiano di Tecnologia (IIT). This software may be modified and | ||
* distributed under the terms of the GNU Lesser General Public License v2.1 or any later version. | ||
*/ | ||
|
||
#include <pybind11/operators.h> | ||
#include <pybind11/pybind11.h> | ||
#include <pybind11/stl.h> | ||
|
||
#include <BipedalLocomotion/ParametersHandler/IParametersHandler.h> | ||
#include <BipedalLocomotion/ParametersHandler/TomlImplementation.h> | ||
#include <BipedalLocomotion/bindings/ParametersHandler/TomlParametersHandler.h> | ||
|
||
namespace BipedalLocomotion | ||
{ | ||
namespace bindings | ||
{ | ||
namespace ParametersHandler | ||
{ | ||
|
||
void CreateTomlParameterHandler(pybind11::module& module) | ||
{ | ||
namespace py = ::pybind11; | ||
using namespace BipedalLocomotion::ParametersHandler; | ||
py::class_<TomlImplementation, // | ||
std::shared_ptr<TomlImplementation>, | ||
IParametersHandler>(module, "TomlParametersHandler") | ||
.def(py::init()) | ||
.def("set_from_file", &TomlImplementation::setFromFile, py::arg("file_name")); | ||
} | ||
|
||
} // namespace ParametersHandler | ||
} // namespace bindings | ||
} // namespace BipedalLocomotion |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
answer_to_the_ultimate_question_of_life = 42 | ||
pi = 3.14 | ||
John = "Smith" | ||
"Fibonacci Numbers" = [1, 1, 2, 3, 5, 8, 13, 21] | ||
|
||
[CARTOONS] | ||
"Donald's nephews" = ["Huey", "Dewey", "Louie"] | ||
Fibonacci_Numbers = [1, 1, 2, 3, 5, 8, 13, 21] | ||
John = "Doe" |
207 changes: 207 additions & 0 deletions
207
bindings/python/ParametersHandler/tests/test_parameters_handler_toml.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,207 @@ | ||
import pytest | ||
pytestmark = pytest.mark.parameters_handler_toml | ||
|
||
import bipedal_locomotion_framework.bindings.parameters_handler as blf | ||
import numpy as np | ||
|
||
def test_bool(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_bool(name="my_bool", value=True) | ||
|
||
assert handler.get_parameter_bool(name="my_bool") is True | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_int(name="my_bool") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_float(name="my_bool") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_string(name="my_bool") | ||
|
||
|
||
def test_int(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_int(name="my_int", value=42) | ||
|
||
assert handler.get_parameter_int(name="my_int") == 42 | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_bool(name="my_int") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_float(name="my_int") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_string(name="my_int") | ||
|
||
|
||
def test_float(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_float(name="my_float", value=3.1415) | ||
|
||
assert handler.get_parameter_float(name="my_float") == pytest.approx(3.1415) | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_bool(name="my_float") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_int(name="my_float") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_string(name="my_float") | ||
|
||
|
||
def test_string(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_string(name="my_string", value="foo") | ||
|
||
assert handler.get_parameter_string(name="my_string") == "foo" | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_bool(name="my_string") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_int(name="my_string") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_float(name="my_string") | ||
|
||
|
||
def test_vector_bool(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_vector_bool(name="my_vector_bool",value= [True, False, True]) | ||
|
||
assert handler.get_parameter_vector_bool(name="my_vector_bool") == [True, False, True] | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_int(name="my_vector_bool") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_float(name="my_vector_bool") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_string(name="my_vector_bool") | ||
|
||
|
||
def test_vector_int(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_vector_int(name="my_vector_int", value=[-1, 2, 10]) | ||
|
||
assert handler.get_parameter_vector_int(name="my_vector_int") == [-1, 2, 10] | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_bool(name="my_vector_int") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_float(name="my_vector_int") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_string(name="my_vector_int") | ||
|
||
|
||
def test_vector_float(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_vector_float(name="my_vector_float", | ||
value=[-3.14, 2.7182, 42.0]) | ||
|
||
assert handler.get_parameter_vector_float(name="my_vector_float") == \ | ||
pytest.approx([-3.14, 2.7182, 42.0]) | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_bool(name="my_vector_float") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_int(name="my_vector_float") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_string(name="my_vector_float") | ||
|
||
|
||
def test_vector_string(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_vector_string(name="my_vector_string", | ||
value=["foo", "bar", "bipedal", "locomotion"]) | ||
|
||
assert handler.get_parameter_vector_string(name="my_vector_string") == \ | ||
["foo", "bar", "bipedal", "locomotion"] | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_bool(name="my_vector_string") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_int(name="my_vector_string") | ||
|
||
with pytest.raises(ValueError): | ||
handler.get_parameter_vector_float(name="my_vector_string") | ||
|
||
|
||
def test_vector_mixed(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
# 1. Mixed vector: store as more general type float | ||
handler.set_parameter_vector_float(name="to_float", value=[42.0, 1, -3.14, False]) | ||
|
||
assert handler.get_parameter_vector_float(name="to_float") == \ | ||
pytest.approx([42.0, 1.0, -3.14, 0.0]) | ||
|
||
# 2. Mixed vector: store as more general type int | ||
handler.set_parameter_vector_float(name="to_int", value=[42, 1, -3, False]) | ||
|
||
assert handler.get_parameter_vector_float(name="to_int") == \ | ||
pytest.approx([42, 1, -3, 0]) | ||
|
||
# 3. Mixed vector: store as less general type int | ||
with pytest.raises(TypeError): | ||
handler.set_parameter_vector_int(name="to_int_fail", | ||
value=[42.0, 1, -3.14, False]) | ||
|
||
|
||
def test_clear(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
|
||
handler.set_parameter_bool(name="my_bool1", value=False) | ||
handler.set_parameter_bool(name="my_bool2", value=True) | ||
handler.set_parameter_float(name="my_float", value=-42.42) | ||
handler.set_parameter_vector_string(name="my_vector_string", value=["bar", "foo"]) | ||
|
||
handler.clear() | ||
|
||
with pytest.raises(ValueError): | ||
_ = handler.get_parameter_bool(name="my_bool1") | ||
|
||
with pytest.raises(ValueError): | ||
_ = handler.get_parameter_bool(name="my_bool2") | ||
|
||
with pytest.raises(ValueError): | ||
_ = handler.get_parameter_float(name="my_float") | ||
|
||
with pytest.raises(ValueError): | ||
_ = handler.get_parameter_vector_string(name="my_float") | ||
|
||
|
||
def test_load_from_file(): | ||
|
||
handler = blf.TomlParametersHandler() | ||
assert handler.set_from_file('config.toml') == True | ||
|
||
assert handler.get_parameter_int("answer_to_the_ultimate_question_of_life") == 42 | ||
assert handler.get_group("CARTOONS").get_parameter_string("John") == "Doe" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters