commit bb73c40ed2b34516c850119ed79d65edb96521c0 Author: nikof Date: Wed Feb 14 12:16:31 2024 +0100 initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..61055c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +/build/ +/install/ +/log/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..de7c4af --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# Use ROS 2 Humble Hawksbill base image +FROM osrf/ros:humble-desktop-full + +# Update and install dependencies +RUN apt-get update && apt-get install -y \ + python3-colcon-common-extensions \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt + +# Create a workspace +WORKDIR /ros2_ws + +# Copy your ROS 2 package into the workspace +COPY ./ros2_ws/src /ros2_ws/src + +# Build your package +RUN . /opt/ros/humble/setup.sh && \ + colcon build + +RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc + + +# Source the workspace +CMD ["/bin/bash"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..c750c7c --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,14 @@ +version: '3.8' +services: + ros2: + build: .. + volumes: + - ./ros2_ws/src:/ros2_ws/src + networks: + - ros_network + tty: true + stdin_open: true + +networks: + ros_network: + driver: bridge diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2c04913 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +numpy==1.26.4 diff --git a/src/InteractionMetrics/InteractionMetrics/Improvement.py b/src/InteractionMetrics/InteractionMetrics/Improvement.py new file mode 100644 index 0000000..416a832 --- /dev/null +++ b/src/InteractionMetrics/InteractionMetrics/Improvement.py @@ -0,0 +1,21 @@ +class ImprovementQuery: + def __init__(self, threshold, period, last_query, rewards): + self.threshold = threshold + self.period = period + self.last_query = last_query + self.rewards = rewards + + def query(self): + if self.rewards.shape[0] < self.period + 1: + return False + + elif self.rewards.shape[0] < self.last_query + self.period + 1: + return False + + else: + first = self.rewards[-self.period-1] + last = self.rewards[-1] + + slope = (last - first) / self.period + + return slope < self.threshold diff --git a/src/InteractionMetrics/InteractionMetrics/MaxAcquisition.py b/src/InteractionMetrics/InteractionMetrics/MaxAcquisition.py new file mode 100644 index 0000000..90dbd47 --- /dev/null +++ b/src/InteractionMetrics/InteractionMetrics/MaxAcquisition.py @@ -0,0 +1,55 @@ +import numpy as np +from scipy.stats import norm + + +class MaxAcqQuery: + def __init__(self, threshold, gp, + nr_test, nr_weights, + lower=-1.0, upper=1.0, + acq="Expected Improvement", + **kwargs): + self.threshold = threshold + self.gp = gp + self.nr_test = nr_test + self.nr_weights = nr_weights + self.lower = lower + self.upper = upper + self.acq = acq + + self.seed = kwargs.get('seed', None) + self.kappa = kwargs.get('kappa', 2.576) + self.beta = kwargs.get('beta', 1.2) + self.X = kwargs.get('X', None) + + self.rng = np.random.default_rng(self.seed) + + def query(self): + X_test = self.rng.uniform(self.lower, self.upper, (self.nr_test, self.nr_weights)) + max_acq = 0 + + if self.acq == "Expected Improvement": + if self.X is None: + raise ValueError + y_hat = self.gp.predict(self.X) + best_y = max(y_hat) + mu, sigma = self.gp.predict(X_test, return_std=True) + z = (mu - best_y - self.kappa) / sigma + ei = (mu - best_y - self.kappa) * norm.cdf(z) + sigma * norm.pdf(z) + max_acq = np.max(ei) + + if self.acq == "Probability of Improvement": + if self.X is None: + raise ValueError + y_hat = self.gp.predict(self.X) + best_y = max(y_hat) + mu, sigma = self.gp.predict(X_test, return_std=True) + z = (mu - best_y - self.kappa) / sigma + pi = norm.cdf(z) + max_acq = np.max(pi) + + if self.acq == "Upper Confidence Bound": + mu, sigma = self.gp.predict(X_test, return_std=True) + cb = mu + self.beta * sigma + max_acq = np.max(cb) + + return max_acq > self.threshold diff --git a/src/InteractionMetrics/InteractionMetrics/Random.py b/src/InteractionMetrics/InteractionMetrics/Random.py new file mode 100644 index 0000000..e53d125 --- /dev/null +++ b/src/InteractionMetrics/InteractionMetrics/Random.py @@ -0,0 +1,11 @@ +import numpy as np + + +class RandomQuery: + def __init__(self, threshold): + self.threshold = threshold + self.random = np.random.uniform(0.0, 1.0, 1) + + def query(self): + return self.random > self.threshold + \ No newline at end of file diff --git a/src/InteractionMetrics/InteractionMetrics/Regular.py b/src/InteractionMetrics/InteractionMetrics/Regular.py new file mode 100644 index 0000000..7349859 --- /dev/null +++ b/src/InteractionMetrics/InteractionMetrics/Regular.py @@ -0,0 +1,12 @@ +class RegularQuery: + def __init__(self, regular, episode): + self.regular = int(regular) + self.counter = episode + + def query(self): + + if self.counter % self.regular == 0 and self.counter != 0: + return True + + else: + return False diff --git a/src/InteractionMetrics/InteractionMetrics/__init__.py b/src/InteractionMetrics/InteractionMetrics/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/InteractionMetrics/package.xml b/src/InteractionMetrics/package.xml new file mode 100644 index 0000000..97c540a --- /dev/null +++ b/src/InteractionMetrics/package.xml @@ -0,0 +1,18 @@ + + + + InteractionMetrics + 0.0.0 + TODO: Package description + niko + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/InteractionMetrics/resource/InteractionMetrics b/src/InteractionMetrics/resource/InteractionMetrics new file mode 100644 index 0000000..e69de29 diff --git a/src/InteractionMetrics/setup.cfg b/src/InteractionMetrics/setup.cfg new file mode 100644 index 0000000..b01a7f8 --- /dev/null +++ b/src/InteractionMetrics/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/InteractionMetrics +[install] +install_scripts=$base/lib/InteractionMetrics diff --git a/src/InteractionMetrics/setup.py b/src/InteractionMetrics/setup.py new file mode 100644 index 0000000..64dcaad --- /dev/null +++ b/src/InteractionMetrics/setup.py @@ -0,0 +1,25 @@ +from setuptools import find_packages, setup + +package_name = 'InteractionMetrics' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='niko', + maintainer_email='nikolaus.feith@unileoben.ac.at', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --git a/src/InteractionMetrics/test/test_copyright.py b/src/InteractionMetrics/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/InteractionMetrics/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/InteractionMetrics/test/test_flake8.py b/src/InteractionMetrics/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/InteractionMetrics/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/InteractionMetrics/test/test_pep257.py b/src/InteractionMetrics/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/InteractionMetrics/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/InteractionMsgs/CMakeLists.txt b/src/InteractionMsgs/CMakeLists.txt new file mode 100644 index 0000000..f905a4d --- /dev/null +++ b/src/InteractionMsgs/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.8) +project(InteractionMsgs) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# find dependencies +find_package(ament_cmake REQUIRED) +# uncomment the following section in order to fill in +# further dependencies manually. +# find_package( REQUIRED) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + # the following line skips the linter which checks for copyrights + # comment the line when a copyright and license is added to all source files + set(ament_cmake_copyright_FOUND TRUE) + # the following line skips cpplint (only works in a git repo) + # comment the line when this package is in a git repo and when + # a copyright and license is added to all source files + set(ament_cmake_cpplint_FOUND TRUE) + ament_lint_auto_find_test_dependencies() +endif() + +ament_package() diff --git a/src/InteractionMsgs/package.xml b/src/InteractionMsgs/package.xml new file mode 100644 index 0000000..dbb8ddc --- /dev/null +++ b/src/InteractionMsgs/package.xml @@ -0,0 +1,18 @@ + + + + InteractionMsgs + 0.0.0 + TODO: Package description + niko + TODO: License declaration + + ament_cmake + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/src/ObjectiveFunctions/ObjectiveFunctions/__init__.py b/src/ObjectiveFunctions/ObjectiveFunctions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ObjectiveFunctions/package.xml b/src/ObjectiveFunctions/package.xml new file mode 100644 index 0000000..9806cd4 --- /dev/null +++ b/src/ObjectiveFunctions/package.xml @@ -0,0 +1,18 @@ + + + + ObjectiveFunctions + 0.0.0 + TODO: Package description + niko + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/ObjectiveFunctions/resource/ObjectiveFunctions b/src/ObjectiveFunctions/resource/ObjectiveFunctions new file mode 100644 index 0000000..e69de29 diff --git a/src/ObjectiveFunctions/setup.cfg b/src/ObjectiveFunctions/setup.cfg new file mode 100644 index 0000000..2c66535 --- /dev/null +++ b/src/ObjectiveFunctions/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/ObjectiveFunctions +[install] +install_scripts=$base/lib/ObjectiveFunctions diff --git a/src/ObjectiveFunctions/setup.py b/src/ObjectiveFunctions/setup.py new file mode 100644 index 0000000..c232c91 --- /dev/null +++ b/src/ObjectiveFunctions/setup.py @@ -0,0 +1,25 @@ +from setuptools import find_packages, setup + +package_name = 'ObjectiveFunctions' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='niko', + maintainer_email='nikolaus.feith@unileoben.ac.at', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --git a/src/ObjectiveFunctions/test/test_copyright.py b/src/ObjectiveFunctions/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/ObjectiveFunctions/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/ObjectiveFunctions/test/test_flake8.py b/src/ObjectiveFunctions/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/ObjectiveFunctions/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/ObjectiveFunctions/test/test_pep257.py b/src/ObjectiveFunctions/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/ObjectiveFunctions/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/Optimizers/Optimizers/__init__.py b/src/Optimizers/Optimizers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/Optimizers/package.xml b/src/Optimizers/package.xml new file mode 100644 index 0000000..9ed5d14 --- /dev/null +++ b/src/Optimizers/package.xml @@ -0,0 +1,18 @@ + + + + Optimizers + 0.0.0 + TODO: Package description + niko + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/Optimizers/resource/Optimizers b/src/Optimizers/resource/Optimizers new file mode 100644 index 0000000..e69de29 diff --git a/src/Optimizers/setup.cfg b/src/Optimizers/setup.cfg new file mode 100644 index 0000000..588328d --- /dev/null +++ b/src/Optimizers/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/Optimizers +[install] +install_scripts=$base/lib/Optimizers diff --git a/src/Optimizers/setup.py b/src/Optimizers/setup.py new file mode 100644 index 0000000..a038bdf --- /dev/null +++ b/src/Optimizers/setup.py @@ -0,0 +1,25 @@ +from setuptools import find_packages, setup + +package_name = 'Optimizers' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='niko', + maintainer_email='nikolaus.feith@unileoben.ac.at', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --git a/src/Optimizers/test/test_copyright.py b/src/Optimizers/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/Optimizers/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/Optimizers/test/test_flake8.py b/src/Optimizers/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/Optimizers/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/Optimizers/test/test_pep257.py b/src/Optimizers/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/Optimizers/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/RepresentationModels/RepresentationModels/__init__.py b/src/RepresentationModels/RepresentationModels/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/RepresentationModels/package.xml b/src/RepresentationModels/package.xml new file mode 100644 index 0000000..0a5f94f --- /dev/null +++ b/src/RepresentationModels/package.xml @@ -0,0 +1,18 @@ + + + + RepresentationModels + 0.0.0 + TODO: Package description + niko + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/RepresentationModels/resource/RepresentationModels b/src/RepresentationModels/resource/RepresentationModels new file mode 100644 index 0000000..e69de29 diff --git a/src/RepresentationModels/setup.cfg b/src/RepresentationModels/setup.cfg new file mode 100644 index 0000000..4b0d329 --- /dev/null +++ b/src/RepresentationModels/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/RepresentationModels +[install] +install_scripts=$base/lib/RepresentationModels diff --git a/src/RepresentationModels/setup.py b/src/RepresentationModels/setup.py new file mode 100644 index 0000000..a2bbff0 --- /dev/null +++ b/src/RepresentationModels/setup.py @@ -0,0 +1,25 @@ +from setuptools import find_packages, setup + +package_name = 'RepresentationModels' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='niko', + maintainer_email='nikolaus.feith@unileoben.ac.at', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --git a/src/RepresentationModels/test/test_copyright.py b/src/RepresentationModels/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/RepresentationModels/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/RepresentationModels/test/test_flake8.py b/src/RepresentationModels/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/RepresentationModels/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/RepresentationModels/test/test_pep257.py b/src/RepresentationModels/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/RepresentationModels/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings'