qi


Nameqi JSON
Version 3.1.5 PyPI version JSON
download
home_pageNone
SummaryLibQi Python bindings
upload_time2024-04-18 14:21:16
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseCopyright (c) 2011-2020, Softbank Robotics Europe All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Aldebaran Robotics nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Aldebaran Robotics BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
keywords libqi qi naoqi aldebaran robotics robot nao pepper romeo plato
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ===================================
LibQiPython - LibQi Python bindings
===================================

This repository contains the official Python bindings of the `LibQi`__, the ``qi``
Python module.

__ LibQi_repo_

Building
========

To build the project, you need:

- a compiler that supports C++17.

   - on Ubuntu: `apt-get install build-essential`.

- CMake with at least version 3.23.

   - on PyPI (**recommended**): `pip install "cmake>=3.23"`.
   - on Ubuntu: `apt-get install cmake`.

- Python with at least version 3.7 and its development libraries.

   - On Ubuntu: `apt-get install libpython3-dev`.

- a Python `virtualenv`.

   - On Ubuntu:

     .. code-block:: console

       apt-get install python3-venv
       python3 -m venv ~/my-venv # Use the path of your convenience.
       source ~/my-venv/bin/activate

.. note::
  The CMake project offers several configuration options and exports a set
  of targets when installed. You may refer to the ``CMakeLists.txt`` file
  for more details about available parameters and exported targets.

.. note::
  The procedures described below assume that you have downloaded the project
  sources, that your current working directory is the project sources root
  directory and that you are working inside your virtualenv.

Conan
^^^^^

Additionally, `libqi-python` is available as a Conan 2 project, which means you
can use Conan to fetch dependencies.

You can install and/or upgrade Conan 2 and create a default profile in the
following way:

.. code-block:: console

  # install/upgrade Conan 2
  pip install --upgrade conan~=2
  # create a default profile
  conan profile detect

Install dependencies from Conan and build with CMake
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The procedure to build the project using Conan to fetch dependencies is the
following.

Most dependencies are available on Conan Center repository and should not
require any additional steps to make them available. However, you might need to
first get and export the `libqi` recipe into your local Conan cache.

.. code-block:: console

  # GitHub is available, but you can also use internal GitLab.
  QI_REPOSITORY="https://github.com/aldebaran/libqi.git"
  QI_VERSION="4.0.1" # Checkout the version your project need.
  QI_PATH="$HOME/libqi" # Or whatever path you want.
  git clone \
    --depth=1 `# Only fetch one commit.` \
    --branch "qi-framework-v${QI_VERSION}" \
    "${QI_REPOSITORY}" \
    "${QI_PATH}"
  conan export "${QI_PATH}" \
    --version "${QI_VERSION}" # Technically not required but some
                              # versions of libqi require it
                              # because of a bug.

You can then install the `libqi-python` dependencies in Conan.

.. code-block:: console

  conan install . \
    --build=missing `# Build dependencies binaries that are missing in Conan.` \
    -s build_type=Debug `# Build in debug mode.` \
    -c tools.build:skip_test=true `# Skip tests building for dependencies.` \
    -c '&:tools.build:skip_test=false' # Do not skip tests for the project.

This will generate a build directory containing a configuration with a
toolchain file that allows CMake to find dependencies inside the Conan cache.

You can then invoke CMake directly inside the build configuration directory to
configure and build the project. Fortunately, Conan also generates a CMake
preset that simplifies the process. The name of the preset may differ on
your machine. You may need to find the preset generated by Conan first by
calling:

.. code-block:: console

  cmake --list-presets

Here, we'll assume that the preset is named `conan-linux-x86_64-gcc-debug`.
To start building, you need to configure with CMake and then build:

.. code-block:: console

  cmake --preset conan-linux-x86_64-gcc-debug
  cmake --build --preset conan-linux-x86_64-gcc-debug

Tests can now be invoked using CTest_, but they require a runtime environment
from Conan so that all dependencies are found:

.. code-block:: console

  source build/linux-x86_64-gcc-debug/generators/conanrun.sh
  ctest --preset conan-linux-x86_64-gcc-debug --output-on-failure
  source build/linux-x86_64-gcc-debug/generators/deactivate_conanrun.sh

Finally, you can install the project in the directory of your choice.

The project defines a single install component, the ``Module`` component.

.. code-block:: console

  # `cmake --install` does not support presets sadly.
  cmake \
    --install build/linux-x86_64-gcc-debug \
    --component Module --prefix ~/my-libqi-python-install

Wheel (PEP 517)
---------------

You may build this project as a wheel package using PEP 517.

It uses a scikit-build_ backend which interfaces with CMake.

You may need to provide a toolchain file so that CMake finds the required
dependencies, such as a toolchain generated by Conan:

.. code-block:: console

  conan install . \
    --build=missing `# Build dependencies binaries that are missing in Conan.` \
    -c tools.build:skip_test=true # Skip any test.

You now can use the ``build`` Python module to build the wheel using PEP 517.

.. code-block:: console

  pip install -U build
  python -m build \
    --config-setting cmake.define.CMAKE_TOOLCHAIN_FILE=$PWD/build/linux-x86_64-gcc-release/generators/conan_toolchain.cmake

When built that way, the native libraries present in the wheel are most likely incomplete.
You will need to use ``auditwheel`` or ``delocate`` to fix it.

.. note::
  `auditwheel` requires the `patchelf` utility program on Linux. You may need
  to install it (on Ubuntu: `apt-get install patchelf`).

.. code-block:: console

  pip install -U auditwheel # or `delocate` on MacOS.
  auditwheel repair \
    --strip `# Strip debugging symbols to get a lighter archive.` \
    `# The desired platform, which may differ depending on your build host.` \
    `# With Ubuntu 20.04, we can target manylinux_2_31. Newer versions of` \
    `# Ubuntu will have to target newer versions of manylinux.` \
    `# If you don't need a manylinux archive, you can also target the` \
    `# 'linux_x86_64' platform.` \
    --plat manylinux_2_31_x86_64 \
    `# Path to the wheel archive.` \
    dist/qi-*.whl
  # The wheel will be by default placed in a `./wheelhouse/` directory.

Crosscompiling
--------------

The project supports cross-compiling as explained in the `CMake manual about
toolchains`__. You may simply set the ``CMAKE_TOOLCHAIN_FILE`` variable to the
path of the CMake file of your toolchain.

__ CMake_toolchains_

.. _LibQi_repo: https://github.com/aldebaran/libqi
.. _scikit-build: https://scikit-build.readthedocs.io/en/latest/
.. _CMake_toolchains: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
.. _CTest: https://cmake.org/cmake/help/latest/manual/ctest.1.html

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "qi",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "Unknown <framework@aldebaran.com>, Vincent Palancher <vincent.palancher@aldebaran.com>, J\u00e9r\u00e9my Monnon <jmonnon@aldebaran.com>",
    "keywords": "libqi qi naoqi aldebaran robotics robot nao pepper romeo plato",
    "author": null,
    "author_email": null,
    "download_url": null,
    "platform": null,
    "description": "===================================\nLibQiPython - LibQi Python bindings\n===================================\n\nThis repository contains the official Python bindings of the `LibQi`__, the ``qi``\nPython module.\n\n__ LibQi_repo_\n\nBuilding\n========\n\nTo build the project, you need:\n\n- a compiler that supports C++17.\n\n   - on Ubuntu: `apt-get install build-essential`.\n\n- CMake with at least version 3.23.\n\n   - on PyPI (**recommended**): `pip install \"cmake>=3.23\"`.\n   - on Ubuntu: `apt-get install cmake`.\n\n- Python with at least version 3.7 and its development libraries.\n\n   - On Ubuntu: `apt-get install libpython3-dev`.\n\n- a Python `virtualenv`.\n\n   - On Ubuntu:\n\n     .. code-block:: console\n\n       apt-get install python3-venv\n       python3 -m venv ~/my-venv # Use the path of your convenience.\n       source ~/my-venv/bin/activate\n\n.. note::\n  The CMake project offers several configuration options and exports a set\n  of targets when installed. You may refer to the ``CMakeLists.txt`` file\n  for more details about available parameters and exported targets.\n\n.. note::\n  The procedures described below assume that you have downloaded the project\n  sources, that your current working directory is the project sources root\n  directory and that you are working inside your virtualenv.\n\nConan\n^^^^^\n\nAdditionally, `libqi-python` is available as a Conan 2 project, which means you\ncan use Conan to fetch dependencies.\n\nYou can install and/or upgrade Conan 2 and create a default profile in the\nfollowing way:\n\n.. code-block:: console\n\n  # install/upgrade Conan 2\n  pip install --upgrade conan~=2\n  # create a default profile\n  conan profile detect\n\nInstall dependencies from Conan and build with CMake\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe procedure to build the project using Conan to fetch dependencies is the\nfollowing.\n\nMost dependencies are available on Conan Center repository and should not\nrequire any additional steps to make them available. However, you might need to\nfirst get and export the `libqi` recipe into your local Conan cache.\n\n.. code-block:: console\n\n  # GitHub is available, but you can also use internal GitLab.\n  QI_REPOSITORY=\"https://github.com/aldebaran/libqi.git\"\n  QI_VERSION=\"4.0.1\" # Checkout the version your project need.\n  QI_PATH=\"$HOME/libqi\" # Or whatever path you want.\n  git clone \\\n    --depth=1 `# Only fetch one commit.` \\\n    --branch \"qi-framework-v${QI_VERSION}\" \\\n    \"${QI_REPOSITORY}\" \\\n    \"${QI_PATH}\"\n  conan export \"${QI_PATH}\" \\\n    --version \"${QI_VERSION}\" # Technically not required but some\n                              # versions of libqi require it\n                              # because of a bug.\n\nYou can then install the `libqi-python` dependencies in Conan.\n\n.. code-block:: console\n\n  conan install . \\\n    --build=missing `# Build dependencies binaries that are missing in Conan.` \\\n    -s build_type=Debug `# Build in debug mode.` \\\n    -c tools.build:skip_test=true `# Skip tests building for dependencies.` \\\n    -c '&:tools.build:skip_test=false' # Do not skip tests for the project.\n\nThis will generate a build directory containing a configuration with a\ntoolchain file that allows CMake to find dependencies inside the Conan cache.\n\nYou can then invoke CMake directly inside the build configuration directory to\nconfigure and build the project. Fortunately, Conan also generates a CMake\npreset that simplifies the process. The name of the preset may differ on\nyour machine. You may need to find the preset generated by Conan first by\ncalling:\n\n.. code-block:: console\n\n  cmake --list-presets\n\nHere, we'll assume that the preset is named `conan-linux-x86_64-gcc-debug`.\nTo start building, you need to configure with CMake and then build:\n\n.. code-block:: console\n\n  cmake --preset conan-linux-x86_64-gcc-debug\n  cmake --build --preset conan-linux-x86_64-gcc-debug\n\nTests can now be invoked using CTest_, but they require a runtime environment\nfrom Conan so that all dependencies are found:\n\n.. code-block:: console\n\n  source build/linux-x86_64-gcc-debug/generators/conanrun.sh\n  ctest --preset conan-linux-x86_64-gcc-debug --output-on-failure\n  source build/linux-x86_64-gcc-debug/generators/deactivate_conanrun.sh\n\nFinally, you can install the project in the directory of your choice.\n\nThe project defines a single install component, the ``Module`` component.\n\n.. code-block:: console\n\n  # `cmake --install` does not support presets sadly.\n  cmake \\\n    --install build/linux-x86_64-gcc-debug \\\n    --component Module --prefix ~/my-libqi-python-install\n\nWheel (PEP 517)\n---------------\n\nYou may build this project as a wheel package using PEP 517.\n\nIt uses a scikit-build_ backend which interfaces with CMake.\n\nYou may need to provide a toolchain file so that CMake finds the required\ndependencies, such as a toolchain generated by Conan:\n\n.. code-block:: console\n\n  conan install . \\\n    --build=missing `# Build dependencies binaries that are missing in Conan.` \\\n    -c tools.build:skip_test=true # Skip any test.\n\nYou now can use the ``build`` Python module to build the wheel using PEP 517.\n\n.. code-block:: console\n\n  pip install -U build\n  python -m build \\\n    --config-setting cmake.define.CMAKE_TOOLCHAIN_FILE=$PWD/build/linux-x86_64-gcc-release/generators/conan_toolchain.cmake\n\nWhen built that way, the native libraries present in the wheel are most likely incomplete.\nYou will need to use ``auditwheel`` or ``delocate`` to fix it.\n\n.. note::\n  `auditwheel` requires the `patchelf` utility program on Linux. You may need\n  to install it (on Ubuntu: `apt-get install patchelf`).\n\n.. code-block:: console\n\n  pip install -U auditwheel # or `delocate` on MacOS.\n  auditwheel repair \\\n    --strip `# Strip debugging symbols to get a lighter archive.` \\\n    `# The desired platform, which may differ depending on your build host.` \\\n    `# With Ubuntu 20.04, we can target manylinux_2_31. Newer versions of` \\\n    `# Ubuntu will have to target newer versions of manylinux.` \\\n    `# If you don't need a manylinux archive, you can also target the` \\\n    `# 'linux_x86_64' platform.` \\\n    --plat manylinux_2_31_x86_64 \\\n    `# Path to the wheel archive.` \\\n    dist/qi-*.whl\n  # The wheel will be by default placed in a `./wheelhouse/` directory.\n\nCrosscompiling\n--------------\n\nThe project supports cross-compiling as explained in the `CMake manual about\ntoolchains`__. You may simply set the ``CMAKE_TOOLCHAIN_FILE`` variable to the\npath of the CMake file of your toolchain.\n\n__ CMake_toolchains_\n\n.. _LibQi_repo: https://github.com/aldebaran/libqi\n.. _scikit-build: https://scikit-build.readthedocs.io/en/latest/\n.. _CMake_toolchains: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html\n.. _CTest: https://cmake.org/cmake/help/latest/manual/ctest.1.html\n",
    "bugtrack_url": null,
    "license": "Copyright (c) 2011-2020, Softbank Robotics Europe All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Aldebaran Robotics nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Aldebaran Robotics BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
    "summary": "LibQi Python bindings",
    "version": "3.1.5",
    "project_urls": {
        "Repository": "https://github.com/aldebaran/libqi-python"
    },
    "split_keywords": [
        "libqi",
        "qi",
        "naoqi",
        "aldebaran",
        "robotics",
        "robot",
        "nao",
        "pepper",
        "romeo",
        "plato"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e280582fe8ab8b8a1381a2e267a47cd3f3cf79fb6aef01ad43c80b6132b1a1e0",
                "md5": "a1f80cdde9978ab28f0cd2232a36ca27",
                "sha256": "6d62108438fac9363200254474990c6d212050fc0721e72ebaf3f157960e3598"
            },
            "downloads": -1,
            "filename": "qi-3.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a1f80cdde9978ab28f0cd2232a36ca27",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 7372585,
            "upload_time": "2024-04-18T14:21:16",
            "upload_time_iso_8601": "2024-04-18T14:21:16.906100Z",
            "url": "https://files.pythonhosted.org/packages/e2/80/582fe8ab8b8a1381a2e267a47cd3f3cf79fb6aef01ad43c80b6132b1a1e0/qi-3.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "da2301999b202e1ada1e98460935f52442952a080921bcd7b10d078f95a7bc91",
                "md5": "6c5536a2e030fa053c5464c7d17b3bec",
                "sha256": "421d58a6f6a9e038d2dce5a68e293a69645aa50570313d5b96aa1dcf7c1ef259"
            },
            "downloads": -1,
            "filename": "qi-3.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6c5536a2e030fa053c5464c7d17b3bec",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 7376223,
            "upload_time": "2024-04-18T14:21:20",
            "upload_time_iso_8601": "2024-04-18T14:21:20.228161Z",
            "url": "https://files.pythonhosted.org/packages/da/23/01999b202e1ada1e98460935f52442952a080921bcd7b10d078f95a7bc91/qi-3.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "80aacb5669dafe11885631c2fd76e46557f37ede6dfff03903b28686e064f9e4",
                "md5": "c5f3f1ba94d86d4d53f1b10ded3ca3e7",
                "sha256": "b61080bc0d772f65ed13355da76b266117a56cec1cb23eabc05fa9f4f06d5a65"
            },
            "downloads": -1,
            "filename": "qi-3.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c5f3f1ba94d86d4d53f1b10ded3ca3e7",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 7374528,
            "upload_time": "2024-04-18T14:21:22",
            "upload_time_iso_8601": "2024-04-18T14:21:22.556773Z",
            "url": "https://files.pythonhosted.org/packages/80/aa/cb5669dafe11885631c2fd76e46557f37ede6dfff03903b28686e064f9e4/qi-3.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "28e3a0c6b6868b80a88e7d5bea12c43b65f368ef9aba840f78d514435f3e5a0b",
                "md5": "aed9005c2985624a0c4a847be3a84f10",
                "sha256": "204870eee5257f843002811b3111a81f17a769acd3e313f2fdceb0761ce574ea"
            },
            "downloads": -1,
            "filename": "qi-3.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "aed9005c2985624a0c4a847be3a84f10",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 7370900,
            "upload_time": "2024-04-18T14:21:25",
            "upload_time_iso_8601": "2024-04-18T14:21:25.656665Z",
            "url": "https://files.pythonhosted.org/packages/28/e3/a0c6b6868b80a88e7d5bea12c43b65f368ef9aba840f78d514435f3e5a0b/qi-3.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9579cac712f5eb64d0b1397747eea5ffc7bfd72d45c21c404488661ee1e86116",
                "md5": "f632c67661721ab7401bc546fae63168",
                "sha256": "3bc3902f8cd16a0490d8678be6912104f24f0578a072a8702bb62e3360b1d163"
            },
            "downloads": -1,
            "filename": "qi-3.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f632c67661721ab7401bc546fae63168",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 7373732,
            "upload_time": "2024-04-18T14:21:27",
            "upload_time_iso_8601": "2024-04-18T14:21:27.829545Z",
            "url": "https://files.pythonhosted.org/packages/95/79/cac712f5eb64d0b1397747eea5ffc7bfd72d45c21c404488661ee1e86116/qi-3.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-18 14:21:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "aldebaran",
    "github_project": "libqi-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "qi"
}
        
Elapsed time: 0.25207s