From 0135bfea929e1808e09c07384a870043377696b3 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Tue, 11 Jan 2022 16:27:22 +0900 Subject: [PATCH 01/53] [incompat] add httptransport. --- OpenRTM_aist/ext/http/HTTPTransport.py | 47 ++++++++++++++++++++++++++ OpenRTM_aist/ext/http/__init__.py | 1 + OpenRTM_aist/ext/http/rtc.http.conf | 10 ++++++ OpenRTM_aist/ext/http/rtc.https.conf | 14 ++++++++ OpenRTM_aist/ext/http/rtc.ws.conf | 10 ++++++ OpenRTM_aist/ext/http/rtc.wss.conf | 14 ++++++++ setup.py | 1 + 7 files changed, 97 insertions(+) create mode 100644 OpenRTM_aist/ext/http/HTTPTransport.py create mode 100644 OpenRTM_aist/ext/http/__init__.py create mode 100644 OpenRTM_aist/ext/http/rtc.http.conf create mode 100644 OpenRTM_aist/ext/http/rtc.https.conf create mode 100644 OpenRTM_aist/ext/http/rtc.ws.conf create mode 100644 OpenRTM_aist/ext/http/rtc.wss.conf diff --git a/OpenRTM_aist/ext/http/HTTPTransport.py b/OpenRTM_aist/ext/http/HTTPTransport.py new file mode 100644 index 00000000..0674d27d --- /dev/null +++ b/OpenRTM_aist/ext/http/HTTPTransport.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + +## +# @file HTTPTransport.py +# @brief HTTP Transport module +# @date $Date: $ +# @author Nobuhiko Miyamoto + + +import os +from omniORB import httpTP +import OpenRTM_aist + + +def HTTPTransportInit(manager): + + #os.environ['ORBtraceLevel'] = '25' + #os.environ['ORBendPoint'] = 'giop:http:ws://127.0.0.1:2810/ws' + #os.environ['ORBsslVerifyMode'] = "none" + + prop = manager.getConfig() + certificate_authority_file = prop.getProperty( + "corba.http.certificate_authority_file") + key_file = prop.getProperty("corba.http.key_file") + key_file_password = prop.getProperty("corba.http.key_file_password") + + corba_args = prop.getProperty("corba.args") + + if not ("giop:http" in corba_args): + corba_args += " -ORBendPoint giop:http:ws://127.0.0.1:8001/ws" + + if not OpenRTM_aist.toBool(prop.getProperty( + "manager.is_master"), "YES", "NO", True): + if not prop.getProperty("corba.endpoints"): + if not prop.getProperty("corba.endpoint"): + if str(prop.getProperty("corba.args")).find( + "-ORBendPoint") == -1: + corba_args += " -ORBendPoint giop:tcp::" + + prop.setProperty("corba.args", corba_args) + + if certificate_authority_file: + httpTP.set_CA(certificate_authority_file, None) + if key_file or key_file_password: + httpTP.set_key(key_file, key_file_password) diff --git a/OpenRTM_aist/ext/http/__init__.py b/OpenRTM_aist/ext/http/__init__.py new file mode 100644 index 00000000..932b7982 --- /dev/null +++ b/OpenRTM_aist/ext/http/__init__.py @@ -0,0 +1 @@ +# Empty file diff --git a/OpenRTM_aist/ext/http/rtc.http.conf b/OpenRTM_aist/ext/http/rtc.http.conf new file mode 100644 index 00000000..38f71370 --- /dev/null +++ b/OpenRTM_aist/ext/http/rtc.http.conf @@ -0,0 +1,10 @@ +logger.enable: YES +logger.log_level: DEBUG +#logger.file_name: stdout + +manager.modules.load_path: ./ +manager.preload.modules: HTTPTransport.py + +corba.args:-ORBserverTransportRule "* http" -ORBclientTransportRule "* http" -ORBendPoint giop:http:http:///call +corba.nameservers: http://127.0.0.1:2809/call +corba.master_manager: giop:http:http://127.0.0.1:2810/call diff --git a/OpenRTM_aist/ext/http/rtc.https.conf b/OpenRTM_aist/ext/http/rtc.https.conf new file mode 100644 index 00000000..fe9f59f2 --- /dev/null +++ b/OpenRTM_aist/ext/http/rtc.https.conf @@ -0,0 +1,14 @@ +logger.enable: YES +logger.log_level: DEBUG +#logger.file_name: stdout + +manager.modules.load_path: ./ +manager.preload.modules: HTTPTransport.py + +corba.http.certificate_authority_file:../ssl/test/root.crt +corba.http.key_file:../ssl/test/server.pem +corba.http.key_file_password:password + +corba.args:-ORBserverTransportRule "* http" -ORBclientTransportRule "* http" -ORBendPoint giop:http:https:///call +corba.nameservers: https://127.0.0.1:2809/call +corba.master_manager: giop:http:https://127.0.0.1:2810/call diff --git a/OpenRTM_aist/ext/http/rtc.ws.conf b/OpenRTM_aist/ext/http/rtc.ws.conf new file mode 100644 index 00000000..93aac207 --- /dev/null +++ b/OpenRTM_aist/ext/http/rtc.ws.conf @@ -0,0 +1,10 @@ +logger.enable: YES +logger.log_level: DEBUG +#logger.file_name: stdout + +manager.modules.load_path: ./ +manager.preload.modules: HTTPTransport.py + +corba.args:-ORBserverTransportRule "* http" -ORBclientTransportRule "* http" -ORBendPoint giop:http:ws:///ws +corba.nameservers: ws://127.0.0.1:2809/ws +corba.master_manager: giop:http:ws://127.0.0.1:2810/ws diff --git a/OpenRTM_aist/ext/http/rtc.wss.conf b/OpenRTM_aist/ext/http/rtc.wss.conf new file mode 100644 index 00000000..af38d952 --- /dev/null +++ b/OpenRTM_aist/ext/http/rtc.wss.conf @@ -0,0 +1,14 @@ +logger.enable: YES +logger.log_level: DEBUG +#logger.file_name: stdout + +manager.modules.load_path: ./ +manager.preload.modules: HTTPTransport.py + +corba.http.certificate_authority_file:../ssl/test/root.crt +corba.http.key_file:../ssl/test/server.pem +corba.http.key_file_password:password + +corba.args:-ORBserverTransportRule "* http" -ORBclientTransportRule "* http" -ORBendPoint giop:http:wss:///ws +corba.nameservers: wss://127.0.0.1:2809/ws +corba.master_manager: giop:http:wss://127.0.0.1:2810/ws diff --git a/setup.py b/setup.py index 82f54a46..75b67224 100755 --- a/setup.py +++ b/setup.py @@ -207,6 +207,7 @@ def os_is(): "OpenRTM_aist.ext.sdo", "OpenRTM_aist.ext.sdo.observer", "OpenRTM_aist.ext.ssl", + "OpenRTM_aist.ext.http", "OpenRTM_aist.ext.logger", "OpenRTM_aist.ext.logger.fluentlogger", "OpenRTM_aist.ext.transport", From 2608da8197650b9edf9ffb4f6ca3c5061c8ce998 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Tue, 11 Jan 2022 16:49:03 +0900 Subject: [PATCH 02/53] [compat] fixed ssl transport. --- OpenRTM_aist/ext/ssl/SSLTransport.py | 5 ++++- OpenRTM_aist/ext/ssl/rtc.ssl.conf | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 OpenRTM_aist/ext/ssl/rtc.ssl.conf diff --git a/OpenRTM_aist/ext/ssl/SSLTransport.py b/OpenRTM_aist/ext/ssl/SSLTransport.py index fe442559..a73acbad 100644 --- a/OpenRTM_aist/ext/ssl/SSLTransport.py +++ b/OpenRTM_aist/ext/ssl/SSLTransport.py @@ -27,7 +27,10 @@ def SSLTransportInit(manager): key_file_password = prop.getProperty("corba.ssl.key_file_password") corba_args = prop.getProperty("corba.args") - corba_args += " -ORBendPoint giop:ssl::" + + if not ("giop:ssl" in corba_args): + corba_args += " -ORBendPoint giop:ssl::" + if not OpenRTM_aist.toBool(prop.getProperty( "manager.is_master"), "YES", "NO", True): if not prop.getProperty("corba.endpoints"): diff --git a/OpenRTM_aist/ext/ssl/rtc.ssl.conf b/OpenRTM_aist/ext/ssl/rtc.ssl.conf new file mode 100644 index 00000000..b0ea8ac8 --- /dev/null +++ b/OpenRTM_aist/ext/ssl/rtc.ssl.conf @@ -0,0 +1,13 @@ +logger.enable: YES +logger.log_level: DEBUG +#logger.file_name: stdout + +manager.modules.load_path: ./ +manager.preload.modules: SSLTransport.py + +corba.ssl.certificate_authority_file:test/root.crt +corba.ssl.key_file:test/server.pem +corba.ssl.key_file_password:password +corba.args:-ORBserverTransportRule "* ssl" -ORBclientTransportRule "* ssl" -ORBendPoint giop:ssl:: +corba.nameservers: corbaloc:ssliop:127.0.0.1:2809 +corba.master_manager: giop:ssl:127.0.0.1:2810 From 2f3733455d0afdb03fc7459cc9720baeb41d3e9e Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Wed, 19 Jan 2022 15:41:50 +0900 Subject: [PATCH 03/53] [compat] fixed bugs. --- OpenRTM_aist/ModuleManager.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/OpenRTM_aist/ModuleManager.py b/OpenRTM_aist/ModuleManager.py index 76b42afe..d53e8b4c 100644 --- a/OpenRTM_aist/ModuleManager.py +++ b/OpenRTM_aist/ModuleManager.py @@ -925,7 +925,19 @@ def __init__(self, dll, prop): class DLLPred: def __init__(self, name=None, factory=None): - self._filepath = name or factory + if name is not None: + self._filepath = name + else: + self._filepath = factory.properties.getProperty( + "file_path") def __call__(self, dll): - return self._filepath == dll.properties.getProperty("file_path") + try: + return os.path.samefile( + self._filepath, + dll.properties.getProperty("file_path") + ) + except FileNotFoundError: + return self._filepath == dll.properties.getProperty("file_path") + except BaseException: + return False From c9b5fa51b7da6810f60d3a4a43365b318728a29a Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Sat, 5 Feb 2022 23:41:40 +0900 Subject: [PATCH 04/53] [compat] fixed bugs. --- OpenRTM_aist/PortBase.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRTM_aist/PortBase.py b/OpenRTM_aist/PortBase.py index 6b77578b..6bc59b0f 100644 --- a/OpenRTM_aist/PortBase.py +++ b/OpenRTM_aist/PortBase.py @@ -719,7 +719,7 @@ def notify_connect(self, connector_profile): for port in connector_profile.ports: if not port._is_equivalent(self._objref): ret = OpenRTM_aist.CORBA_RTCUtil.already_connected( - port, self._objref) + self._objref, port) if ret: return (RTC.PRECONDITION_NOT_MET, connector_profile) From 5ffb9c7cb7d13d805decb6e066f599187373285a Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Thu, 3 Mar 2022 14:58:02 +0900 Subject: [PATCH 05/53] [compat] fixed error message. --- OpenRTM_aist/Manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRTM_aist/Manager.py b/OpenRTM_aist/Manager.py index 15d9a538..4b1cce28 100644 --- a/OpenRTM_aist/Manager.py +++ b/OpenRTM_aist/Manager.py @@ -1446,7 +1446,7 @@ def initManager(self, argv): try: self._module.load(mpm_, basename_) except BaseException: - self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) + print(OpenRTM_aist.Logger.print_exception()) self._config.setProperty("manager.instance_name", self.formatString(self._config.getProperty("manager.instance_name"), self._config)) From e64eba74c7ee8705d763c6095959fa1b9c387ae1 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 12:22:17 +0900 Subject: [PATCH 06/53] [compat] add static code analysis workflow. --- .github/workflows/analysis.yaml | 16 +++++++++++++ scripts/ubuntu_2004_bandit/Dockerfile | 18 +++++++++++++++ scripts/ubuntu_2004_flake8/Dockerfile | 26 ++++++++++++++++++++++ scripts/ubuntu_2004_pycodestyle/Dockerfile | 26 ++++++++++++++++++++++ scripts/ubuntu_2004_pyflakes/Dockerfile | 26 ++++++++++++++++++++++ 5 files changed, 112 insertions(+) create mode 100644 .github/workflows/analysis.yaml create mode 100644 scripts/ubuntu_2004_bandit/Dockerfile create mode 100644 scripts/ubuntu_2004_flake8/Dockerfile create mode 100644 scripts/ubuntu_2004_pycodestyle/Dockerfile create mode 100644 scripts/ubuntu_2004_pyflakes/Dockerfile diff --git a/.github/workflows/analysis.yaml b/.github/workflows/analysis.yaml new file mode 100644 index 00000000..bde530b2 --- /dev/null +++ b/.github/workflows/analysis.yaml @@ -0,0 +1,16 @@ +name: Workflow for openrtm-aist-python static code analysis +on: [push, pull_request] +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + os: [ubuntu_2004_pycodestyle, ubuntu_2004_pyflakes, ubuntu_2004_flake8, ubuntu_2004_bandit] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: run unittest + run: | + export OPENRTMPYTHON_IMAGE=openrtm-aist-python:${{matrix.os}}-$(date +%s) + docker build .. --file scripts/${{matrix.os}}/Dockerfile --tag $OPENRTMPYTHON_IMAGE + docker run $OPENRTMPYTHON_IMAGE \ No newline at end of file diff --git a/scripts/ubuntu_2004_bandit/Dockerfile b/scripts/ubuntu_2004_bandit/Dockerfile new file mode 100644 index 00000000..66fb069b --- /dev/null +++ b/scripts/ubuntu_2004_bandit/Dockerfile @@ -0,0 +1,18 @@ +FROM ubuntu:20.04 + +COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python + +RUN apt update\ + && apt install -y --no-install-recommends\ + pip3\ + g++\ + ca-certificates\ + wget + + +RUN sudo pip3 install bandit\ + && sudo pip3 install --upgrade bandit + + +CMD cd /root/OpenRTM-aist-Python/\ + && bandit -r OpenRTM_aist diff --git a/scripts/ubuntu_2004_flake8/Dockerfile b/scripts/ubuntu_2004_flake8/Dockerfile new file mode 100644 index 00000000..6c168ff7 --- /dev/null +++ b/scripts/ubuntu_2004_flake8/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:20.04 + +COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python + +RUN apt update\ + && apt install -y --no-install-recommends\ + pip3\ + g++\ + ca-certificates\ + wget + + +RUN sudo pip3 install flake8\ + && sudo pip3 install --upgrade flake8 + + +CMD cd /root/OpenRTM-aist-Python/\ + && pyflakes OpenRTM_aist/*.py --ignore="E501,E265,E402"\ + && pyflakes OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/transport/ROS2Transport/*.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/transport/ROSTransport/*.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py --ignore="E501,E265"\ + && pyflakes OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py --ignore="E501,E265" diff --git a/scripts/ubuntu_2004_pycodestyle/Dockerfile b/scripts/ubuntu_2004_pycodestyle/Dockerfile new file mode 100644 index 00000000..338269bb --- /dev/null +++ b/scripts/ubuntu_2004_pycodestyle/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:20.04 + +COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python + +RUN apt update\ + && apt install -y --no-install-recommends\ + pip3\ + g++\ + ca-certificates\ + wget + + +RUN sudo pip3 install pycodestyle\ + && sudo pip3 install --upgrade pycodestyle + + +CMD cd /root/OpenRTM-aist-Python/\ + && pycodestyle OpenRTM_aist/*.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/transport/ROS2Transport/*.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/transport/ROSTransport/*.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py --ignore="E501,E265"\ + && pycodestyle OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py --ignore="E501,E265" diff --git a/scripts/ubuntu_2004_pyflakes/Dockerfile b/scripts/ubuntu_2004_pyflakes/Dockerfile new file mode 100644 index 00000000..7cc24da9 --- /dev/null +++ b/scripts/ubuntu_2004_pyflakes/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:20.04 + +COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python + +RUN apt update\ + && apt install -y --no-install-recommends\ + pip3\ + g++\ + ca-certificates\ + wget + + +RUN sudo pip3 install pyflakes\ + && sudo pip3 install --upgrade pyflakes + + +CMD cd /root/OpenRTM-aist-Python/\ + && pyflakes OpenRTM_aist/*.py\ + && pyflakes OpenRTM_aist/ext/http/HTTPTransport.py\ + && pyflakes OpenRTM_aist/ext/ssl/SSLTransport.py\ + && pyflakes OpenRTM_aist/ext/transport/OpenSplice/*.py\ + && pyflakes OpenRTM_aist/ext/transport/ROS2Transport/*.py\ + && pyflakes OpenRTM_aist/ext/transport/ROSTransport/*.py\ + && pyflakes OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py\ + && pyflakes OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py\ + && pyflakes OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py From efb16ab0fe78632692b2572501553fcad6ed34c3 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 12:24:34 +0900 Subject: [PATCH 07/53] [compat] fixed docker files. --- scripts/ubuntu_2004_bandit/Dockerfile | 2 +- scripts/ubuntu_2004_flake8/Dockerfile | 2 +- scripts/ubuntu_2004_pycodestyle/Dockerfile | 2 +- scripts/ubuntu_2004_pyflakes/Dockerfile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/ubuntu_2004_bandit/Dockerfile b/scripts/ubuntu_2004_bandit/Dockerfile index 66fb069b..5e722b4c 100644 --- a/scripts/ubuntu_2004_bandit/Dockerfile +++ b/scripts/ubuntu_2004_bandit/Dockerfile @@ -4,7 +4,7 @@ COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python RUN apt update\ && apt install -y --no-install-recommends\ - pip3\ + python3-pip\ g++\ ca-certificates\ wget diff --git a/scripts/ubuntu_2004_flake8/Dockerfile b/scripts/ubuntu_2004_flake8/Dockerfile index 6c168ff7..3740778b 100644 --- a/scripts/ubuntu_2004_flake8/Dockerfile +++ b/scripts/ubuntu_2004_flake8/Dockerfile @@ -4,7 +4,7 @@ COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python RUN apt update\ && apt install -y --no-install-recommends\ - pip3\ + python3-pip\ g++\ ca-certificates\ wget diff --git a/scripts/ubuntu_2004_pycodestyle/Dockerfile b/scripts/ubuntu_2004_pycodestyle/Dockerfile index 338269bb..e87f0c29 100644 --- a/scripts/ubuntu_2004_pycodestyle/Dockerfile +++ b/scripts/ubuntu_2004_pycodestyle/Dockerfile @@ -4,7 +4,7 @@ COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python RUN apt update\ && apt install -y --no-install-recommends\ - pip3\ + python3-pip\ g++\ ca-certificates\ wget diff --git a/scripts/ubuntu_2004_pyflakes/Dockerfile b/scripts/ubuntu_2004_pyflakes/Dockerfile index 7cc24da9..acdf4f6a 100644 --- a/scripts/ubuntu_2004_pyflakes/Dockerfile +++ b/scripts/ubuntu_2004_pyflakes/Dockerfile @@ -4,7 +4,7 @@ COPY OpenRTM-aist-Python /root/OpenRTM-aist-Python RUN apt update\ && apt install -y --no-install-recommends\ - pip3\ + python3-pip\ g++\ ca-certificates\ wget From 72dfc2f8ca8162a5f67275abce266d49e4855427 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 12:26:56 +0900 Subject: [PATCH 08/53] [compat] fixed docker files. --- scripts/ubuntu_2004_bandit/Dockerfile | 4 ++-- scripts/ubuntu_2004_flake8/Dockerfile | 4 ++-- scripts/ubuntu_2004_pycodestyle/Dockerfile | 4 ++-- scripts/ubuntu_2004_pyflakes/Dockerfile | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/ubuntu_2004_bandit/Dockerfile b/scripts/ubuntu_2004_bandit/Dockerfile index 5e722b4c..fb073165 100644 --- a/scripts/ubuntu_2004_bandit/Dockerfile +++ b/scripts/ubuntu_2004_bandit/Dockerfile @@ -10,8 +10,8 @@ RUN apt update\ wget -RUN sudo pip3 install bandit\ - && sudo pip3 install --upgrade bandit +RUN pip3 install bandit\ + && pip3 install --upgrade bandit CMD cd /root/OpenRTM-aist-Python/\ diff --git a/scripts/ubuntu_2004_flake8/Dockerfile b/scripts/ubuntu_2004_flake8/Dockerfile index 3740778b..d086e993 100644 --- a/scripts/ubuntu_2004_flake8/Dockerfile +++ b/scripts/ubuntu_2004_flake8/Dockerfile @@ -10,8 +10,8 @@ RUN apt update\ wget -RUN sudo pip3 install flake8\ - && sudo pip3 install --upgrade flake8 +RUN pip3 install flake8\ + && pip3 install --upgrade flake8 CMD cd /root/OpenRTM-aist-Python/\ diff --git a/scripts/ubuntu_2004_pycodestyle/Dockerfile b/scripts/ubuntu_2004_pycodestyle/Dockerfile index e87f0c29..a8bc538e 100644 --- a/scripts/ubuntu_2004_pycodestyle/Dockerfile +++ b/scripts/ubuntu_2004_pycodestyle/Dockerfile @@ -10,8 +10,8 @@ RUN apt update\ wget -RUN sudo pip3 install pycodestyle\ - && sudo pip3 install --upgrade pycodestyle +RUN pip3 install pycodestyle\ + && pip3 install --upgrade pycodestyle CMD cd /root/OpenRTM-aist-Python/\ diff --git a/scripts/ubuntu_2004_pyflakes/Dockerfile b/scripts/ubuntu_2004_pyflakes/Dockerfile index acdf4f6a..4f7ae984 100644 --- a/scripts/ubuntu_2004_pyflakes/Dockerfile +++ b/scripts/ubuntu_2004_pyflakes/Dockerfile @@ -10,8 +10,8 @@ RUN apt update\ wget -RUN sudo pip3 install pyflakes\ - && sudo pip3 install --upgrade pyflakes +RUN pip3 install pyflakes\ + && pip3 install --upgrade pyflakes CMD cd /root/OpenRTM-aist-Python/\ From d582a0104a64f6c4e395d65c98ef80988dafa7de Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 12:29:52 +0900 Subject: [PATCH 09/53] Update Dockerfile --- scripts/ubuntu_2004_flake8/Dockerfile | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/scripts/ubuntu_2004_flake8/Dockerfile b/scripts/ubuntu_2004_flake8/Dockerfile index d086e993..b0afdf23 100644 --- a/scripts/ubuntu_2004_flake8/Dockerfile +++ b/scripts/ubuntu_2004_flake8/Dockerfile @@ -15,12 +15,13 @@ RUN pip3 install flake8\ CMD cd /root/OpenRTM-aist-Python/\ - && pyflakes OpenRTM_aist/*.py --ignore="E501,E265,E402"\ - && pyflakes OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/transport/ROS2Transport/*.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/transport/ROSTransport/*.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py --ignore="E501,E265"\ - && pyflakes OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py --ignore="E501,E265" + && flake8 OpenRTM_aist/*.py\ + && flake8 OpenRTM_aist/ext/http/HTTPTransport.py\ + && flake8 OpenRTM_aist/ext/ssl/SSLTransport.py\ + && flake8 OpenRTM_aist/ext/transport/OpenSplice/*.py\ + && flake8 OpenRTM_aist/ext/transport/ROS2Transport/*.py\ + && flake8 OpenRTM_aist/ext/transport/ROSTransport/*.py\ + && flake8 OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py\ + && flake8 OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py\ + && flake8 OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py + From 83508443d2c640465e07fe2fb4a1e4d9cc50a135 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 12:36:47 +0900 Subject: [PATCH 10/53] [compat] fixed warnings. --- OpenRTM_aist/ConfigAdmin.py | 2 +- OpenRTM_aist/ConnectorListener.py | 2 +- OpenRTM_aist/InPortBase.py | 4 ++-- OpenRTM_aist/OutPortBase.py | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenRTM_aist/ConfigAdmin.py b/OpenRTM_aist/ConfigAdmin.py index b2fd2ff5..71e5fa0f 100644 --- a/OpenRTM_aist/ConfigAdmin.py +++ b/OpenRTM_aist/ConfigAdmin.py @@ -1701,7 +1701,7 @@ def __init__(self, name): return def __call__(self, conf): - if conf is None: + if conf is None or conf == 0: return False return self._name == conf.name diff --git a/OpenRTM_aist/ConnectorListener.py b/OpenRTM_aist/ConnectorListener.py index 5fa92488..795c1f0d 100644 --- a/OpenRTM_aist/ConnectorListener.py +++ b/OpenRTM_aist/ConnectorListener.py @@ -784,7 +784,7 @@ def notify(self, info, cdrdata): endian = info.properties.getProperty( "serializer.cdr.endian", "little") - if endian is not "little" and endian is not None: + if endian != "little" and endian is not None: # Maybe endian is ["little","big"] endian = OpenRTM_aist.split(endian, ",") # Maybe self._endian is "little" or "big" diff --git a/OpenRTM_aist/InPortBase.py b/OpenRTM_aist/InPortBase.py index d98425aa..c02534ac 100644 --- a/OpenRTM_aist/InPortBase.py +++ b/OpenRTM_aist/InPortBase.py @@ -898,7 +898,7 @@ def publishInterfaces(self, cprof): # marge ConnectorProfile for buffer property. prop.mergeProperties(conn_prop.getNode("dataport.inport")) - if not self.isExistingMarshalingType(prop): + if self._value is not None and not self.isExistingMarshalingType(prop): return RTC.RTC_ERROR # @@ -1008,7 +1008,7 @@ def subscribeInterfaces(self, cprof): # marge ConnectorProfile for buffer property. prop.mergeProperties(conn_prop.getNode("dataport.inport")) - if not self.isExistingMarshalingType(prop): + if self._value is not None and not self.isExistingMarshalingType(prop): return RTC.RTC_ERROR # diff --git a/OpenRTM_aist/OutPortBase.py b/OpenRTM_aist/OutPortBase.py index 7f9e45b4..c6ab706e 100644 --- a/OpenRTM_aist/OutPortBase.py +++ b/OpenRTM_aist/OutPortBase.py @@ -951,7 +951,7 @@ def publishInterfaces(self, cprof): """ prop.mergeProperties(conn_prop.getNode("dataport.outport")) - if not self.isExistingMarshalingType(prop): + if self._value is not None and not self.isExistingMarshalingType(prop): return RTC.RTC_ERROR # @@ -1039,7 +1039,7 @@ def subscribeInterfaces(self, cprof): """ prop.mergeProperties(conn_prop.getNode("dataport.outport")) - if not self.isExistingMarshalingType(prop): + if self._value is not None and not self.isExistingMarshalingType(prop): return RTC.RTC_ERROR # From 171729eb35f883e1a465392966b14051e23cb0a7 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 14:14:38 +0900 Subject: [PATCH 11/53] [compat] fixed warnings. --- OpenRTM_aist/CORBA_IORUtil.py | 3 ++ OpenRTM_aist/CSPInPort.py | 2 +- OpenRTM_aist/EventPort_pyfsm.py | 2 +- OpenRTM_aist/ExecutionContextWorker.py | 5 ++- OpenRTM_aist/ExtTrigExecutionContext.py | 4 +-- OpenRTM_aist/FiniteStateMachineComponent.py | 2 +- .../FiniteStateMachineComponentBase.py | 32 ----------------- OpenRTM_aist/GlobalFactory.py | 6 ++-- OpenRTM_aist/InPort.py | 6 ++-- OpenRTM_aist/InPortPushConnector.py | 2 +- OpenRTM_aist/Manager.py | 4 +-- OpenRTM_aist/OutPortDuplexConnector.py | 2 +- OpenRTM_aist/PeriodicECSharedComposite.py | 13 +++---- OpenRTM_aist/PeriodicExecutionContext.py | 18 +++++----- OpenRTM_aist/RTObject.py | 36 ++----------------- OpenRTM_aist/RTObjectBase.py | 10 +++--- OpenRTM_aist/__init__.py | 1 - 17 files changed, 40 insertions(+), 108 deletions(-) diff --git a/OpenRTM_aist/CORBA_IORUtil.py b/OpenRTM_aist/CORBA_IORUtil.py index 761558b0..4407327d 100755 --- a/OpenRTM_aist/CORBA_IORUtil.py +++ b/OpenRTM_aist/CORBA_IORUtil.py @@ -8,9 +8,12 @@ # @author Noriaki Ando # +import sys from omniORB import CORBA from omniORB import * from omniORB import any +from omniORB import cdrMarshal +from omniORB import cdrUnmarshal from IORProfile_idl import * from IORProfile_idl import _0__GlobalIDL endian = True diff --git a/OpenRTM_aist/CSPInPort.py b/OpenRTM_aist/CSPInPort.py index a082f036..9e3d205d 100644 --- a/OpenRTM_aist/CSPInPort.py +++ b/OpenRTM_aist/CSPInPort.py @@ -349,7 +349,7 @@ def getDataBufferMode(self, con, retry): if not self._syncmode: guard_ctrl = OpenRTM_aist.ScopedLock(self._ctrl._cond) if not self._thebuffer.empty(): - _, value = self._thebuffer.read(value) + _, value = self._thebuffer.read() if guard_ctrl is not None: del guard_ctrl self.notify() diff --git a/OpenRTM_aist/EventPort_pyfsm.py b/OpenRTM_aist/EventPort_pyfsm.py index 54e77bfc..c9cdf560 100644 --- a/OpenRTM_aist/EventPort_pyfsm.py +++ b/OpenRTM_aist/EventPort_pyfsm.py @@ -78,7 +78,7 @@ def __call__(self, info, cdrdata): return OpenRTM_aist.ConnectorListenerStatus.NO_CHANGE, cdrdata def run(self, data): - self._fsm.dispatch(pyfsm.Event(self._handler, data_)) + self._fsm.dispatch(pyfsm.Event(self._handler, data)) class EventConnListener(OpenRTM_aist.ConnectorListener): diff --git a/OpenRTM_aist/ExecutionContextWorker.py b/OpenRTM_aist/ExecutionContextWorker.py index a96547e3..7b35e6b9 100644 --- a/OpenRTM_aist/ExecutionContextWorker.py +++ b/OpenRTM_aist/ExecutionContextWorker.py @@ -534,12 +534,11 @@ def addComponent(self, comp): id_, comp)) del guard except BaseException: - del guard self._rtcout.RTC_ERROR("addComponent() failed.") return RTC.RTC_ERROR self._rtcout.RTC_DEBUG("addComponent() succeeded.") - if self._running == False: + if self._running is False: self.updateComponentList() return RTC.RTC_OK @@ -635,7 +634,7 @@ def removeComponent(self, comp): guard = OpenRTM_aist.ScopedLock(self._removedMutex) self._removedComps.append(rtobj_) del guard - if self._running == False: + if self._running is False: self.updateComponentList() return RTC.RTC_OK diff --git a/OpenRTM_aist/ExtTrigExecutionContext.py b/OpenRTM_aist/ExtTrigExecutionContext.py index 61b5c197..32110568 100644 --- a/OpenRTM_aist/ExtTrigExecutionContext.py +++ b/OpenRTM_aist/ExtTrigExecutionContext.py @@ -410,13 +410,13 @@ def onStopping(self): def onAddedComponent(self, rtobj): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._ticked == False: + if self._workerthread._ticked is False: self._worker.updateComponentList() return RTC.RTC_OK def onRemovedComponent(self, rtobj): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._ticked == False: + if self._workerthread._ticked is False: self._worker.updateComponentList() return RTC.RTC_OK diff --git a/OpenRTM_aist/FiniteStateMachineComponent.py b/OpenRTM_aist/FiniteStateMachineComponent.py index ed738bdc..d9db1de6 100644 --- a/OpenRTM_aist/FiniteStateMachineComponent.py +++ b/OpenRTM_aist/FiniteStateMachineComponent.py @@ -14,8 +14,8 @@ # Advanced Industrial Science and Technology (AIST), Japan # All rights reserved. - import OpenRTM_aist +import RTC import OpenRTM import OpenRTM__POA diff --git a/OpenRTM_aist/FiniteStateMachineComponentBase.py b/OpenRTM_aist/FiniteStateMachineComponentBase.py index ba844d19..81feaf47 100644 --- a/OpenRTM_aist/FiniteStateMachineComponentBase.py +++ b/OpenRTM_aist/FiniteStateMachineComponentBase.py @@ -282,38 +282,6 @@ def get_owned_contexts(self): # @endif # virtual ExecutionContext_ptr get_context(UniqueId exec_handle) - def get_owned_contexts(self): - return OpenRTM_aist.RTObject_impl.get_owned_contexts(self) - - ## - # @if jp - # @brief [CORBA interface] ExecutionContextを取得する - # - # 指定したハンドルの ExecutionContext を取得する。 - # ハンドルから ExecutionContext へのマッピングは、特定の RTC インスタンスに - # 固有である。ハンドルはこの RTC を attach_context した際に取得できる。 - # - # @param self - # @param ec_id 取得対象 ExecutionContext ハンドル - # - # @return ExecutionContext - # - # @else - # @brief [CORBA interface] Get ExecutionContext. - # - # Obtain a reference to the execution context represented by the given - # handle. - # The mapping from handle to context is specific to a particular RTC - # instance. The given handle must have been obtained by a previous call to - # attach_context on this RTC. - # - # @param ec_id ExecutionContext handle - # - # @return ExecutionContext - # - # @endif - # virtual ExecutionContext_ptr get_context(UniqueId exec_handle) - def get_context(self, ec_id): return OpenRTM_aist.RTObject_impl.get_context(self, ec_id) diff --git a/OpenRTM_aist/GlobalFactory.py b/OpenRTM_aist/GlobalFactory.py index 45b14876..bd7f9bcc 100644 --- a/OpenRTM_aist/GlobalFactory.py +++ b/OpenRTM_aist/GlobalFactory.py @@ -34,7 +34,7 @@ def __init__(self): # bool hasFactory(const Identifier& id) def hasFactory(self, id): - if not id in self._creators: + if id not in self._creators: return False return True @@ -64,7 +64,7 @@ def addFactory(self, id, creator): # ReturnCode removeFactory(const Identifier& id) def removeFactory(self, id): - if not id in self._creators: + if id not in self._creators: return self.NOT_FOUND del self._creators[id] @@ -73,7 +73,7 @@ def removeFactory(self, id): # AbstractClass* createObject(const Identifier& id) def createObject(self, id): - if not id in self._creators: + if id not in self._creators: print("Factory.createObject return None id: ", id) return None obj_ = self._creators[id]() diff --git a/OpenRTM_aist/InPort.py b/OpenRTM_aist/InPort.py index 8b24daf7..80a52b64 100644 --- a/OpenRTM_aist/InPort.py +++ b/OpenRTM_aist/InPort.py @@ -152,7 +152,7 @@ def isNew(self, names=None): self._rtcout.RTC_TRACE("isNew()") guard = OpenRTM_aist.ScopedLock(self._valueMutex) - if self._directNewData == True: + if self._directNewData is True: self._rtcout.RTC_TRACE( "isNew() returns true because of direct write.") return True @@ -226,7 +226,7 @@ def isNew(self, names=None): def isEmpty(self, names=None): self._rtcout.RTC_TRACE("isEmpty()") - if self._directNewData == True: + if self._directNewData is True: return False if not self._connectors: self._rtcout.RTC_DEBUG("no connectors") @@ -347,7 +347,7 @@ def read(self, name=None): self._rtcout.RTC_TRACE("OnRead called") guard = OpenRTM_aist.ScopedLock(self._valueMutex) - if self._directNewData == True: + if self._directNewData is True: self._rtcout.RTC_TRACE("Direct data transfer") if self._OnReadConvert is not None: diff --git a/OpenRTM_aist/InPortPushConnector.py b/OpenRTM_aist/InPortPushConnector.py index 044a6035..07088d48 100644 --- a/OpenRTM_aist/InPortPushConnector.py +++ b/OpenRTM_aist/InPortPushConnector.py @@ -346,7 +346,7 @@ def disconnect(self): self._provider = None # delete buffer - if self._buffer and self._deleteBuffer == True: + if self._buffer and self._deleteBuffer is True: bfactory = OpenRTM_aist.CdrBufferFactory.instance() self._buffer = None diff --git a/OpenRTM_aist/Manager.py b/OpenRTM_aist/Manager.py index 15d9a538..10c2fd5a 100644 --- a/OpenRTM_aist/Manager.py +++ b/OpenRTM_aist/Manager.py @@ -1160,7 +1160,7 @@ def createContext(self, ec_args): avail_ec_ = OpenRTM_aist.ExecutionContextFactory.instance().getIdentifiers() - if not ec_id in avail_ec_: + if ec_id not in avail_ec_: self._rtcout.RTC_ERROR("Factory not found: %s", ec_id) return None @@ -2098,7 +2098,7 @@ def initCpuAffinity(self): ret = OpenRTM_aist.setProcessAffinity(cpu_num) - if ret == False: + if ret is False: self._rtcout.RTC_ERROR("CPU affinity mask setting failed") ## diff --git a/OpenRTM_aist/OutPortDuplexConnector.py b/OpenRTM_aist/OutPortDuplexConnector.py index b95ef0e8..c38d003d 100644 --- a/OpenRTM_aist/OutPortDuplexConnector.py +++ b/OpenRTM_aist/OutPortDuplexConnector.py @@ -430,7 +430,7 @@ def setConsumer(self, consumer): def serializeData(self, data): if self._serializer is None: self._rtcout.RTC_ERROR("serializer creation failure.") - return self.UNKNOWN_ERROR, cdr_data + return self.UNKNOWN_ERROR, "" self._serializer.isLittleEndian(self._endian) ser_ret, cdr_data = self._serializer.serialize(data) if ser_ret == OpenRTM_aist.ByteDataStreamBase.SERIALIZE_NOT_SUPPORT_ENDIAN: diff --git a/OpenRTM_aist/PeriodicECSharedComposite.py b/OpenRTM_aist/PeriodicECSharedComposite.py index 0dc377d4..ac9e2d31 100644 --- a/OpenRTM_aist/PeriodicECSharedComposite.py +++ b/OpenRTM_aist/PeriodicECSharedComposite.py @@ -471,7 +471,7 @@ def addPort(self, member, portlist): "port_name: %s is in %s?", (port_name, OpenRTM_aist.flatten(portlist))) - if not port_name in portlist: + if port_name not in portlist: self._rtcout.RTC_DEBUG( "Not found: %s is in %s?", (port_name, OpenRTM_aist.flatten(portlist))) continue @@ -509,7 +509,7 @@ def removePort(self, member, portlist): "port_name: %s is in %s?", (port_name, OpenRTM_aist.flatten(portlist))) - if not port_name in portlist: + if port_name not in portlist: self._rtcout.RTC_DEBUG( "Not found: %s is in %s?", (port_name, OpenRTM_aist.flatten(portlist))) continue @@ -968,13 +968,8 @@ def onReset(self, exec_handle): sdos = self._org.get_members() for sdo in sdos: - orglist = rtc.get_owned_organizations() - for org in orglist: - child_sdos = org.get_members() - for child_sdo in child_sdos: - child = child_sdo._narrow(RTC.RTObject) - - self.resetChildComp(child) + rtc = sdo._narrow(RTC.RTObject) + self.resetChildComp(rtc) return RTC.RTC_OK diff --git a/OpenRTM_aist/PeriodicExecutionContext.py b/OpenRTM_aist/PeriodicExecutionContext.py index 7b9d3085..4d57eadf 100644 --- a/OpenRTM_aist/PeriodicExecutionContext.py +++ b/OpenRTM_aist/PeriodicExecutionContext.py @@ -149,7 +149,7 @@ def svc(self): if self._cpu: ret = OpenRTM_aist.setThreadAffinity(self._cpu) - if ret == False: + if ret is False: self._rtcout.RTC_ERROR("CPU affinity mask setting failed") while self.threadRunning(): @@ -631,13 +631,13 @@ def onStopping(self): def onAddedComponent(self, rtobj): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == False: + if self._workerthread._running is False: self._worker.updateComponentList() return RTC.RTC_OK def onRemovedComponent(self, rtobj): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == False: + if self._workerthread._running is False: self._worker.updateComponentList() return RTC.RTC_OK @@ -652,7 +652,7 @@ def onWaitingActivated(self, comp, count): # If worker thread is stopped, restart worker thread. if self.isRunning(): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == False: + if self._workerthread._running is False: self._workerthread._running = True self._workerthread._cond.acquire() self._workerthread._cond.notify() @@ -677,7 +677,7 @@ def onActivated(self, comp, count): # If worker thread is stopped, restart worker thread. if self.isRunning(): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == False: + if self._workerthread._running is False: self._workerthread._running = True self._workerthread._cond.acquire() self._workerthread._cond.notify() @@ -696,7 +696,7 @@ def onWaitingDeactivated(self, comp, count): self.getStateString(comp.getStates().next))) if self.isAllNextState(RTC.INACTIVE_STATE): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == True: + if self._workerthread._running is True: self._workerthread._running = False self._rtcout.RTC_TRACE( "All RTCs are INACTIVE. Stopping worker thread.") @@ -714,7 +714,7 @@ def onDeactivated(self, comp, count): self.getStateString(comp.getStates().next))) if self.isAllNextState(RTC.INACTIVE_STATE): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == True: + if self._workerthread._running is True: self._workerthread._running = False self._rtcout.RTC_TRACE( "All RTCs are INACTIVE. Stopping worker thread.") @@ -732,7 +732,7 @@ def onWaitingReset(self, comp, count): self.getStateString(comp.getStates().next))) if self.isAllNextState(RTC.INACTIVE_STATE): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == True: + if self._workerthread._running is True: self._workerthread._running = False self._rtcout.RTC_TRACE( "All RTCs are INACTIVE. Stopping worker thread.") @@ -750,7 +750,7 @@ def onReset(self, comp, count): self.getStateString(comp.getStates().next))) if self.isAllNextState(RTC.INACTIVE_STATE): guard = OpenRTM_aist.ScopedLock(self._workerthread._mutex) - if self._workerthread._running == True: + if self._workerthread._running is True: self._workerthread._running = False self._rtcout.RTC_TRACE( "All RTCs are INACTIVE. Stopping worker thread.") diff --git a/OpenRTM_aist/RTObject.py b/OpenRTM_aist/RTObject.py index 3c521dc2..df0e7607 100644 --- a/OpenRTM_aist/RTObject.py +++ b/OpenRTM_aist/RTObject.py @@ -4331,38 +4331,6 @@ def __call__(self, config_set_name): # removeConfigurationSetNameListener(ConfigurationSetNameListenerType type, # ConfigurationSetNameListener* listener); - def removeConfigurationSetNameListener(self, type, listener): - self._configsets.removeConfigurationSetNameListener(type, listener) - return - - ## - # @if jp - # - # @brief ConfigurationSetNameListener を削除する - # - # addConfigurationSetNameListener で追加されたリスナオブジェクトを - # 削除する。 - # - # @param type ConfigurationSetNameListenerType型の値。 - # ON_UPDATE_CONFIG_PARAM がある。 - # @param listener 与えたリスナオブジェクトへのポインタ - # - # @else - # - # @brief Removing ConfigurationSetNameListener - # - # This function removes a listener object which is added by - # addConfigurationSetNameListener() function. - # - # @param type ConfigurationSetNameListenerType value - # ON_UPDATE_CONFIG_PARAM is only allowed. - # @param listener a pointer to ConfigurationSetNameListener - # listener object. - # - # @endif - # void - # removeConfigurationSetNameListener(ConfigurationSetNameListenerType type, - # ConfigurationSetNameListener* listener); def removeConfigurationSetNameListener(self, type, listener): self._configsets.removeConfigurationSetNameListener(type, listener) return @@ -5215,7 +5183,7 @@ def createContexts(self, ec_args): (ec_type_, ec_name_)) else: # If EC's name is empty or no existing EC, create new EC. - if not ec_type_ in avail_ec_: + if ec_type_ not in avail_ec_: self._rtcout.RTC_WARN("EC %s is not available.", ec_type_) self._rtcout.RTC_DEBUG("Available ECs: %s", OpenRTM_aist.flatten(avail_ec_)) @@ -5245,7 +5213,7 @@ def createContexts(self, ec_args): default_prop.setDefaults(OpenRTM_aist.default_config) ec_type_ = default_prop.getProperty("exec_cxt.periodic.type") - if not ec_type_ in avail_ec_: + if ec_type_ not in avail_ec_: self._rtcout.RTC_WARN("EC %s is not available.", ec_type_) self._rtcout.RTC_DEBUG("Available ECs: %s", OpenRTM_aist.flatten(avail_ec_)) diff --git a/OpenRTM_aist/RTObjectBase.py b/OpenRTM_aist/RTObjectBase.py index 82623777..c9f645ea 100644 --- a/OpenRTM_aist/RTObjectBase.py +++ b/OpenRTM_aist/RTObjectBase.py @@ -5126,9 +5126,9 @@ def findExistingEC(self, ec_arg): if self._manager: eclist_ = self._manager.createdExecutionContexts() for e_ in eclist_: - if ec.getProperties().getProperty("type") == ec_arg.getProperty("type") and \ - ec.getProperties().getProperty("name") == ec_arg.getProperty("name"): - return RTC.RTC_OK, ec + if e_.getProperties().getProperty("type") == ec_arg.getProperty("type") and \ + e_.getProperties().getProperty("name") == ec_arg.getProperty("name"): + return RTC.RTC_OK, e_ return RTC.RTC_ERROR, None @@ -5151,7 +5151,7 @@ def createContexts(self, ec_args): (ec_type_, ec_name_)) else: # If EC's name is empty or no existing EC, create new EC. - if not ec_type_ in avail_ec_: + if ec_type_ not in avail_ec_: self._rtcout.RTC_WARN("EC %s is not available.", ec_type_) self._rtcout.RTC_DEBUG("Available ECs: %s", OpenRTM_aist.flatten(avail_ec_)) @@ -5182,7 +5182,7 @@ def createContexts(self, ec_args): ec_ = [None] ec_type_ = default_prop.getProperty("exec_cxt.periodic.type") - if not ec_type_ in avail_ec_: + if ec_type_ not in avail_ec_: self._rtcout.RTC_WARN("EC %s is not available.", ec_type_) self._rtcout.RTC_DEBUG("Available ECs: %s", OpenRTM_aist.flatten(avail_ec_)) diff --git a/OpenRTM_aist/__init__.py b/OpenRTM_aist/__init__.py index 01c9e51c..04075f26 100644 --- a/OpenRTM_aist/__init__.py +++ b/OpenRTM_aist/__init__.py @@ -128,7 +128,6 @@ from FsmObject import * from FiniteStateMachineComponent import * import Macho -from Timestamp import * from MultilayerCompositeEC import * #from MultilayerCompositeChildEC import * from ByteDataStreamBase import * From 577bfb88ab511b22d3ee364dde629cda2dcab866 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 14:19:10 +0900 Subject: [PATCH 12/53] [compat] fixed docker files. --- scripts/ubuntu_2004_flake8/Dockerfile | 18 +++++++++--------- scripts/ubuntu_2004_pycodestyle/Dockerfile | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/ubuntu_2004_flake8/Dockerfile b/scripts/ubuntu_2004_flake8/Dockerfile index b0afdf23..a7424df1 100644 --- a/scripts/ubuntu_2004_flake8/Dockerfile +++ b/scripts/ubuntu_2004_flake8/Dockerfile @@ -15,13 +15,13 @@ RUN pip3 install flake8\ CMD cd /root/OpenRTM-aist-Python/\ - && flake8 OpenRTM_aist/*.py\ - && flake8 OpenRTM_aist/ext/http/HTTPTransport.py\ - && flake8 OpenRTM_aist/ext/ssl/SSLTransport.py\ - && flake8 OpenRTM_aist/ext/transport/OpenSplice/*.py\ - && flake8 OpenRTM_aist/ext/transport/ROS2Transport/*.py\ - && flake8 OpenRTM_aist/ext/transport/ROSTransport/*.py\ - && flake8 OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py\ - && flake8 OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py\ - && flake8 OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py + && flake8 OpenRTM_aist/*.py --ignore="E501,E265,E402" --exclude=OpenRTM_aist/uuid.py\ + && flake8 OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/transport/ROS2Transport/*.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/transport/ROSTransport/*.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py --ignore="E501,E265,E402"\ + && flake8 OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py --ignore="E501,E265,E402" diff --git a/scripts/ubuntu_2004_pycodestyle/Dockerfile b/scripts/ubuntu_2004_pycodestyle/Dockerfile index a8bc538e..efcb476c 100644 --- a/scripts/ubuntu_2004_pycodestyle/Dockerfile +++ b/scripts/ubuntu_2004_pycodestyle/Dockerfile @@ -15,7 +15,7 @@ RUN pip3 install pycodestyle\ CMD cd /root/OpenRTM-aist-Python/\ - && pycodestyle OpenRTM_aist/*.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/*.py --ignore="E501,E265,E402" --exclude=OpenRTM_aist/uuid.py\ && pycodestyle OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265"\ && pycodestyle OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265"\ && pycodestyle OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265"\ From 4df2a3439f6e605fab3342dcef6e5226a9fb9a9a Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 14:30:51 +0900 Subject: [PATCH 13/53] [compat] fixed warnings. --- OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py | 2 +- OpenRTM_aist/ext/transport/OpenSplice/OpenSpliceInPort.py | 2 +- OpenRTM_aist/ext/transport/ROS2Transport/ROS2InPort.py | 2 +- OpenRTM_aist/ext/transport/ROSTransport/ROSOutPort.py | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py b/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py index d16b467e..a22d07fb 100644 --- a/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py +++ b/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py @@ -1005,7 +1005,7 @@ def __init__(self, coc, portname): self._portname = portname def onBufferWrite(self, info, cdrdata): - param = self._portname + ":" + info + msg_ = self._portname + ":" + info self._coc.updateStatus(OpenRTM.CONFIGURATION, msg_) return diff --git a/OpenRTM_aist/ext/transport/OpenSplice/OpenSpliceInPort.py b/OpenRTM_aist/ext/transport/OpenSplice/OpenSpliceInPort.py index 75cdb038..a592e64d 100644 --- a/OpenRTM_aist/ext/transport/OpenSplice/OpenSpliceInPort.py +++ b/OpenRTM_aist/ext/transport/OpenSplice/OpenSpliceInPort.py @@ -214,7 +214,7 @@ def put(self, data): self._rtcout.RTC_PARANOID("OpenSpliceInPort.put()") if not self._connector: self.onReceiverError(data) - return OpenRTM.PORT_ERROR + return data = self.onReceived(data) diff --git a/OpenRTM_aist/ext/transport/ROS2Transport/ROS2InPort.py b/OpenRTM_aist/ext/transport/ROS2Transport/ROS2InPort.py index 4d645ed5..c8b02bd8 100644 --- a/OpenRTM_aist/ext/transport/ROS2Transport/ROS2InPort.py +++ b/OpenRTM_aist/ext/transport/ROS2Transport/ROS2InPort.py @@ -245,7 +245,7 @@ def put(self, data): self._rtcout.RTC_PARANOID("ROS2InPort.put()") if not self._connector: self.onReceiverError(data) - return OpenRTM.PORT_ERROR + return data = self.onReceived(data) diff --git a/OpenRTM_aist/ext/transport/ROSTransport/ROSOutPort.py b/OpenRTM_aist/ext/transport/ROSTransport/ROSOutPort.py index fd580367..d3005092 100644 --- a/OpenRTM_aist/ext/transport/ROSTransport/ROSOutPort.py +++ b/OpenRTM_aist/ext/transport/ROSTransport/ROSOutPort.py @@ -36,7 +36,6 @@ import sys import threading import os -import time ## From 4dfa19d2ea8b62487fd24fe32362b11db22cb488 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 14:31:56 +0900 Subject: [PATCH 14/53] [compat] fixed Dockerfile. --- scripts/ubuntu_2004_pycodestyle/Dockerfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/ubuntu_2004_pycodestyle/Dockerfile b/scripts/ubuntu_2004_pycodestyle/Dockerfile index efcb476c..6c5e94df 100644 --- a/scripts/ubuntu_2004_pycodestyle/Dockerfile +++ b/scripts/ubuntu_2004_pycodestyle/Dockerfile @@ -16,11 +16,11 @@ RUN pip3 install pycodestyle\ CMD cd /root/OpenRTM-aist-Python/\ && pycodestyle OpenRTM_aist/*.py --ignore="E501,E265,E402" --exclude=OpenRTM_aist/uuid.py\ - && pycodestyle OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/transport/ROS2Transport/*.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/transport/ROSTransport/*.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py --ignore="E501,E265"\ - && pycodestyle OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py --ignore="E501,E265" + && pycodestyle OpenRTM_aist/ext/http/HTTPTransport.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/ssl/SSLTransport.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/transport/OpenSplice/*.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/transport/ROS2Transport/*.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/transport/ROSTransport/*.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/logger/fluentlogger/FluentLogger.py --ignore="E501,E265,E402"\ + && pycodestyle OpenRTM_aist/ext/fsm4rtc_observer/ComponentObserverConsumer.py --ignore="E501,E265,E402" From b6f0974d9443d4504b3343500a3c7fd191d4b886 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 4 Mar 2022 15:05:05 +0900 Subject: [PATCH 15/53] [compat] fixed workflow file name. --- .github/workflows/{analysis.yaml => static_code_analysis.yaml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{analysis.yaml => static_code_analysis.yaml} (91%) diff --git a/.github/workflows/analysis.yaml b/.github/workflows/static_code_analysis.yaml similarity index 91% rename from .github/workflows/analysis.yaml rename to .github/workflows/static_code_analysis.yaml index bde530b2..df04c274 100644 --- a/.github/workflows/analysis.yaml +++ b/.github/workflows/static_code_analysis.yaml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 - - name: run unittest + - name: run static code analysis run: | export OPENRTMPYTHON_IMAGE=openrtm-aist-python:${{matrix.os}}-$(date +%s) docker build .. --file scripts/${{matrix.os}}/Dockerfile --tag $OPENRTMPYTHON_IMAGE From 0cfa57ed0e4f3bd7caf27415df09c455e43b2505 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Mon, 7 Mar 2022 13:12:01 +0900 Subject: [PATCH 16/53] [compat] delete print message. --- OpenRTM_aist/CorbaNaming.py | 28 ++++++++-------------------- OpenRTM_aist/NamingManager.py | 12 ++++++++++++ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/OpenRTM_aist/CorbaNaming.py b/OpenRTM_aist/CorbaNaming.py index 6660a1f7..08184045 100644 --- a/OpenRTM_aist/CorbaNaming.py +++ b/OpenRTM_aist/CorbaNaming.py @@ -86,15 +86,11 @@ def __init__(self, orb, name_server=None): if name_server: self._nameServer = "corbaloc::" + name_server + "/NameService" - try: - obj = orb.string_to_object(self._nameServer) - self._rootContext = obj._narrow(CosNaming.NamingContext) - if CORBA.is_nil(self._rootContext): - print("CorbaNaming: Failed to narrow the root naming context.") - - except CORBA.ORB.InvalidName: - self.__print_exception() - print("Service required is invalid [does not exist].") + obj = orb.string_to_object(self._nameServer) + self._rootContext = obj._narrow(CosNaming.NamingContext) + if CORBA.is_nil(self._rootContext): + print("CorbaNaming: Failed to narrow the root naming context.") + raise MemoryError return @@ -346,14 +342,12 @@ def rebind(self, name_list, obj, force=True): if force: self.rebindRecursive(self._rootContext, name_list, obj) else: - self.__print_exception() raise except CosNaming.NamingContext.CannotProceed as err: if force: self.rebindRecursive(err.cxt, err.rest_of_name, obj) else: - self.__print_exception() raise ## @@ -570,12 +564,8 @@ def resolve(self, name): else: name_ = name - try: - obj = self._rootContext.resolve(name_) - return obj - except CosNaming.NamingContext.NotFound: - self.__print_exception() - return None + obj = self._rootContext.resolve(name_) + return obj ## # @if jp @@ -614,7 +604,7 @@ def unbind(self, name): try: self._rootContext.unbind(name_) except BaseException: - self.__print_exception() + raise return @@ -679,14 +669,12 @@ def bindNewContext(self, name, force=True): if force: self.bindRecursive(self._rootContext, name_, self.newContext()) else: - self.__print_exception() raise except CosNaming.NamingContext.CannotProceed as err: if force: self.bindRecursive( err.cxt, err.rest_of_name, self.newContext()) else: - self.__print_exception() raise return None diff --git a/OpenRTM_aist/NamingManager.py b/OpenRTM_aist/NamingManager.py index 530ab2a6..92ebc7bd 100644 --- a/OpenRTM_aist/NamingManager.py +++ b/OpenRTM_aist/NamingManager.py @@ -353,6 +353,8 @@ def string_to_component(self, name): rtc_list.append(obj) return rtc_list except BaseException: + self._rtcout.RTC_ERROR( + OpenRTM_aist.Logger.print_exception()) return [] return rtc_list @@ -672,6 +674,8 @@ def bindObject(self, name, rtobj): try: n.ns.bindObject(name, rtobj) except BaseException: + self._rtcout.RTC_DEBUG( + OpenRTM_aist.Logger.print_exception()) del n.ns n.ns = None @@ -685,6 +689,8 @@ def bindManagerObject(self, name, mgr): try: n.ns.bindObject(name, mgr) except BaseException: + self._rtcout.RTC_DEBUG( + OpenRTM_aist.Logger.print_exception()) del n.ns n.ns = None @@ -715,6 +721,8 @@ def bindPortObject(self, name, port): try: n.ns.bindPortObject(name, port) except BaseException: + self._rtcout.RTC_DEBUG( + OpenRTM_aist.Logger.print_exception()) del n.ns n.ns = None self.registerPortName(name, port) @@ -756,6 +764,8 @@ def update(self): del name.ns name.ns = None except BaseException: + self._rtcout.RTC_DEBUG( + OpenRTM_aist.Logger.print_exception()) self._rtcout.RTC_INFO("Name server: %s (%s) disappeared.", (name.nsname, name.method)) @@ -873,6 +883,7 @@ def createNamingObj(self, method, name_server): (method, name_server)) return name except BaseException: + self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception()) self._rtcout.RTC_INFO("NameServer connection failed: %s/%s", (method, name_server)) return None @@ -1052,6 +1063,7 @@ def retryConnection(self, ns): (ns.method, ns.nsname)) except BaseException: + self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception()) self._rtcout.RTC_DEBUG("Name server: %s/%s disappeared again.", (ns.method, ns.nsname)) if nsobj is not None: From 84b716398d070efa8a1c88031bcab2e279ae7b4f Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Mon, 7 Mar 2022 13:14:11 +0900 Subject: [PATCH 17/53] [compat] delete print message. --- OpenRTM_aist/examples/SimpleIO/Connector.py | 1 - 1 file changed, 1 deletion(-) diff --git a/OpenRTM_aist/examples/SimpleIO/Connector.py b/OpenRTM_aist/examples/SimpleIO/Connector.py index 2ce689ce..848c1693 100644 --- a/OpenRTM_aist/examples/SimpleIO/Connector.py +++ b/OpenRTM_aist/examples/SimpleIO/Connector.py @@ -136,7 +136,6 @@ def main(): skip_count)) ret, conprof = pin[0].connect(conprof) - print(ret) # activate ConsoleIn0 eclistin = inobj.get_owned_contexts() From 390576c6fb6b7bf1e003c39a8a15834d7935e2f1 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Mon, 7 Mar 2022 13:48:45 +0900 Subject: [PATCH 18/53] [compat] delete print message. --- OpenRTM_aist/CorbaNaming.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/OpenRTM_aist/CorbaNaming.py b/OpenRTM_aist/CorbaNaming.py index 08184045..a26611f8 100644 --- a/OpenRTM_aist/CorbaNaming.py +++ b/OpenRTM_aist/CorbaNaming.py @@ -601,10 +601,7 @@ def unbind(self, name): else: name_ = name - try: - self._rootContext.unbind(name_) - except BaseException: - raise + self._rootContext.unbind(name_) return From d48108e2aec25f6e2fda6d0dd5ee3391fc3dac30 Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Wed, 9 Mar 2022 17:32:59 +0900 Subject: [PATCH 19/53] [compat] replaced tabs with spaces. --- OpenRTM_aist/examples/TkLRFViewer/TkLRFViewer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRTM_aist/examples/TkLRFViewer/TkLRFViewer.py b/OpenRTM_aist/examples/TkLRFViewer/TkLRFViewer.py index 30c1b3db..7383786e 100644 --- a/OpenRTM_aist/examples/TkLRFViewer/TkLRFViewer.py +++ b/OpenRTM_aist/examples/TkLRFViewer/TkLRFViewer.py @@ -433,8 +433,8 @@ def draw(self): def range_to_pos(self, data): pos = [] pre_d = 0 - scale_adj = 100.0 # change from 1 dot/m to 100 dot/m (dot/cm) - scale_threshold = 0.01 # change threshold value from m unit to cm unit + scale_adj = 100.0 # change from 1 dot/m to 100 dot/m (dot/cm) + scale_threshold = 0.01 # change threshold value from m unit to cm unit tfilter = self.tfilter_check.get() sfilter = self.sfilter_check.get() thresh = self.threshold_check.get() From c75f3e18dbbe81c5ec09ccd85808fa4de417c941 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Wed, 23 Mar 2022 19:38:01 +0900 Subject: [PATCH 20/53] [incompat] Fixed a bug that runs create_component twice. --- OpenRTM_aist/ManagerServant.py | 53 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/OpenRTM_aist/ManagerServant.py b/OpenRTM_aist/ManagerServant.py index 5e5e4159..ed8f4ee3 100644 --- a/OpenRTM_aist/ManagerServant.py +++ b/OpenRTM_aist/ManagerServant.py @@ -494,20 +494,21 @@ def create_component(self, module_name): self._rtcout.RTC_TRACE("create_component(%s)", module_name) - rtc = self.createComponentByAddress(module_name) + rtc, module_name, manager_address = self.createComponentByAddress( + module_name) + if not CORBA.is_nil(rtc): return rtc + elif manager_address: + return RTC.RTObject._nil - rtc = self.createComponentByManagerName(module_name) + rtc, module_name, manager_name = self.createComponentByManagerName( + module_name) if not CORBA.is_nil(rtc): return rtc - - #module_name = module_name.split("&")[0] - _, module_name = self.getParameterByModulename( - "manager_address", module_name) - manager_name, module_name = self.getParameterByModulename( - "manager_name", module_name) + elif manager_name: + return RTC.RTObject._nil comp_param = CompParam(module_name) @@ -532,7 +533,7 @@ def create_component(self, module_name): if not manager_name: module_name = module_name + "&manager_name=manager_%p" - rtc = self.createComponentByManagerName(module_name) + rtc, _, _ = self.createComponentByManagerName(module_name) return rtc else: @@ -1375,7 +1376,7 @@ def createComponentByManagerName(self, module_name): mgrstr, arg = self.getParameterByModulename("manager_name", arg) if not mgrstr: - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr if mgrstr == "manager_%p": mgrobj = RTM.Manager._nil @@ -1400,9 +1401,8 @@ def createComponentByManagerName(self, module_name): ".manager_cmd") load_path = config.getProperty("manager.modules.load_path") - load_path_language = config.getProperty( - "manager.modules." + comp_param.language() + ".load_paths") - load_path = load_path + "," + load_path_language + lang_path_key = "manager.modules." + comp_param.language() + ".load_paths" + load_path_language = config.getProperty(lang_path_key) if os.name == "nt": cmd = "cmd /c " + rtcd_cmd @@ -1418,6 +1418,7 @@ def createComponentByManagerName(self, module_name): config.getProperty("manager.name") cmd += " -o " + "manager.instance_name:" + mgrstr cmd += " -o " + "\"manager.modules.load_path:" + load_path + "\"" + cmd += " -o " + "\"" + lang_path_key + ":" + load_path_language + "\"" cmd += " -o " + "manager.supported_languages:" + comp_param.language() cmd += " -o " + "manager.shutdown_auto:NO" @@ -1447,7 +1448,7 @@ def createComponentByManagerName(self, module_name): if ret == -1: self._rtcout.RTC_DEBUG("%s: failed", cmd) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr time.sleep(0.01) count = 0 @@ -1488,7 +1489,7 @@ def createComponentByManagerName(self, module_name): if CORBA.is_nil(mgrobj): self._rtcout.RTC_WARN("Manager cannot be found.") - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr self._rtcout.RTC_DEBUG("Creating component on %s", mgrstr) self._rtcout.RTC_DEBUG("arg: %s", arg) @@ -1496,15 +1497,15 @@ def createComponentByManagerName(self, module_name): try: rtobj = mgrobj.create_component(arg) - return rtobj + return rtobj, arg, mgrstr except CORBA.SystemException: self._rtcout.RTC_DEBUG( "Exception was caught while creating component.") self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr except BaseException: self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception()) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr ## # @if jp @@ -1528,12 +1529,12 @@ def createComponentByAddress(self, module_name): mgrstr, arg = self.getParameterByModulename("manager_address", arg) if not mgrstr: - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr mgrvstr = mgrstr.split(":") if len(mgrvstr) != 2: self._rtcout.RTC_WARN("Invalid manager address: %s", mgrstr) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr # find manager mgrobj = self.findManager(mgrstr) @@ -1555,7 +1556,7 @@ def createComponentByAddress(self, module_name): load_path = config.getProperty("manager.modules.load_path") load_path_language = config.getProperty( - "manager.modules." + comp_param.language() + ".load_path") + "manager.modules." + comp_param.language() + ".load_paths") load_path = load_path + "," + load_path_language if os.name == "nt": @@ -1574,7 +1575,7 @@ def createComponentByAddress(self, module_name): if ret == -1: self._rtcout.RTC_DEBUG("%s: failed", cmd) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr # find manager time.sleep(0.01) @@ -1593,22 +1594,22 @@ def createComponentByAddress(self, module_name): if CORBA.is_nil(mgrobj): self._rtcout.RTC_WARN("Manager cannot be found.") - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr self._rtcout.RTC_DEBUG("Creating component on %s", mgrstr) self._rtcout.RTC_DEBUG("arg: %s", arg) try: rtobj = mgrobj.create_component(arg) self._rtcout.RTC_DEBUG("Component created %s", arg) - return rtobj + return rtobj, arg, mgrstr except CORBA.SystemException: self._rtcout.RTC_DEBUG( "Exception was caught while creating component.") self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception()) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr except BaseException: self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception()) - return RTC.RTObject._nil + return RTC.RTObject._nil, arg, mgrstr ## # @if jp From 591a3d6d53e620f732a7d5bb8431b4783cf39b6a Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Wed, 23 Mar 2022 19:42:19 +0900 Subject: [PATCH 21/53] [compat] fixed bugs. --- OpenRTM_aist/ModuleManager.py | 25 ++++++++++++++++++------- OpenRTM_aist/StringUtil.py | 8 ++++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/OpenRTM_aist/ModuleManager.py b/OpenRTM_aist/ModuleManager.py index d53e8b4c..6e02a637 100644 --- a/OpenRTM_aist/ModuleManager.py +++ b/OpenRTM_aist/ModuleManager.py @@ -98,9 +98,14 @@ def __init__(self, prop): self._rtcout = self._mgr.getLogbuf("ModuleManager") self._modprofs = [] self._loadfailmods = {} - langs = self._properties.getProperty( - "manager.supported_languages").split(",") - for lang in langs: + if OpenRTM_aist.toBool(prop.getProperty("manager.is_master"), + "YES", "NO", False): + self._supported_languages = self._properties.getProperty( + "manager.supported_languages").split(",") + else: + self._supported_languages = ["Python", "Python3"] + + for lang in self._supported_languages: lang = lang.strip() self._loadfailmods[lang] = [] @@ -271,7 +276,14 @@ def load(self, file_name, init_func=None): file_path = file_name else: - file_path = self.findFile(file_name, self._loadPath) + paths = self._properties.getProperty( + "manager.modules.Python.load_paths").split(",") + paths.extend(self._properties.getProperty( + "manager.modules.Python3.load_paths").split(",")) + paths.extend(self._loadPath) + + file_path = self.findFile(file_name, paths) + if not file_path: raise ModuleManager.FileNotFound(file_name) @@ -731,13 +743,12 @@ def deleteSamePath(self, paths): def getLoadableModules(self): self._rtcout.RTC_TRACE("getLoadableModules()") # getting loadable module file path list. - langs = self._properties.getProperty( - "manager.supported_languages").split(",") + self._rtcout.RTC_DEBUG( "langs: %s", self._properties.getProperty("manager.supported_languages")) - for lang in langs: + for lang in self._supported_languages: lang = lang.strip() modules_ = [] diff --git a/OpenRTM_aist/StringUtil.py b/OpenRTM_aist/StringUtil.py index 586e5b6a..810a48be 100644 --- a/OpenRTM_aist/StringUtil.py +++ b/OpenRTM_aist/StringUtil.py @@ -767,10 +767,10 @@ def findFile(dir, filename, filelist): for d in dirs: if os.path.isdir(d): findFile(d, filename, filelist) - files = glob.glob(os.path.join(dir, filename)) - for f in files: - if os.path.isfile(d): - filelist.append(f) + files = glob.glob(os.path.join(dir, filename)) + for f in files: + if os.path.isfile(f): + filelist.append(f) ## From 13ee351808b68f221c2188d3b13f519f63311fdc Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Tue, 29 Mar 2022 10:51:30 +0900 Subject: [PATCH 22/53] [compat] fixed bugs for loading logger plugin. --- OpenRTM_aist/Manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRTM_aist/Manager.py b/OpenRTM_aist/Manager.py index 4277fdaa..da4fffd3 100644 --- a/OpenRTM_aist/Manager.py +++ b/OpenRTM_aist/Manager.py @@ -1599,7 +1599,7 @@ def initLogstreamPlugins(self): for mod_ in lmod_: if not mod_: continue - basename_ = mod_.split(".")[0] + "Init" + basename_ = os.path.basename(mod_).split(".")[0] + "Init" try: self._module.load(mod_, basename_) except BaseException: From 08d58202000c43e71bb333bc3f91e50b1148645f Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 1 Apr 2022 17:13:14 +0900 Subject: [PATCH 23/53] [compat] fixed bugs. --- OpenRTM_aist/ModuleManager.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenRTM_aist/ModuleManager.py b/OpenRTM_aist/ModuleManager.py index 6e02a637..e7589048 100644 --- a/OpenRTM_aist/ModuleManager.py +++ b/OpenRTM_aist/ModuleManager.py @@ -79,7 +79,7 @@ def __init__(self, prop): for i, cp in enumerate(self._configPath): self._configPath[i] = OpenRTM_aist.eraseHeadBlank( cp) - self._loadPath = prop.getProperty(MOD_LOADPTH, "./").split(",") + self._loadPath = prop.getProperty(MOD_LOADPTH).split(",") for i, lp in enumerate(self._loadPath): self._loadPath[i] = OpenRTM_aist.eraseHeadBlank(lp) @@ -507,7 +507,13 @@ def __getRtcProfile(self, fname): except BaseException: pass - imp_file = __import__(basename.split(".")[0]) + try: + imp_file = __import__(basename.split(".")[0]) + except: + self._rtcout.RTC_WARN("Module import failed %s", fullname) + self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception()) + return None + comp_spec = getattr(imp_file, comp_spec_name, None) if not comp_spec: return None From 8b10702e32941d434b9608a23573566cc8567152 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 1 Apr 2022 17:25:03 +0900 Subject: [PATCH 24/53] [compat] Slider Component supported Python 3.10. --- OpenRTM_aist/examples/Slider_and_Motor/slider.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenRTM_aist/examples/Slider_and_Motor/slider.py b/OpenRTM_aist/examples/Slider_and_Motor/slider.py index 2dfc1ef9..0ae0145d 100644 --- a/OpenRTM_aist/examples/Slider_and_Motor/slider.py +++ b/OpenRTM_aist/examples/Slider_and_Motor/slider.py @@ -5,7 +5,7 @@ from __future__ import print_function import time -import dummy_threading +import threading import sys if sys.version_info[0] == 2: from Tkinter import * @@ -28,7 +28,7 @@ def init(self, channels): i = 0 for channel in self._channels: - self.var.append(DoubleVar(0)) + self.var.append(DoubleVar(value=0)) self.scales.append( Scale(self, label=channel[0], variable=self.var[i], to=channel[1], orient=VERTICAL)) @@ -57,7 +57,7 @@ def set(self, value): def test(): channels = (("angle", 0, 360, 0.1, 200), ("velocity", -100, 100, 0.1, 200)) slider = SliderMulti(channels) - sth = dummy_threading.Thread(target=slider.mainloop, args=()) + sth = threading.Thread(target=slider.mainloop, args=()) sth.start() # thread.start_new_thread(slider.mainloop, ()) From 3f35e06986948fe9a9b83977309cf37e311c8bb6 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Tue, 5 Apr 2022 14:00:21 +0900 Subject: [PATCH 25/53] [compat] fixed bugs. --- OpenRTM_aist/OutPortDSConsumer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenRTM_aist/OutPortDSConsumer.py b/OpenRTM_aist/OutPortDSConsumer.py index 4b3f585f..2183717d 100644 --- a/OpenRTM_aist/OutPortDSConsumer.py +++ b/OpenRTM_aist/OutPortDSConsumer.py @@ -193,10 +193,11 @@ def setListener(self, info, listeners): # # virtual ReturnCode get(cdrMemoryStream& data); - def get(self, data): + def get(self): self._rtcout.RTC_PARANOID("get()") try: + data = None dataservice = self._ptr() ret, cdr_data = dataservice.pull() From 674bed63b17fbad8807b3f196097f29ffb7d1410 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Mon, 18 Apr 2022 17:10:29 +0900 Subject: [PATCH 26/53] [compat] fixed rtcd and rtcprof command. --- OpenRTM_aist/DefaultConfiguration.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/OpenRTM_aist/DefaultConfiguration.py b/OpenRTM_aist/DefaultConfiguration.py index ab521f37..2ab66374 100644 --- a/OpenRTM_aist/DefaultConfiguration.py +++ b/OpenRTM_aist/DefaultConfiguration.py @@ -23,14 +23,20 @@ cpp_suffixes = "dll" supported_languages = "C++, Python, Java" lang = "Python" + rtcd_cpp_command = "rtcd" + rtcprof_cpp_command = "rtcprof" elif os.name == "posix": cpp_suffixes = "so" supported_languages = "C++, Python, Python3, Java" lang = "Python3" + rtcd_cpp_command = "rtcd2" + rtcprof_cpp_command = "rtcprof2" else: cpp_suffixes = "dylib" supported_languages = "C++, Python, Python3, Java" lang = "Python3" + rtcd_cpp_command = "rtcd" + rtcprof_cpp_command = "rtcprof" ## # @if jp @@ -90,11 +96,11 @@ "manager.auto_shutdown_duration", "20.0", "manager.termination_waittime", "1.0", "manager.name", "manager", - "manager.command", "rtcd", + "manager.command", "rtcd_python", "manager.nameservers", "default", "manager.language", lang, "manager.components.naming_policy", "process_unique", - "manager.modules.C++.manager_cmd", "rtcd", + "manager.modules.C++.manager_cmd", rtcd_cpp_command, "manager.modules.Python.manager_cmd", "rtcd_python", "manager.modules.Java.manager_cmd", "rtcd_java", "manager.modules.search_auto", "YES", @@ -102,7 +108,7 @@ "sdo.service.provider.enabled_services", "ALL", "sdo.service.consumer.enabled_services", "ALL", "manager.supported_languages", supported_languages, - "manager.modules.C++.profile_cmd", "rtcprof", + "manager.modules.C++.profile_cmd", rtcprof_cpp_command, "manager.modules.Python.profile_cmd", "rtcprof_python", "manager.modules.Java.profile_cmd", "rtcprof_java", "manager.modules.C++.suffixes", cpp_suffixes, From d271fd18dfa5b271b8de6c7483db23381bf5435b Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Fri, 22 Apr 2022 17:29:49 +0900 Subject: [PATCH 27/53] Create deb packages for openrtm2-python3. --- packages/deb/debian/changelog | 49 +---------------------------------- packages/deb/debian/control | 10 +++---- packages/deb/debian/copyright | 2 +- packages/deb/debian/rules | 10 +++---- packages/deb/dpkg_build.sh | 22 ++++++++-------- 5 files changed, 23 insertions(+), 70 deletions(-) diff --git a/packages/deb/debian/changelog b/packages/deb/debian/changelog index 47ef2590..bcd90ccb 100644 --- a/packages/deb/debian/changelog +++ b/packages/deb/debian/changelog @@ -1,53 +1,6 @@ -openrtm-aist-python (2.0.0-0) experimental; urgency=low +openrtm2-python3 (2.0.0-0) experimental; urgency=low * 2.0.0-0 (2.0.0-RELEASE). OpenRTM-aist-2.0.0-RELEASE -- Noriaki Ando Thu, 29 Jul 2021 12:39:34 +0900 -openrtm-aist-python (1.2.2-0) experimental; urgency=low - - * 1.2.2-0 (1.2.2-RELEASE). OpenRTM-aist-1.2.2-RELEASE - - -- Noriaki Ando Mon, 23 Mar 2020 16:22:17 +0900 - -openrtm-aist-python (1.2.1-0) experimental; urgency=low - - * 1.2.1-0 (1.2.1-RELEASE). OpenRTM-aist-1.2.1-RELEASE - - -- Noriaki Ando Fri, 24 May 2019 11:05:32 +0900 - -openrtm-aist-python (1.2.0-0) experimental; urgency=low - - * 1.2.0-0 (1.2.0-RELEASE). OpenRTM-aist-1.2.0-RELEASE - - -- Noriaki Ando Wed, 16 Nov 2016 18:12:17 +0900 - -openrtm-aist-python (1.1.2-0) experimental; urgency=low - - * 1.1.2-0 (1.1.2-RELEASE). OpenRTM-aist-1.1.2-RELEASE - - -- Noriaki Ando Tue, 23 Feb 2016 15:35:39 +0900 - -openrtm-aist-python (1.1.1-0) precise; urgency=low - - * 1.1.1-0 (1.1.1-RELEASE). OpenRTM-aist-1.1.1-RELEASE - - -- Noriaki Ando Wed, 21 Oct 2015 15:40:25 +0900 - -openrtm-aist-python (1.1.0-2) experimental; urgency=low - - * 1.1.0-2 (1.1.0-RELEASE). OpenRTM-aist-1.1.0-RELEASE - - -- Noriaki Ando Fri, 26 Apr 2013 03:00:00 +0900 - -openrtm-aist-python (1.1.0-1) experimental; urgency=low - - * 1.1.0-1 (1.1.0-RELEASE). OpenRTM-aist-1.1.0-RELEASE - - -- Noriaki Ando Fri, 26 Apr 2013 02:00:00 +0900 - -openrtm-aist-python (1.1.0-0) experimental; urgency=low - - * 1.1.0-0 (1.1.0-RELEASE). OpenRTM-aist-1.1.0-RELEASE - - -- Noriaki Ando Fri, 26 Apr 2013 01:36:44 +0900 diff --git a/packages/deb/debian/control b/packages/deb/debian/control index 04a3c69d..20fedf81 100644 --- a/packages/deb/debian/control +++ b/packages/deb/debian/control @@ -1,4 +1,4 @@ -Source: openrtm-aist-python +Source: openrtm2-python3 Section: main Priority: extra Maintainer: Noriaki Ando @@ -6,7 +6,7 @@ Build-Depends: debhelper, python3-all-dev, python3-omniorb Standards-Version: 3.8.4 Homepage: http://www.openrtm.org -Package: openrtm-aist-python3 +Package: openrtm2-python3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python3-omniorb, omniorb-nameserver Description: OpenRTM-aist, RT-Middleware distributed by AIST @@ -20,13 +20,13 @@ Description: OpenRTM-aist, RT-Middleware distributed by AIST National Institute of Advanced Industrial Science and Technology (AIST), Japan. Please see http://www.openrtm.org/ for more detail. -Package: openrtm-aist-python3-example +Package: openrtm2-python3-example Architecture: any -Depends: openrtm-aist-python3 +Depends: openrtm2-python3 Description: OpenRTM-aist-Python examples Example components and sources of OpenRTM-aist. -Package: openrtm-aist-python3-doc +Package: openrtm2-python3-doc Architecture: all Description: Documentation for openrtm-aist-python Class reference manual of OpenRTM-aist. diff --git a/packages/deb/debian/copyright b/packages/deb/debian/copyright index 073ec66a..20409894 100644 --- a/packages/deb/debian/copyright +++ b/packages/deb/debian/copyright @@ -9,7 +9,7 @@ Upstream Author(s): Copyright: - Copyright (C) 2003-2017 + Copyright (C) 2003-2022 Noriaki Ando and the OpenRTM-aist Project team National Institute of Advanced Industrial Science and Technology (AIST), Tsukuba, Japan, All rights reserved. diff --git a/packages/deb/debian/rules b/packages/deb/debian/rules index 75deca14..80917e50 100644 --- a/packages/deb/debian/rules +++ b/packages/deb/debian/rules @@ -39,13 +39,13 @@ install: build dh_installdirs # installing core - python3 setup.py install_core --prefix=$(CURDIR)/debian/openrtm-aist-python3/usr --install-layout=deb + python3 setup.py install_core --prefix=$(CURDIR)/debian/openrtm2-python3/usr --install-layout=deb # installing examples - (mkdir $(CURDIR)/debian/openrtm-aist-python3-example/usr/) - python3 setup.py install_example --install-dir=$(CURDIR)/debian/openrtm-aist-python3-example/usr/ + (mkdir $(CURDIR)/debian/openrtm2-python3-example/usr/) + python3 setup.py install_example --install-dir=$(CURDIR)/debian/openrtm2-python3-example/usr/ # installing examples - (mkdir $(CURDIR)/debian/openrtm-aist-python3-doc/usr/) - python3 setup.py install_doc --install-dir=$(CURDIR)/debian/openrtm-aist-python3-doc/usr/ + (mkdir $(CURDIR)/debian/openrtm2-python3-doc/usr/) + python3 setup.py install_doc --install-dir=$(CURDIR)/debian/openrtm2-python3-doc/usr/ dh_install -s # Build architecture-independent files here. diff --git a/packages/deb/dpkg_build.sh b/packages/deb/dpkg_build.sh index 3aad5c34..7e82c506 100644 --- a/packages/deb/dpkg_build.sh +++ b/packages/deb/dpkg_build.sh @@ -37,10 +37,10 @@ BUILD_ROOT="" cleanup_files() { get_version_info - rm -f ../openrtm-aist*.deb - rm -f ../openrtm-aist*.dsc - rm -f ../openrtm-aist*.changes - rm -f ../openrtm-aist*.tar.gz + rm -f ../openrtm*.deb + rm -f ../openrtm*.dsc + rm -f ../openrtm*.changes + rm -f ../openrtm*.tar.gz rm -rf ${BUILD_ROOT} } @@ -133,9 +133,9 @@ create_files() ARCH=$DEB_HOST_ARCH PKG_VERSION=`dpkg-parsechangelog | sed -n 's/^Version: //p'` cat << EOF >> debian/files -openrtm-aist-python3_${PKG_VERSION}_${ARCH}.deb main extra -openrtm-aist-python3-example_${PKG_VERSION}_${ARCH}.deb main extra -openrtm-aist-python3-doc_${PKG_VERSION}_all.deb main extra +openrtm2-python3_${PKG_VERSION}_${ARCH}.deb main extra +openrtm2-python3-example_${PKG_VERSION}_${ARCH}.deb main extra +openrtm2-python3-doc_${PKG_VERSION}_all.deb main extra EOF } @@ -163,10 +163,10 @@ build_package() copy_debfiles() { - mv ./openrtm-aist*.deb .. - mv ./openrtm-aist*.dsc .. - mv ./openrtm-aist*.changes .. - mv ./openrtm-aist*.tar.gz .. + mv ./openrtm2*.deb .. + mv ./openrtm2*.dsc .. + mv ./openrtm2*.changes .. + mv ./openrtm2*.tar.gz .. } #============================== From 96a74c6566ba651ba75fac75858cdf4054f27f37 Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Thu, 28 Apr 2022 16:51:15 +0900 Subject: [PATCH 28/53] Updated the copyright output of the log file. --- OpenRTM_aist/Manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRTM_aist/Manager.py b/OpenRTM_aist/Manager.py index 4277fdaa..e24af884 100644 --- a/OpenRTM_aist/Manager.py +++ b/OpenRTM_aist/Manager.py @@ -1680,9 +1680,9 @@ def initLogger(self): self._rtcout.RTC_INFO( "%s", self._config.getProperty("openrtm.version")) - self._rtcout.RTC_INFO("Copyright (C) 2003-2020, Noriaki Ando and OpenRTM development team,") + self._rtcout.RTC_INFO("Copyright (C) 2003-2022, Noriaki Ando and OpenRTM development team,") self._rtcout.RTC_INFO(" Intelligent Systems Research Institute, AIST,") - self._rtcout.RTC_INFO("Copyright (C) 2020, Noriaki Ando and OpenRTM development team,") + self._rtcout.RTC_INFO("Copyright (C) 2022, Noriaki Ando and OpenRTM development team,") self._rtcout.RTC_INFO(" Industrial Cyber-Physical Research Center, AIST,") self._rtcout.RTC_INFO(" All right reserved.") self._rtcout.RTC_INFO("Manager starting.") From 8b3cdded460cf716f43427e13069879a9a9684bc Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Thu, 12 May 2022 15:31:13 +0900 Subject: [PATCH 29/53] Updated the description of the openrtm2-python3-doc package. --- packages/deb/debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/deb/debian/control b/packages/deb/debian/control index 20fedf81..197b581e 100644 --- a/packages/deb/debian/control +++ b/packages/deb/debian/control @@ -28,5 +28,5 @@ Description: OpenRTM-aist-Python examples Package: openrtm2-python3-doc Architecture: all -Description: Documentation for openrtm-aist-python +Description: Documentation for openrtm2-python3 Class reference manual of OpenRTM-aist. From 0d5d2d6dafe5dcad0ca7bbf6765e48beeb3abfb9 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Thu, 7 Jul 2022 13:45:00 +0900 Subject: [PATCH 30/53] [compat] fixed throughput component. --- OpenRTM_aist/examples/Throughput/Throughput_py.py | 4 +++- OpenRTM_aist/examples/Throughput/rtc.conf | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/OpenRTM_aist/examples/Throughput/Throughput_py.py b/OpenRTM_aist/examples/Throughput/Throughput_py.py index 4d0a7cca..e7fe658d 100644 --- a/OpenRTM_aist/examples/Throughput/Throughput_py.py +++ b/OpenRTM_aist/examples/Throughput/Throughput_py.py @@ -96,6 +96,7 @@ def __call__(self, info, cdrdata): data = OpenRTM_aist.ConnectorDataListenerT.__call__( self, info, cdrdata, self._data, OpenRTM_aist.PortType.InPortType) self._comp.receiveData(data.tm, len(data.data)) + return OpenRTM_aist.ConnectorListenerStatus.NO_CHANGE, data class ConnListener(OpenRTM_aist.ConnectorListener): @@ -113,6 +114,7 @@ def __call__(self, info): print(info.properties) print("------------------------------") self._comp.setConnectorProfile(info) + return OpenRTM_aist.ConnectorListenerStatus.NO_CHANGE ## @@ -263,7 +265,7 @@ def onInitialize(self): # Set CORBA Service Ports # self.getConfigService().update() # print self._datatype - self._data_type = OpenRTM_aist.normalize(self._datatype) + self._data_type = OpenRTM_aist.normalize(self._datatype[0]) if self._data_type == "octet": self._d_in = RTC.TimedOctetSeq(RTC.Time(0, 0), []) self._d_out = RTC.TimedOctetSeq(RTC.Time(0, 0), []) diff --git a/OpenRTM_aist/examples/Throughput/rtc.conf b/OpenRTM_aist/examples/Throughput/rtc.conf index bce6ae2c..12ed5790 100644 --- a/OpenRTM_aist/examples/Throughput/rtc.conf +++ b/OpenRTM_aist/examples/Throughput/rtc.conf @@ -1,7 +1,7 @@ -corba.args: -ORBgiopMaxMsgSize 209715200 -manager.components.preconnect: Throughput_py0.out:Throughput_py0.in(dataflow_type=push&interface_type=corba_cdr) -manager.components.preactivation: Throughput_py0 - -example.Throughput_py.conf.default.maxsize: 1000000 -example.Throughput_py.conf.default.datatype: float +corba.args: -ORBgiopMaxMsgSize 209715200 +manager.components.preconnect: Throughput_py0.out:Throughput_py0.in(dataflow_type=push&interface_type=corba_cdr) +manager.components.preactivation: Throughput_py0 + +example.Throughput_py.conf.default.maxsize: 1000000 +example.Throughput_py.conf.default.datatype: float example.Throughput_py.conf.default.filesuffix: -samecomp \ No newline at end of file From b62b95d989b02d07acb81ca69579a11adeba6d8a Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Thu, 7 Jul 2022 13:53:14 +0900 Subject: [PATCH 31/53] Update Throughput_py.py --- OpenRTM_aist/examples/Throughput/Throughput_py.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/OpenRTM_aist/examples/Throughput/Throughput_py.py b/OpenRTM_aist/examples/Throughput/Throughput_py.py index e7fe658d..db0f3e5a 100644 --- a/OpenRTM_aist/examples/Throughput/Throughput_py.py +++ b/OpenRTM_aist/examples/Throughput/Throughput_py.py @@ -92,9 +92,7 @@ def __init__(self, comp, data): def __del__(self): pass - def __call__(self, info, cdrdata): - data = OpenRTM_aist.ConnectorDataListenerT.__call__( - self, info, cdrdata, self._data, OpenRTM_aist.PortType.InPortType) + def __call__(self, info, data): self._comp.receiveData(data.tm, len(data.data)) return OpenRTM_aist.ConnectorListenerStatus.NO_CHANGE, data From 49189d6e325431bd02653d466e0e6afef9c338c4 Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Fri, 18 Nov 2022 18:17:53 +0900 Subject: [PATCH 32/53] Changed the command name of RTM2.0. Updated version number to 2.0.1. --- OpenRTM_aist/DefaultConfiguration.py | 12 ++++++++---- .../utils/rtcd/{rtcd_python3 => rtcd2_python3} | 0 .../rtcprof/{rtcprof_python3 => rtcprof2_python3} | 0 .../rtm-naming/{rtm-naming.py => rtm2-naming.py} | 0 OpenRTM_aist/version.py | 4 ++-- packages/deb/debian/changelog | 6 ++++++ setup.py | 6 +++--- 7 files changed, 19 insertions(+), 9 deletions(-) rename OpenRTM_aist/utils/rtcd/{rtcd_python3 => rtcd2_python3} (100%) rename OpenRTM_aist/utils/rtcprof/{rtcprof_python3 => rtcprof2_python3} (100%) rename OpenRTM_aist/utils/rtm-naming/{rtm-naming.py => rtm2-naming.py} (100%) diff --git a/OpenRTM_aist/DefaultConfiguration.py b/OpenRTM_aist/DefaultConfiguration.py index 2ab66374..4bbbc611 100644 --- a/OpenRTM_aist/DefaultConfiguration.py +++ b/OpenRTM_aist/DefaultConfiguration.py @@ -25,12 +25,16 @@ lang = "Python" rtcd_cpp_command = "rtcd" rtcprof_cpp_command = "rtcprof" + rtcd_java_command = "rtcd_java" + rtcprof_java_command = "rtcprof_java" elif os.name == "posix": cpp_suffixes = "so" supported_languages = "C++, Python, Python3, Java" lang = "Python3" rtcd_cpp_command = "rtcd2" rtcprof_cpp_command = "rtcprof2" + rtcd_java_command = "rtcd2_java" + rtcprof_java_command = "rtcprof2_java" else: cpp_suffixes = "dylib" supported_languages = "C++, Python, Python3, Java" @@ -102,7 +106,7 @@ "manager.components.naming_policy", "process_unique", "manager.modules.C++.manager_cmd", rtcd_cpp_command, "manager.modules.Python.manager_cmd", "rtcd_python", - "manager.modules.Java.manager_cmd", "rtcd_java", + "manager.modules.Java.manager_cmd", rtcd_java_command, "manager.modules.search_auto", "YES", "manager.local_service.enabled_services", "ALL", "sdo.service.provider.enabled_services", "ALL", @@ -110,7 +114,7 @@ "manager.supported_languages", supported_languages, "manager.modules.C++.profile_cmd", rtcprof_cpp_command, "manager.modules.Python.profile_cmd", "rtcprof_python", - "manager.modules.Java.profile_cmd", "rtcprof_java", + "manager.modules.Java.profile_cmd", rtcprof_java_command, "manager.modules.C++.suffixes", cpp_suffixes, "manager.modules.Python.suffixes", "py", "manager.modules.Java.suffixes", "class", @@ -120,8 +124,8 @@ if os.name != "nt": python3_config = [ - "manager.modules.Python3.manager_cmd", "rtcd_python3", - "manager.modules.Python3.profile_cmd", "rtcprof_python3", + "manager.modules.Python3.manager_cmd", "rtcd2_python3", + "manager.modules.Python3.profile_cmd", "rtcprof2_python3", "manager.modules.Python3.suffixes", "py", "manager.modules.Python3.load_paths", ""] default_config.extend(python3_config) diff --git a/OpenRTM_aist/utils/rtcd/rtcd_python3 b/OpenRTM_aist/utils/rtcd/rtcd2_python3 similarity index 100% rename from OpenRTM_aist/utils/rtcd/rtcd_python3 rename to OpenRTM_aist/utils/rtcd/rtcd2_python3 diff --git a/OpenRTM_aist/utils/rtcprof/rtcprof_python3 b/OpenRTM_aist/utils/rtcprof/rtcprof2_python3 similarity index 100% rename from OpenRTM_aist/utils/rtcprof/rtcprof_python3 rename to OpenRTM_aist/utils/rtcprof/rtcprof2_python3 diff --git a/OpenRTM_aist/utils/rtm-naming/rtm-naming.py b/OpenRTM_aist/utils/rtm-naming/rtm2-naming.py similarity index 100% rename from OpenRTM_aist/utils/rtm-naming/rtm-naming.py rename to OpenRTM_aist/utils/rtm-naming/rtm2-naming.py diff --git a/OpenRTM_aist/version.py b/OpenRTM_aist/version.py index 3ec623e8..7ab18152 100644 --- a/OpenRTM_aist/version.py +++ b/OpenRTM_aist/version.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -openrtm_name = "OpenRTM-aist-2.0.0" -openrtm_version = "2.0.0" +openrtm_name = "OpenRTM-aist-2.0.1" +openrtm_version = "2.0.1" corba_name = "omniORB" diff --git a/packages/deb/debian/changelog b/packages/deb/debian/changelog index bcd90ccb..55a640cc 100644 --- a/packages/deb/debian/changelog +++ b/packages/deb/debian/changelog @@ -1,3 +1,9 @@ +openrtm2-python3 (2.0.1-0) experimental; urgency=low + + * 2.0.1-0 (2.0.1-RELEASE). OpenRTM-aist-2.0.1-RELEASE + + -- Noriaki Ando Thu, 17 Nov 2022 15:43:40 +0900 + openrtm2-python3 (2.0.0-0) experimental; urgency=low * 2.0.0-0 (2.0.0-RELEASE). OpenRTM-aist-2.0.0-RELEASE diff --git a/setup.py b/setup.py index 75b67224..636a3495 100755 --- a/setup.py +++ b/setup.py @@ -107,7 +107,7 @@ import sys pkg_major_version = "2" pkg_minor_version = "0" -pkg_revision_num = "0" +pkg_revision_num = "1" # ============================================================ # MODIFICATION IS ALLOWED IF IT IS NEED TO MODIFY. @@ -258,8 +258,8 @@ def os_is(): # # scripts settings # -pkg_scripts_unix = ['OpenRTM_aist/utils/rtcd/rtcd_python3', - 'OpenRTM_aist/utils/rtcprof/rtcprof_python3'] +pkg_scripts_unix = ['OpenRTM_aist/utils/rtcd/rtcd2_python3', + 'OpenRTM_aist/utils/rtcprof/rtcprof2_python3'] pkg_scripts_win32 = ['OpenRTM_aist/utils/rtcd/rtcd_python.py', # 'OpenRTM_aist/utils/rtcd/rtcd_python.exe', 'OpenRTM_aist/utils/rtcd/rtcd_python.bat', From 3d188bdc80ed0f461614fb7431f16ef6568a6d23 Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Wed, 7 Dec 2022 11:44:45 +0900 Subject: [PATCH 33/53] Renamed Windows RTM2.0 commands to match Linux. --- OpenRTM_aist/DefaultConfiguration.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/OpenRTM_aist/DefaultConfiguration.py b/OpenRTM_aist/DefaultConfiguration.py index 4bbbc611..47aeb586 100644 --- a/OpenRTM_aist/DefaultConfiguration.py +++ b/OpenRTM_aist/DefaultConfiguration.py @@ -23,24 +23,14 @@ cpp_suffixes = "dll" supported_languages = "C++, Python, Java" lang = "Python" - rtcd_cpp_command = "rtcd" - rtcprof_cpp_command = "rtcprof" - rtcd_java_command = "rtcd_java" - rtcprof_java_command = "rtcprof_java" elif os.name == "posix": cpp_suffixes = "so" supported_languages = "C++, Python, Python3, Java" lang = "Python3" - rtcd_cpp_command = "rtcd2" - rtcprof_cpp_command = "rtcprof2" - rtcd_java_command = "rtcd2_java" - rtcprof_java_command = "rtcprof2_java" else: cpp_suffixes = "dylib" supported_languages = "C++, Python, Python3, Java" lang = "Python3" - rtcd_cpp_command = "rtcd" - rtcprof_cpp_command = "rtcprof" ## # @if jp @@ -104,17 +94,17 @@ "manager.nameservers", "default", "manager.language", lang, "manager.components.naming_policy", "process_unique", - "manager.modules.C++.manager_cmd", rtcd_cpp_command, - "manager.modules.Python.manager_cmd", "rtcd_python", - "manager.modules.Java.manager_cmd", rtcd_java_command, + "manager.modules.C++.manager_cmd", "rtcd2", + "manager.modules.Python.manager_cmd", "rtcd2_python", + "manager.modules.Java.manager_cmd", "rtcd2_java", "manager.modules.search_auto", "YES", "manager.local_service.enabled_services", "ALL", "sdo.service.provider.enabled_services", "ALL", "sdo.service.consumer.enabled_services", "ALL", "manager.supported_languages", supported_languages, - "manager.modules.C++.profile_cmd", rtcprof_cpp_command, - "manager.modules.Python.profile_cmd", "rtcprof_python", - "manager.modules.Java.profile_cmd", rtcprof_java_command, + "manager.modules.C++.profile_cmd", "rtcprof2", + "manager.modules.Python.profile_cmd", "rtcprof2_python", + "manager.modules.Java.profile_cmd", "rtcprof2_java", "manager.modules.C++.suffixes", cpp_suffixes, "manager.modules.Python.suffixes", "py", "manager.modules.Java.suffixes", "class", From 8f18384303c48dcd9bf908644e5684359c33f91b Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Thu, 8 Dec 2022 11:36:01 +0900 Subject: [PATCH 34/53] Corrected the idl file name in the setup script of ComponentObserverConsumer. --- OpenRTM_aist/ext/sdo/observer/ComponentObserver_OpenRTM.idl | 2 +- OpenRTM_aist/ext/sdo/observer/setup.bat | 4 ++-- OpenRTM_aist/ext/sdo/observer/setup.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OpenRTM_aist/ext/sdo/observer/ComponentObserver_OpenRTM.idl b/OpenRTM_aist/ext/sdo/observer/ComponentObserver_OpenRTM.idl index e1b653b1..93b7d60d 100644 --- a/OpenRTM_aist/ext/sdo/observer/ComponentObserver_OpenRTM.idl +++ b/OpenRTM_aist/ext/sdo/observer/ComponentObserver_OpenRTM.idl @@ -16,7 +16,7 @@ * */ -#include +#include "SDOPackage.idl" /*! * @if jp diff --git a/OpenRTM_aist/ext/sdo/observer/setup.bat b/OpenRTM_aist/ext/sdo/observer/setup.bat index 26c6c9da..04cef38e 100644 --- a/OpenRTM_aist/ext/sdo/observer/setup.bat +++ b/OpenRTM_aist/ext/sdo/observer/setup.bat @@ -1,13 +1,13 @@ @echo off echo "<<< ComponentObserverConsumer setup start >>>" -set idlfiles=BasicDataType.idl DataPort.idl ExtendedDataTypes.idl InterfaceDataTypes.idl OpenRTM.idl RTC.idl SDOPackage.idl SharedMemory.idl IORProfile.idl +set idlfiles=BasicDataType.idl DataPort.idl ExtendedDataTypes.idl InterfaceDataTypes.idl OpenRTM_OpenRTM.idl RTC.idl SDOPackage.idl SharedMemory.idl IORProfile.idl rem # idl file copy for %%x in (%idlfiles%) do copy ..\..\..\RTM_IDL\%%x . rem # idl file compile -set idlfiles=%idlfiles% ComponentObserver.idl +set idlfiles=%idlfiles% ComponentObserver_OpenRTM.idl for %%x in (%idlfiles%) do omniidl -I. -bpython %%x echo "<<< ComponentObserverConsumer setup Complete >>>" diff --git a/OpenRTM_aist/ext/sdo/observer/setup.sh b/OpenRTM_aist/ext/sdo/observer/setup.sh index b3e90383..4b6e8ca7 100644 --- a/OpenRTM_aist/ext/sdo/observer/setup.sh +++ b/OpenRTM_aist/ext/sdo/observer/setup.sh @@ -4,7 +4,7 @@ echo "<<< ComponentObserverConsumer Test setup start >>>" # idl file copy cp -pf ../../../RTM_IDL/BasicDataType.idl . -cp -pf ../../../RTM_IDL/DataPort.idl . +cp -pf ../../../RTM_IDL/DataPort_OpenRTM.idl . cp -pf ../../../RTM_IDL/ExtendedDataTypes.idl . cp -pf ../../../RTM_IDL/InterfaceDataTypes.idl . cp -pf ../../../RTM_IDL/OpenRTM.idl . From 15dcbf15be37d5d2e12819fca17d43bc918c9bfc Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Thu, 26 Jan 2023 19:35:57 +0900 Subject: [PATCH 35/53] [compat] fixed bug. --- OpenRTM_aist/NVUtil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRTM_aist/NVUtil.py b/OpenRTM_aist/NVUtil.py index 9c10170f..13a45917 100644 --- a/OpenRTM_aist/NVUtil.py +++ b/OpenRTM_aist/NVUtil.py @@ -355,7 +355,7 @@ def appendStringValue(nv, name, value): find_flag = True if not find_flag: - tmp_str += ", " + tmp_str += "," tmp_str += value nv[index].value = any.to_any(tmp_str) else: From 5f57fe65b96735714a6ba44252da4873e9559d4e Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Fri, 27 Jan 2023 17:46:27 +0900 Subject: [PATCH 36/53] [compat] fixed addFactory argument. --- OpenRTM_aist/GlobalFactory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRTM_aist/GlobalFactory.py b/OpenRTM_aist/GlobalFactory.py index bd7f9bcc..e6843010 100644 --- a/OpenRTM_aist/GlobalFactory.py +++ b/OpenRTM_aist/GlobalFactory.py @@ -51,7 +51,7 @@ def getIdentifiers(self): # ReturnCode addFactory(const Identifier& id, # Creator creator) - def addFactory(self, id, creator): + def addFactory(self, id, creator, prop=None): if not creator: return self.INVALID_ARG From 65c5f1ec07529735e0a994d46974e9c81051c876 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Tue, 7 Feb 2023 17:02:14 +0900 Subject: [PATCH 37/53] [compat] fixed separate properties --- OpenRTM_aist/InPort.py | 4 ++-- OpenRTM_aist/OutPort.py | 4 ++-- OpenRTM_aist/OutPortBase.py | 5 +---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/OpenRTM_aist/InPort.py b/OpenRTM_aist/InPort.py index 80a52b64..ebe0b71c 100644 --- a/OpenRTM_aist/InPort.py +++ b/OpenRTM_aist/InPort.py @@ -95,8 +95,8 @@ def __init__(self, name, value): self._valueMutex = threading.RLock() marshaling_types = OpenRTM_aist.SerializerFactories.instance().getSerializerList(value) - marshaling_types = OpenRTM_aist.flatten(marshaling_types).lstrip() - self.addProperty("dataport.marshaling_types", marshaling_types) + marshaling_types_str = ",".join([x.strip() for x in marshaling_types]) + self.addProperty("dataport.marshaling_types", marshaling_types_str) self._listeners.setDataType(copy.deepcopy(value)) self._listeners.setPortType(OpenRTM_aist.PortType.InPortType) diff --git a/OpenRTM_aist/OutPort.py b/OpenRTM_aist/OutPort.py index 96843006..fb7ac8e5 100644 --- a/OpenRTM_aist/OutPort.py +++ b/OpenRTM_aist/OutPort.py @@ -103,8 +103,8 @@ def __init__(self, name, value, buffer=None): #self._OnDisconnect = None marshaling_types = OpenRTM_aist.SerializerFactories.instance().getSerializerList(value) - marshaling_types = OpenRTM_aist.flatten(marshaling_types).lstrip() - self.addProperty("dataport.marshaling_types", marshaling_types) + marshaling_types_str = ",".join([x.strip() for x in marshaling_types]) + self.addProperty("dataport.marshaling_types", marshaling_types_str) self._listeners.setDataType(copy.deepcopy(value)) self._listeners.setPortType(OpenRTM_aist.PortType.OutPortType) diff --git a/OpenRTM_aist/OutPortBase.py b/OpenRTM_aist/OutPortBase.py index c6ab706e..d980d5c6 100644 --- a/OpenRTM_aist/OutPortBase.py +++ b/OpenRTM_aist/OutPortBase.py @@ -254,10 +254,7 @@ def __init__(self, name, data_type): # publisher list factory = OpenRTM_aist.PublisherFactory.instance() - pubs = OpenRTM_aist.flatten(factory.getIdentifiers()) - - # blank characters are deleted for RTSE's bug - pubs = pubs.lstrip() + pubs = ",".join([x.strip() for x in factory.getIdentifiers()]) self._rtcout.RTC_DEBUG("available subscription_type: %s", pubs) self.addProperty("dataport.subscription_type", pubs) From 175b5c245b6ca4f114d65e36d916e95ea73f2847 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Tue, 14 Feb 2023 18:18:04 +0900 Subject: [PATCH 38/53] [compat] fixed bugs. --- OpenRTM_aist/Manager.py | 12 +++++------- OpenRTM_aist/PeriodicECSharedComposite.py | 3 +-- OpenRTM_aist/SdoServiceAdmin.py | 4 ++-- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/OpenRTM_aist/Manager.py b/OpenRTM_aist/Manager.py index ee50c83d..0eef852a 100644 --- a/OpenRTM_aist/Manager.py +++ b/OpenRTM_aist/Manager.py @@ -405,7 +405,7 @@ def activateManager(self): sdofactory_ = OpenRTM_aist.SdoServiceConsumerFactory.instance() self._config.setProperty("sdo.service.consumer.available_services", - OpenRTM_aist.flatten(sdofactory_.getIdentifiers())) + ",".join([x.strip() for x in sdofactory_.getIdentifiers()])) self.invokeInitProc() self.initPreCreation() @@ -2657,10 +2657,8 @@ def configureComponent(self, comp, prop): naming_formats = self._config.getProperty("naming.formats") if comp_prop.findNode("naming.formats"): naming_formats = comp_prop.getProperty("naming.formats") - naming_formats = OpenRTM_aist.flatten( - OpenRTM_aist.unique_sv( - OpenRTM_aist.split( - naming_formats, ","))) + naming_formats = ",".join([x.strip() for x in OpenRTM_aist.unique_sv( + OpenRTM_aist.split(naming_formats, ","))]) naming_names = self.formatString(naming_formats, comp.getProperties()) comp.getProperties().setProperty("naming.formats", naming_formats) @@ -3161,7 +3159,7 @@ def initPreConnection(self): tmp = port0_str.split(".") tmp.pop() - comp0_name = OpenRTM_aist.flatten(tmp, ".") + comp0_name = ".".join([x.strip() for x in tmp]) port0_name = port0_str @@ -3203,7 +3201,7 @@ def initPreConnection(self): tmp = port_str.split(".") tmp.pop() - comp_name = OpenRTM_aist.flatten(tmp, ".") + comp_name = ".".join([x.strip() for x in tmp]) port_name = port_str if comp_name.find("://") == -1: diff --git a/OpenRTM_aist/PeriodicECSharedComposite.py b/OpenRTM_aist/PeriodicECSharedComposite.py index ac9e2d31..64807ee9 100644 --- a/OpenRTM_aist/PeriodicECSharedComposite.py +++ b/OpenRTM_aist/PeriodicECSharedComposite.py @@ -232,8 +232,7 @@ def remove_member(self, id): self.removePort(member, self._expPorts) self._rtobj.getProperties().setProperty( "conf.default.exported_ports", - OpenRTM_aist.flatten( - self._expPorts)) + ",".join([x.strip() for x in self._expPorts])) self.removeParticipantFromEC(member) self.removeOrganizationFromTarget(member) self.startOwnedEC(member) diff --git a/OpenRTM_aist/SdoServiceAdmin.py b/OpenRTM_aist/SdoServiceAdmin.py index 8dcceea3..caa78009 100644 --- a/OpenRTM_aist/SdoServiceAdmin.py +++ b/OpenRTM_aist/SdoServiceAdmin.py @@ -178,7 +178,7 @@ def init(self, rtobj): availableProviderTypes = OpenRTM_aist.SdoServiceProviderFactory.instance().getIdentifiers() prop.setProperty("sdo.service.provider.available_services", - str(OpenRTM_aist.flatten(availableProviderTypes))) + ",".join([x.strip() for x in availableProviderTypes])) self._rtcout.RTC_DEBUG("sdo.service.provider.available_services: %s", prop.getProperty("sdo.service.provider.available_services")) @@ -223,7 +223,7 @@ def init(self, rtobj): str(constypes)) prop.setProperty("sdo.service.consumer.available_services", - str(OpenRTM_aist.flatten(OpenRTM_aist.SdoServiceConsumerFactory.instance().getIdentifiers()))) + ",".join([x.strip() for x in OpenRTM_aist.SdoServiceConsumerFactory.instance().getIdentifiers()])) self._rtcout.RTC_DEBUG("sdo.service.consumer.available_services: %s", prop.getProperty("sdo.service.consumer.available_services")) From 1c3f9af4c5018ecdb5c92e1aa4ac524632e3e524 Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Thu, 2 Mar 2023 11:03:53 +0900 Subject: [PATCH 39/53] Updated debhelper settings for Ubuntu22.04. --- packages/deb/debian/compat | 2 +- packages/deb/debian/control | 2 +- packages/deb/debian/rules | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/deb/debian/compat b/packages/deb/debian/compat index 7ed6ff82..f599e28b 100644 --- a/packages/deb/debian/compat +++ b/packages/deb/debian/compat @@ -1 +1 @@ -5 +10 diff --git a/packages/deb/debian/control b/packages/deb/debian/control index 197b581e..95deb688 100644 --- a/packages/deb/debian/control +++ b/packages/deb/debian/control @@ -8,7 +8,7 @@ Homepage: http://www.openrtm.org Package: openrtm2-python3 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, python3-omniorb, omniorb-nameserver +Depends: ${misc:Depends}, python3-omniorb, omniorb-nameserver Description: OpenRTM-aist, RT-Middleware distributed by AIST OpenRTM-aist is a reference implementation of RTC (Robotic Technology Component Version 1.1, formal/12-09-01) specification which is OMG diff --git a/packages/deb/debian/rules b/packages/deb/debian/rules index 80917e50..cd8f3fde 100644 --- a/packages/deb/debian/rules +++ b/packages/deb/debian/rules @@ -46,7 +46,7 @@ install: build # installing examples (mkdir $(CURDIR)/debian/openrtm2-python3-doc/usr/) python3 setup.py install_doc --install-dir=$(CURDIR)/debian/openrtm2-python3-doc/usr/ - dh_install -s + dh_install -a # Build architecture-independent files here. binary-indep: build install From 3b2c128ae94ce250f8ae5fd9b11b37f32c2c62fb Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Wed, 5 Apr 2023 17:21:56 +0900 Subject: [PATCH 40/53] Updated deb package version to 2.0.1-1. --- packages/deb/debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/deb/debian/changelog b/packages/deb/debian/changelog index 55a640cc..db2b7d6d 100644 --- a/packages/deb/debian/changelog +++ b/packages/deb/debian/changelog @@ -1,3 +1,10 @@ +openrtm2-python3 (2.0.1-1) experimental; urgency=low + + * Fixed separate properties. + * Supports Ubuntu22.04. + + -- Noriaki Ando Wed, 05 Apr 2023 16:54:54 +0900 + openrtm2-python3 (2.0.1-0) experimental; urgency=low * 2.0.1-0 (2.0.1-RELEASE). OpenRTM-aist-2.0.1-RELEASE From 570d11ca1c2f8272287a57554606ae150f628e1d Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Thu, 6 Apr 2023 17:32:14 +0900 Subject: [PATCH 41/53] [compat] fixed bugs. --- OpenRTM_aist/Manager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenRTM_aist/Manager.py b/OpenRTM_aist/Manager.py index 0eef852a..42be5331 100644 --- a/OpenRTM_aist/Manager.py +++ b/OpenRTM_aist/Manager.py @@ -2389,6 +2389,8 @@ def shutdownComponents(self): except BaseException: self._rtcout.RTC_TRACE(OpenRTM_aist.Logger.print_exception()) + self.cleanupComponents() + for ec in self._ecs: try: self._poa.deactivate_object(self._poa.servant_to_id(ec)) From 015a3d9b11a8d15e73fe4a14c6079f9600c83912 Mon Sep 17 00:00:00 2001 From: n-kawauchi Date: Tue, 18 Jul 2023 07:38:14 +0900 Subject: [PATCH 42/53] Supported distutils abolition from Python3.12. Updated version to 2.0.2. --- MANIFEST.in | 3 + OpenRTM_aist/docs/Doxyfile_en.in | 2416 ++++++++++++++++- OpenRTM_aist/docs/Doxyfile_jp.in | 2412 +++++++++++++++- OpenRTM_aist/docs/Makefile | 13 - OpenRTM_aist/docs/build_docs.sh | 19 + .../utils/rtc-template/rtc-template.py | 2 +- OpenRTM_aist/utils/rtcd/py2exe/setup.py | 16 - OpenRTM_aist/version.py | 4 +- packages/Makefile | 9 - packages/deb/debian/changelog | 6 + packages/deb/debian/control | 4 - packages/deb/debian/rules | 29 +- packages/deb/dpkg_build.sh | 44 +- pyproject.toml | 5 + setup.cfg | 20 + setup.py | 1179 +------- 16 files changed, 4816 insertions(+), 1365 deletions(-) delete mode 100644 OpenRTM_aist/docs/Makefile create mode 100644 OpenRTM_aist/docs/build_docs.sh delete mode 100644 OpenRTM_aist/utils/rtcd/py2exe/setup.py delete mode 100644 packages/Makefile create mode 100644 pyproject.toml create mode 100644 setup.cfg mode change 100755 => 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in index 75b1d422..765469b4 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,7 +1,10 @@ include OpenRTM-aist.pth include MANIFEST.in include setup.py +include setup.cfg +include pyproject.toml include README +exclude README.md recursive-include packages Makefile recursive-include packages/deb *.sh copyright changelog rules README* compat control control.* files recursive-include packages/rpm *.sh openrtm-aist.spec.in openrtm-aist_py3.spec.in diff --git a/OpenRTM_aist/docs/Doxyfile_en.in b/OpenRTM_aist/docs/Doxyfile_en.in index 0a20112c..dd95425f 100644 --- a/OpenRTM_aist/docs/Doxyfile_en.in +++ b/OpenRTM_aist/docs/Doxyfile_en.in @@ -1,16 +1,131 @@ -# Doxyfile 1.5.3 +# Doxyfile 1.8.17 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + PROJECT_NAME = "OpenRTM-aist-Python __VERSION__" -PROJECT_NUMBER = + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + OUTPUT_DIRECTORY = ./ClassReference-en + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + ABBREVIATE_BRIEF = "The $name class " \ "The $name widget " \ "The $name file " \ @@ -22,71 +137,725 @@ ABBREVIATE_BRIEF = "The $name class " \ a \ an \ the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + FULL_PATH_NAMES = YES -STRIP_FROM_PATH = -STRIP_FROM_INC_PATH = + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = ../ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + JAVADOC_AUTOBRIEF = NO + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + TAB_SIZE = 8 -ALIASES = + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + OPTIMIZE_OUTPUT_JAVA = YES + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# (including Cygwin) ands Mac users are advised to set this option to NO. +# The default value is: system dependent. + CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + SHOW_USED_FILES = YES -SHOW_DIRECTORIES = NO -FILE_VERSION_FILTER = + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + WARN_FORMAT = "$file:$line: $text " -WARN_LOGFILE = + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + INPUT = ../ -INPUT_ENCODING = + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. + FILE_PATTERNS = *.c \ *.cc \ *.cxx \ @@ -114,154 +883,1677 @@ FILE_PATTERNS = *.c \ *.mm \ *.dox \ *.py + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + RECURSIVE = NO -EXCLUDE = + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXCLUDE_SYMBOLS = -EXAMPLE_PATH = + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_PATTERNS = + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + VERBATIM_HEADERS = NO + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files +# were built. This is equivalent to specifying the "-p" option to a clang tool, +# such as clang-check. These options will then be passed to the parser. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = + #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + ALPHABETICAL_INDEX = NO + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = YES + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + HTML_DYNAMIC_SECTIONS = NO -CHM_FILE = -HHC_LOCATION = + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = YES + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /