diff --git a/pixi.lock b/pixi.lock index ac88650032..4a3160174a 100644 --- a/pixi.lock +++ b/pixi.lock @@ -28,7 +28,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beartype-0.22.9-pyhd8ed1ab_0.conda @@ -49,16 +49,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21-21.1.8-default_h99862b1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.8-default_h99862b1_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.0-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.2-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.29.6-hcafd917_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colcon-argcomplete-0.3.3-pyhd8ed1ab_1.conda @@ -118,7 +118,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fabric-3.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fcl-0.7.0-h543440a_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hf567e27_908.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda @@ -135,12 +135,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.61.1-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/foonathan-memory-0.7.3-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.2.2-ha6d2627_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freeimage-3.18.0-h49ef1fa_24.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda @@ -192,7 +192,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/imath-3.2.2-hde8ca8f_0.conda @@ -202,11 +202,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jack-1.9.22-hf4617a5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jasper-4.2.8-he3c4edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jasper-4.2.9-he3c4edf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaxtyping-0.3.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda @@ -214,18 +214,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libacl-2.3.2-h0f662aa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.25.1-h3f43e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda @@ -243,7 +243,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libccd-double-2.1-h59595ed_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda @@ -256,8 +256,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda @@ -288,6 +288,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.11.0-5_h6ae95b6_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.0-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.2-hc2fc477_0.conda @@ -295,7 +296,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb03c661_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libode-0.16.6-he3147e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda @@ -326,7 +327,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsdformat14-14.8.0-py312h1f51ce1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-h0c1763c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda @@ -365,12 +366,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mesalib-25.3.5-h8cca3c9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda @@ -392,7 +394,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ompl-1.7.0-py312hd4042a8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencv-4.12.0-qt6_py312h7bb6282_612.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.5-h40f6f1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.6-h40f6f1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.26.3-h8d634f6_0.conda @@ -415,7 +417,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h7b42cdd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/playsound-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda @@ -457,10 +459,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.0-hab00c5b_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.8.1-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.3-py312h1289d80_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h3c3fd16_6.conda @@ -952,19 +954,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/urdfdom_headers-1.1.2-h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.09-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.0.0-hc0f0d8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.1.0-cpu_hc82bd48_.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-9.5.2-py312h244374b_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-io-ffmpeg-9.5.2-py312h8da9809_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-io-ffmpeg-9.5.2-py312hcdbd8b1_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wadler-lindig-0.1.7-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://data.bit-bots.de/conda-misc/output/linux-64/webots-2022b-hb0f4dca_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.1-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda @@ -973,7 +975,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda @@ -1002,8 +1004,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.23.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda @@ -1012,6 +1015,7 @@ environments: build: hb0f4dca_0 - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/fb/08b3f4bf05da99aba8ffea52a558758def16e8516bc75ca94ff73587e7d3/construct-2.10.70-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/bf/457ed5be028fb235f8f5ad40b5ddbf67023e0017090ea324d0fe6239a73c/dateparser-1.1.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz @@ -1026,13 +1030,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/35/850277d1b17b206bd10874c8a9a3f52e059452fb49bb0d22cbb908f6038b/hypercorn-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/9a/ab96291470e305504aa4b7a2e0ec132e930da89eb3ca7a82fbe03167c131/jsonlines-1.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/5f/93b3e3607ccd693a768eafee60829cd14ea1810b75aa48e8b20e27b332c4/marisa_trie-1.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/15/c2/3842d8e39006b5b03384418b55108a3f3931ac6fe9b998814be81267acec/marisa_trie-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/11/8f92f01da9cc41247008856438aa052cc93f74e4ac12ff250eb96a44249a/mycroft_mimic3_tts-0.2.4.tar.gz - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/af/ad86cfbfd65d5a86204b3a30893e92c0cf3f1a56280efc5a12e69d81f52d/onnxruntime-1.24.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/28/7c/fd253da53594ab8efbefdc85b3638620ab1a6aab6eb7028a513c853559ce/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b2/f1/d5318874aed3b57bd00bf76e8f9698b73b578137d9d403314a4e649fbb63/onnxruntime_webgpu-1.25.0.dev20260212001-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/2a/05a47a6c291414f5a66901f8d1f6ba68e8ec9fccb341d56fa0b31479d41d/panphon-0.22.2-py2.py3-none-any.whl @@ -1040,9 +1044,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/5e/5f/82c8074f7e84978129347c2c6ec8b6c59f3584ff1a20bc3c940a3e061790/priority-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/3f/da9732ccb24b71a7539470dcdfcd16c923692788f39553f37238f208ca55/python_crfsuite-0.9.12-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/84/14/9fb5842581f0419b5eb85f8c26c1c0c0f4cf6b4d5be638ae3157316a2650/pyttsx3-2.99-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e9/cc28f21f52913adf333f653b9e0a3bf9cb223f5083a26422968ba73edd8d/quart-0.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/31/da390a5a10674481dea2909178973de81fa3a246c0eedcc0e1e4114f52f8/quart_cors-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/3c/ea5a4687adaba5e125b9bd6190153d0037325a0ba3757cc1537cc2c8dd90/regex-2026.2.19-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/40/bb226f203caa22c1043c1ca79b36340156eca0f6a6742b46c3bb222a3a57/regex-2026.2.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/56/feb011ed1e8724c4c57083d71877eefe61f535f6dc94aa598033a03b54b7/swagger_ui_py-21.12.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl @@ -1070,7 +1075,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/atk-1.0-2.38.0-hedc4a1f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py312h3d8e7d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bcrypt-5.0.0-py312h5eb8f6c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beartype-0.22.9-pyhd8ed1ab_0.conda @@ -1091,16 +1096,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.6-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-compiler-1.11.0-hdceaead_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h83712da_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py312h1b372e3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-21-21.1.8-default_he95a3c9_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-21.1.8-default_he95a3c9_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cli11-2.6.0-h7ac5ae9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cli11-2.6.2-h7ac5ae9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cmake-3.29.6-h7042e5d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colcon-argcomplete-0.3.3-pyhd8ed1ab_1.conda @@ -1160,7 +1165,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fabric-3.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fcl-0.7.0-h841ecf2_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h1a35955_908.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda @@ -1177,12 +1182,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.61.1-py312ha4530ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.62.0-py312ha4530ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/foonathan-memory-0.7.3-h5ad3122_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fortran-compiler-1.11.0-h151373c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freeglut-3.2.2-h5eeb66e_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freeimage-3.18.0-hfe23055_24.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.1-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/frozenlist-1.7.0-py312hb10c72c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-14.3.0-h2e72a27_18.conda @@ -1202,7 +1207,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glew-2.3.0-hf9dcc85_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glib-2.86.4-hc66a092_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glib-tools-2.86.4-hc87f4d4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-hd1da3a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmock-1.17.0-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gnutls-3.8.11-hfe111f1_1.conda @@ -1233,7 +1238,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/imath-3.2.2-h92288e7_0.conda @@ -1241,10 +1246,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jasper-4.2.8-h27a9ab5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jasper-4.2.9-h27a9ab5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaxtyping-0.3.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda @@ -1253,17 +1258,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py312h1683e8e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libacl-2.3.2-h883460d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libaec-1.1.5-hff7e48a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarchive-3.8.5-gpl_hbe7d12b_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarchive-3.8.6-gpl_hbe7d12b_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libasprintf-0.25.1-h5e0f5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libasprintf-devel-0.25.1-h5e0f5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda @@ -1281,7 +1286,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libccd-double-2.1-h2f0025b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp21.1-21.1.8-default_he95a3c9_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-21.1.8-default_h94a09a5_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.0-default_h94a09a5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h5cdc715_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.18.0-h7bfdcfb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda @@ -1294,8 +1299,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.1-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.1-hdae7a39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-14.3.0-h25ba3ff_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda @@ -1325,8 +1330,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapacke-3.11.0-5_hb558247_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm20-20.1.8-hfd2ba90_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm21-21.1.8-hfd2ba90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.0-hfd2ba90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-devel-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmicrohttpd-1.0.2-h3543b8c_0.conda @@ -1334,7 +1339,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.67.0-ha888d0e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnuma-2.0.18-h86ecc28_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnuma-2.0.18-he30d5cf_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libode-0.16.6-py312h4eed292_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda @@ -1363,7 +1368,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsdformat14-14.8.0-py312h39f64fe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h022381a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h022381a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-h18c354c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-14.3.0-h57c8d61_118.conda @@ -1400,13 +1405,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lzo-2.10-h80f16a2_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/make-4.4.1-h2a6d0cb_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.10.8-py312h8025657_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.10.8-py312h9d0c5ba_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-25.0.5-h0ca1d6e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-25.3.5-h455aa48_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py312h4f740d2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.7.1-py312ha4530ae_0.conda @@ -1426,7 +1431,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/octomap-1.10.0-h17cf362_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ompl-1.7.0-py312hae32f5c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/opencv-4.12.0-qt6_py312h750a492_612.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openexr-3.4.5-hd0c962a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openexr-3.4.6-hd0c962a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjph-0.26.3-h55827e0_0.conda @@ -1449,7 +1454,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.3.0-py312h6e23c8a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pkg-config-0.29.2-hce167ba_1009.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/playsound-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda @@ -1491,10 +1496,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.0-h43d1f9e_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.8.1-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-orocos-kdl-1.5.3-py312h1ab2c47_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt-main-5.15.15-h2f19be9_6.conda @@ -1941,9 +1946,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/setproctitle-1.3.7-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-h8c88b8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/simpleeval-1.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sip-6.15.0-py312hfcd9f9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sip-6.15.2-py312hfcd9f9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda @@ -1960,7 +1965,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2025.5-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.32.3-h283c62a_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-3.1.2-hfae3067_0.conda @@ -1987,8 +1992,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/urdfdom_headers-1.1.2-h17cf362_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/utfcpp-4.09-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.0-cpu_hc7513a2_.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.0-cpu_hb695247_.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-9.5.2-py312h4954c87_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-base-9.5.2-py312h90a26f6_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-io-ffmpeg-9.5.2-py312haba1314_7.conda @@ -1996,8 +2001,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.1.1-py312hcd1a082_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.1.2-py312hcd1a082_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda @@ -2006,7 +2011,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.46-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda @@ -2035,7 +2040,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-tools-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-cpp-0.8.0-h5ad3122_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.22.0-py312ha4530ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.23.0-py312ha4530ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zfp-1.0.1-h05c1e92_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda @@ -2046,6 +2051,7 @@ environments: build: he8cfe8b_0 - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/fb/08b3f4bf05da99aba8ffea52a558758def16e8516bc75ca94ff73587e7d3/construct-2.10.70-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/bf/457ed5be028fb235f8f5ad40b5ddbf67023e0017090ea324d0fe6239a73c/dateparser-1.1.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz @@ -2060,22 +2066,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/35/850277d1b17b206bd10874c8a9a3f52e059452fb49bb0d22cbb908f6038b/hypercorn-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/9a/ab96291470e305504aa4b7a2e0ec132e930da89eb3ca7a82fbe03167c131/jsonlines-1.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/98/88ca0c98d37034a3237acaf461d210cbcfeb6687929e5ba0e354971fa3ed/marisa_trie-1.3.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/a8/a2/1e0f0665a98968b0af7067cf2dad569e1bd8c1f13a97670b74b5ac5153d9/marisa_trie-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/11/8f92f01da9cc41247008856438aa052cc93f74e4ac12ff250eb96a44249a/mycroft_mimic3_tts-0.2.4.tar.gz - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/8a/e2d4332ae18d6383376e75141cd914256bee12c3cc439f42260eb176ceb9/onnxruntime-1.24.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1c/dc/1f5489f7b21817d4ad352bf7a92a252bd5b438bcbaa7ad20ea50814edc79/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/72/2a/05a47a6c291414f5a66901f8d1f6ba68e8ec9fccb341d56fa0b31479d41d/panphon-0.22.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/6f/0cf0746d02a356103b7c3a065dbc188d8b5092e58bb363d74aa668ee1ad1/phonemes2ids-1.2.2.tar.gz - pypi: https://files.pythonhosted.org/packages/5e/5f/82c8074f7e84978129347c2c6ec8b6c59f3584ff1a20bc3c940a3e061790/priority-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/0c/9725b097738f4a6aac9ac4e5a5fc6494eca69f17663d3d6ba8d0ea3858d2/python_crfsuite-0.9.12-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/84/14/9fb5842581f0419b5eb85f8c26c1c0c0f4cf6b4d5be638ae3157316a2650/pyttsx3-2.99-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e9/cc28f21f52913adf333f653b9e0a3bf9cb223f5083a26422968ba73edd8d/quart-0.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/31/da390a5a10674481dea2909178973de81fa3a246c0eedcc0e1e4114f52f8/quart_cors-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/d0/b7dd3883ed1cff8ee0c0c9462d828aaf12be63bf5dc55453cbf423523b13/regex-2026.2.19-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/dd/c9/8cc8d850b35ab5650ff6756a1cb85286e2000b66c97520b29c1587455344/regex-2026.2.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/56/feb011ed1e8724c4c57083d71877eefe61f535f6dc94aa598033a03b54b7/swagger_ui_py-21.12.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl @@ -2099,18 +2106,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21-21.1.8-default_h99862b1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.8-default_h99862b1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cppcheck-2.18.3-py312h014360a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.53.0-pl5321h6d3cee1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/git-subrepo-0.4.9-hc364b38_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda @@ -2130,14 +2137,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hca6bf5a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-he237659_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda @@ -2145,21 +2152,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre-8.45-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.0-hab00c5b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.2.9999-h4616a5c_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tinyxml2-11.0.0-h3f2d84a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.1.0-py312hd9148b4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.2-ha02ee65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.2-ha02ee65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.2-hb03c661_0.conda @@ -2170,18 +2178,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.6-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py312h1b372e3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-21-21.1.8-default_he95a3c9_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-21.1.8-default_he95a3c9_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cppcheck-2.18.3-py312h5677ec4_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/git-2.53.0-pl5321h5dcfaa0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/git-subrepo-0.4.9-hc364b38_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda @@ -2201,14 +2209,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-devel-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.67.0-ha888d0e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h86ecc28_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-h18c354c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h79dcc73_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h825857f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda @@ -2216,21 +2224,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre-8.45-h01db608_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/perl-5.32.1-7_h31becfc_perl5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.0-h43d1f9e_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.2.9999-h4616a5c_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tinyxml2-11.0.0-h5ad3122_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ukkonen-1.1.0-py312h4f740d2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.8.2-hd704e39_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-gpl-tools-5.8.2-hd704e39_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-tools-5.8.2-he30d5cf_0.conda @@ -2265,7 +2274,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beartype-0.22.9-pyhd8ed1ab_0.conda @@ -2286,16 +2295,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21-21.1.8-default_h99862b1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.8-default_h99862b1_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.0-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.2-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-3.29.6-hcafd917_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colcon-argcomplete-0.3.3-pyhd8ed1ab_1.conda @@ -2355,7 +2364,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fabric-3.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fcl-0.7.0-h543440a_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hf567e27_908.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda @@ -2372,12 +2381,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.61.1-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/foonathan-memory-0.7.3-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.11.0-h9bea470_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.2.2-ha6d2627_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freeimage-3.18.0-h49ef1fa_24.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda @@ -2429,7 +2438,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/imath-3.2.2-hde8ca8f_0.conda @@ -2439,11 +2448,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jack-1.9.22-hf4617a5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jasper-4.2.8-he3c4edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jasper-4.2.9-he3c4edf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaxtyping-0.3.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda @@ -2451,18 +2460,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libacl-2.3.2-h0f662aa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.25.1-h3f43e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda @@ -2480,7 +2489,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libccd-double-2.1-h59595ed_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda @@ -2493,8 +2502,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda @@ -2525,6 +2534,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.11.0-5_h6ae95b6_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.0-hf7376ad_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-devel-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.2-hc2fc477_0.conda @@ -2532,7 +2542,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb03c661_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libode-0.16.6-he3147e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda @@ -2563,7 +2573,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsdformat14-14.8.0-py312h1f51ce1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-h0c1763c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_118.conda @@ -2602,12 +2612,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mesalib-25.3.5-h8cca3c9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda @@ -2629,7 +2640,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ompl-1.7.0-py312hd4042a8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencv-4.12.0-qt6_py312h7bb6282_612.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.5-h40f6f1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.6-h40f6f1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjph-0.26.3-h8d634f6_0.conda @@ -2652,7 +2663,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py312h7b42cdd_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/playsound-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda @@ -2694,10 +2705,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.0-hab00c5b_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.8.1-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.3-py312h1289d80_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.15-h3c3fd16_6.conda @@ -3189,19 +3200,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/urdfdom_headers-1.1.2-h84d6215_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.09-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.0.0-hc0f0d8f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.1.0-cpu_hc82bd48_.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-9.5.2-py312h244374b_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-io-ffmpeg-9.5.2-py312h8da9809_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-io-ffmpeg-9.5.2-py312hcdbd8b1_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wadler-lindig-0.1.7-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://data.bit-bots.de/conda-misc/output/linux-64/webots-2022b-hb0f4dca_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.1-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda @@ -3210,7 +3221,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda @@ -3239,8 +3250,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py312h8a5da7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.23.0-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda @@ -3249,6 +3261,7 @@ environments: build: hb0f4dca_0 - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/fb/08b3f4bf05da99aba8ffea52a558758def16e8516bc75ca94ff73587e7d3/construct-2.10.70-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/bf/457ed5be028fb235f8f5ad40b5ddbf67023e0017090ea324d0fe6239a73c/dateparser-1.1.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz @@ -3263,13 +3276,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/35/850277d1b17b206bd10874c8a9a3f52e059452fb49bb0d22cbb908f6038b/hypercorn-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/9a/ab96291470e305504aa4b7a2e0ec132e930da89eb3ca7a82fbe03167c131/jsonlines-1.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/5f/93b3e3607ccd693a768eafee60829cd14ea1810b75aa48e8b20e27b332c4/marisa_trie-1.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/15/c2/3842d8e39006b5b03384418b55108a3f3931ac6fe9b998814be81267acec/marisa_trie-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/11/8f92f01da9cc41247008856438aa052cc93f74e4ac12ff250eb96a44249a/mycroft_mimic3_tts-0.2.4.tar.gz - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/af/ad86cfbfd65d5a86204b3a30893e92c0cf3f1a56280efc5a12e69d81f52d/onnxruntime-1.24.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/28/7c/fd253da53594ab8efbefdc85b3638620ab1a6aab6eb7028a513c853559ce/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b2/f1/d5318874aed3b57bd00bf76e8f9698b73b578137d9d403314a4e649fbb63/onnxruntime_webgpu-1.25.0.dev20260212001-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/72/2a/05a47a6c291414f5a66901f8d1f6ba68e8ec9fccb341d56fa0b31479d41d/panphon-0.22.2-py2.py3-none-any.whl @@ -3278,9 +3291,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/fc/b7/ba5551480e397c6e86805cc381dd6dc36b15411a806c00c35b661d8dd77e/pyamdgpuinfo-2.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/63/3f/da9732ccb24b71a7539470dcdfcd16c923692788f39553f37238f208ca55/python_crfsuite-0.9.12-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/84/14/9fb5842581f0419b5eb85f8c26c1c0c0f4cf6b4d5be638ae3157316a2650/pyttsx3-2.99-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e9/cc28f21f52913adf333f653b9e0a3bf9cb223f5083a26422968ba73edd8d/quart-0.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/31/da390a5a10674481dea2909178973de81fa3a246c0eedcc0e1e4114f52f8/quart_cors-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/3c/ea5a4687adaba5e125b9bd6190153d0037325a0ba3757cc1537cc2c8dd90/regex-2026.2.19-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9e/40/bb226f203caa22c1043c1ca79b36340156eca0f6a6742b46c3bb222a3a57/regex-2026.2.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/56/feb011ed1e8724c4c57083d71877eefe61f535f6dc94aa598033a03b54b7/swagger_ui_py-21.12.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl @@ -3308,7 +3322,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/atk-1.0-2.38.0-hedc4a1f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py312h3d8e7d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bcrypt-5.0.0-py312h5eb8f6c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beartype-0.22.9-pyhd8ed1ab_0.conda @@ -3329,16 +3343,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.6-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-compiler-1.11.0-hdceaead_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h83712da_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py312h1b372e3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-21-21.1.8-default_he95a3c9_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/clang-format-21.1.8-default_he95a3c9_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cli11-2.6.0-h7ac5ae9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cli11-2.6.2-h7ac5ae9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cmake-3.29.6-h7042e5d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colcon-argcomplete-0.3.3-pyhd8ed1ab_1.conda @@ -3398,7 +3412,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fabric-3.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fcl-0.7.0-h841ecf2_8.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h1a35955_908.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda @@ -3415,12 +3429,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.61.1-py312ha4530ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.62.0-py312ha4530ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/foonathan-memory-0.7.3-h5ad3122_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fortran-compiler-1.11.0-h151373c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freeglut-3.2.2-h5eeb66e_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freeimage-3.18.0-hfe23055_24.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.1-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/frozenlist-1.7.0-py312hb10c72c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-14.3.0-h2e72a27_18.conda @@ -3440,7 +3454,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glew-2.3.0-hf9dcc85_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glib-2.86.4-hc66a092_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glib-tools-2.86.4-hc87f4d4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-hd1da3a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmock-1.17.0-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gnutls-3.8.11-hfe111f1_1.conda @@ -3471,7 +3485,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyh707e725_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/imath-3.2.2-h92288e7_0.conda @@ -3479,10 +3493,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jasper-4.2.8-h27a9ab5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jasper-4.2.9-h27a9ab5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaxtyping-0.3.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda @@ -3491,17 +3505,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py312h1683e8e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.18-h9d5b58d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libacl-2.3.2-h883460d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libaec-1.1.5-hff7e48a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarchive-3.8.5-gpl_hbe7d12b_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarchive-3.8.6-gpl_hbe7d12b_100.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libasprintf-0.25.1-h5e0f5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libasprintf-devel-0.25.1-h5e0f5ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda @@ -3519,7 +3533,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libccd-double-2.1-h2f0025b_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp21.1-21.1.8-default_he95a3c9_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-21.1.8-default_h94a09a5_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.0-default_h94a09a5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h5cdc715_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.18.0-h7bfdcfb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda @@ -3532,8 +3546,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.1-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.1-hdae7a39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-14.3.0-h25ba3ff_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda @@ -3563,8 +3577,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapacke-3.11.0-5_hb558247_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm20-20.1.8-hfd2ba90_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm21-21.1.8-hfd2ba90_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.0-hfd2ba90_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-devel-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmicrohttpd-1.0.2-h3543b8c_0.conda @@ -3572,7 +3586,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.67.0-ha888d0e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnuma-2.0.18-h86ecc28_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnuma-2.0.18-he30d5cf_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libode-0.16.6-py312h4eed292_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda @@ -3601,7 +3615,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsdformat14-14.8.0-py312h39f64fe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h022381a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h022381a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-h18c354c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-14.3.0-h57c8d61_118.conda @@ -3638,13 +3652,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lzo-2.10-h80f16a2_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/make-4.4.1-h2a6d0cb_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.10.8-py312h8025657_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.10.8-py312h9d0c5ba_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-25.0.5-h0ca1d6e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-25.3.5-h455aa48_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py312h4f740d2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.7.1-py312ha4530ae_0.conda @@ -3664,7 +3678,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/octomap-1.10.0-h17cf362_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ompl-1.7.0-py312hae32f5c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/opencv-4.12.0-qt6_py312h750a492_612.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openexr-3.4.5-hd0c962a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openexr-3.4.6-hd0c962a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjph-0.26.3-h55827e0_0.conda @@ -3687,7 +3701,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.3.0-py312h6e23c8a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pkg-config-0.29.2-hce167ba_1009.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/playsound-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_3.conda @@ -3729,10 +3743,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.0-h43d1f9e_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.8.1-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-orocos-kdl-1.5.3-py312h1ab2c47_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt-main-5.15.15-h2f19be9_6.conda @@ -4179,9 +4193,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/setproctitle-1.3.7-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-h8c88b8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/simpleeval-1.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sip-6.15.0-py312hfcd9f9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sip-6.15.2-py312hfcd9f9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda @@ -4198,7 +4212,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2025.5-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.32.3-h283c62a_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-3.1.2-hfae3067_0.conda @@ -4225,8 +4239,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/urdfdom_headers-1.1.2-h17cf362_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/utfcpp-4.09-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.0-cpu_hc7513a2_.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.0-cpu_hb695247_.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-9.5.2-py312h4954c87_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-base-9.5.2-py312h90a26f6_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-io-ffmpeg-9.5.2-py312haba1314_7.conda @@ -4234,8 +4248,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.1.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.1.1-py312hcd1a082_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.1.2-py312hcd1a082_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda @@ -4244,7 +4258,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.46-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda @@ -4273,7 +4287,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-tools-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-cpp-0.8.0-h5ad3122_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.22.0-py312ha4530ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.23.0-py312ha4530ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zfp-1.0.1-h05c1e92_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda @@ -4284,6 +4298,7 @@ environments: build: he8cfe8b_0 - pypi: https://files.pythonhosted.org/packages/bc/8a/340a1555ae33d7354dbca4faa54948d76d89a27ceef032c8c3bc661d003e/aiofiles-25.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/fb/08b3f4bf05da99aba8ffea52a558758def16e8516bc75ca94ff73587e7d3/construct-2.10.70-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/bf/457ed5be028fb235f8f5ad40b5ddbf67023e0017090ea324d0fe6239a73c/dateparser-1.1.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz @@ -4298,13 +4313,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/93/35/850277d1b17b206bd10874c8a9a3f52e059452fb49bb0d22cbb908f6038b/hypercorn-0.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/9a/ab96291470e305504aa4b7a2e0ec132e930da89eb3ca7a82fbe03167c131/jsonlines-1.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fe/98/88ca0c98d37034a3237acaf461d210cbcfeb6687929e5ba0e354971fa3ed/marisa_trie-1.3.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/a8/a2/1e0f0665a98968b0af7067cf2dad569e1bd8c1f13a97670b74b5ac5153d9/marisa_trie-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/11/8f92f01da9cc41247008856438aa052cc93f74e4ac12ff250eb96a44249a/mycroft_mimic3_tts-0.2.4.tar.gz - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/01/8a/e2d4332ae18d6383376e75141cd914256bee12c3cc439f42260eb176ceb9/onnxruntime-1.24.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1c/dc/1f5489f7b21817d4ad352bf7a92a252bd5b438bcbaa7ad20ea50814edc79/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/72/2a/05a47a6c291414f5a66901f8d1f6ba68e8ec9fccb341d56fa0b31479d41d/panphon-0.22.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/6f/0cf0746d02a356103b7c3a065dbc188d8b5092e58bb363d74aa668ee1ad1/phonemes2ids-1.2.2.tar.gz @@ -4312,9 +4327,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/80/15/2ff925c0776c7a2aaab3d03b0e477d1a24b0637600b7e2e928cbcc25034f/pyamdgpuinfo-2.1.7.tar.gz - pypi: https://files.pythonhosted.org/packages/7a/0c/9725b097738f4a6aac9ac4e5a5fc6494eca69f17663d3d6ba8d0ea3858d2/python_crfsuite-0.9.12-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/84/14/9fb5842581f0419b5eb85f8c26c1c0c0f4cf6b4d5be638ae3157316a2650/pyttsx3-2.99-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e9/cc28f21f52913adf333f653b9e0a3bf9cb223f5083a26422968ba73edd8d/quart-0.20.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/31/da390a5a10674481dea2909178973de81fa3a246c0eedcc0e1e4114f52f8/quart_cors-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/d0/b7dd3883ed1cff8ee0c0c9462d828aaf12be63bf5dc55453cbf423523b13/regex-2026.2.19-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/dd/c9/8cc8d850b35ab5650ff6756a1cb85286e2000b66c97520b29c1587455344/regex-2026.2.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/56/feb011ed1e8724c4c57083d71877eefe61f535f6dc94aa598033a03b54b7/swagger_ui_py-21.12.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl @@ -4662,19 +4678,20 @@ packages: - pkg:pypi/attrs?source=compressed-mapping size: 64759 timestamp: 1764875182184 -- conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda - sha256: 7377bce9fcc03fecd3607843d20b50546c30a923a3517a322a2a784fa6e380eb - md5: ea5be9abc2939c8431893b4e123a2065 +- conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda + sha256: a14a9ad02101aab25570543a59c5193043b73dc311a25650134ed9e6cb691770 + md5: f1976ce927373500cc19d3c0b2c85177 depends: - python >=3.10 - - pytz >=2015.7 - python + constrains: + - pytz >=2015.7 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/babel?source=hash-mapping - size: 7684373 - timestamp: 1770326844118 + - pkg:pypi/babel?source=compressed-mapping + size: 7684321 + timestamp: 1772555330347 - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda sha256: d77a24be15e283d83214121428290dbe55632a6e458378205b39c550afa008cf md5: 5b8c55fed2e576dde4b0b33693a4fdb1 @@ -5150,15 +5167,15 @@ packages: purls: [] size: 6721 timestamp: 1753098688332 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2 - md5: bddacf101bb4dd0e51811cb69c7790e2 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc + md5: 4492fd26db29495f0ba23f146cd5638d depends: - __unix license: ISC purls: [] - size: 146519 - timestamp: 1767500828366 + size: 147413 + timestamp: 1772006283803 - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda sha256: 3bd6a391ad60e471de76c0e9db34986c4b5058587fbf2efa5a7f54645e28c2c7 md5: 09262e66b19567aff4f592fb53b28760 @@ -5226,16 +5243,16 @@ packages: - pkg:pypi/catkin-pkg?source=hash-mapping size: 54106 timestamp: 1757558592553 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda - sha256: 110338066d194a715947808611b763857c15458f8b3b97197387356844af9450 - md5: eacc711330cd46939f66cd401ff9c44b +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 + md5: 765c4d97e877cdbbb88ff33152b86125 depends: - python >=3.10 license: ISC purls: - pkg:pypi/certifi?source=compressed-mapping - size: 150969 - timestamp: 1767500900768 + size: 151445 + timestamp: 1772001170301 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda sha256: 7dafe8173d5f94e46cf9cd597cc8ff476a8357fbbd4433a8b5697b2864845d9c md5: 648ee28dcd4e07a1940a17da62eccd40 @@ -5278,17 +5295,17 @@ packages: - pkg:pypi/cfgv?source=hash-mapping size: 13589 timestamp: 1763607964133 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - sha256: b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59 - md5: a22d1fd9bf98827e280a02875d9a007a +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.5-pyhd8ed1ab_0.conda + sha256: 05ea76a016c77839b64f9f8ec581775f6c8a259044bd5b45a177e46ab4e7feac + md5: beb628209b2b354b98203066f90b3287 depends: - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/charset-normalizer?source=hash-mapping - size: 50965 - timestamp: 1760437331772 + - pkg:pypi/charset-normalizer?source=compressed-mapping + size: 53210 + timestamp: 1772816516728 - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.8-default_h99862b1_3.conda sha256: 1b3deb505af39c18e6ed74c2f80a81e93ccfe856dba53cb1dc6abc4a43928186 md5: 60c5a8962694a08e5a6c053a34ecf133 @@ -5345,31 +5362,29 @@ packages: purls: [] size: 72216 timestamp: 1770191668411 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.0-h54a6638_0.conda - sha256: 324097cd9dde3a4623b0275655ea34641481daa5c1274f9ab994e8a2e6aa26e6 - md5: ddf9fed4661bace13f33f08fe38a5f45 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.2-h54a6638_0.conda + sha256: 1d635e8963e094d95d35148df4b46e495f93bb0750ad5069f4e0e6bbb47ac3bf + md5: 83dae3dfadcfec9b37a9fbff6f7f7378 depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 98102 - timestamp: 1760975548381 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cli11-2.6.0-h7ac5ae9_0.conda - sha256: 534f236e95bb1d5db2c314ce1bac982ef8f4e14abab2ea2c7ee2a0043dbc929d - md5: a19699b00ac5ffa580ff33e5d80232f2 + size: 99051 + timestamp: 1772207728613 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cli11-2.6.2-h7ac5ae9_0.conda + sha256: a52d45824f7358e7d4abee36abcf9ae298523e8548e98899b5a317dd7cb2a685 + md5: 4728e6e898f6af8dc024db1f66a2a50f depends: - libgcc >=14 - libstdcxx >=14 - - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 97923 - timestamp: 1760975711699 + size: 99015 + timestamp: 1772207983869 - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 md5: ea8a6c3256897cc31263de9f455e25d9 @@ -5867,6 +5882,18 @@ packages: purls: [] size: 18484 timestamp: 1648912662150 +- pypi: https://files.pythonhosted.org/packages/b2/fb/08b3f4bf05da99aba8ffea52a558758def16e8516bc75ca94ff73587e7d3/construct-2.10.70-py3-none-any.whl + name: construct + version: 2.10.70 + sha256: c80be81ef595a1a821ec69dc16099550ed22197615f4320b57cc9ce2a672cb30 + requires_dist: + - arrow ; extra == 'extras' + - cloudpickle ; extra == 'extras' + - cryptography ; extra == 'extras' + - lz4 ; extra == 'extras' + - numpy ; extra == 'extras' + - ruamel-yaml ; extra == 'extras' + requires_python: '>=3.6' - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py312h0a2e395_4.conda sha256: 62447faf7e8eb691e407688c0b4b7c230de40d5ecf95bf301111b4d05c5be473 md5: 43c2bc96af3ae5ed9e8a10ded942aa50 @@ -6359,6 +6386,7 @@ packages: - libgcc >=14 - __glibc >=2.17,<3.0.a0 license: MPL-2.0 + license_family: MOZILLA purls: [] size: 1173190 timestamp: 1771922274213 @@ -6369,6 +6397,7 @@ packages: - libstdcxx >=14 - libgcc >=14 license: MPL-2.0 + license_family: MOZILLA purls: [] size: 1173140 timestamp: 1771922508919 @@ -6702,16 +6731,16 @@ packages: purls: [] size: 12028458 timestamp: 1766459996434 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - sha256: 6d576ed3bd0e7c57b1144f0b2014de9ea3fab9786316bc3e748105d44e0140a0 - md5: 9dbb20eec24beb026291c20a35ce1ff9 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + sha256: dddea9ec53d5e179de82c24569d41198f98db93314f0adae6b15195085d5567f + md5: f58064cec97b12a7136ebb8a6f8a129b depends: - python >=3.10 license: Unlicense purls: - pkg:pypi/filelock?source=compressed-mapping - size: 24808 - timestamp: 1771468713029 + size: 25845 + timestamp: 1773314012590 - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.3.0-pyhd8ed1ab_0.conda sha256: a32e511ea71a9667666935fd9f497f00bcc6ed0099ef04b9416ac24606854d58 md5: 04a55140685296b25b79ad942264c0ef @@ -6949,9 +6978,9 @@ packages: purls: [] size: 4059 timestamp: 1762351264405 -- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.61.1-py312h8a5da7c_0.conda - sha256: c73cd238e0f6b2183c5168b64aa35a7eb66bb145192a9b26bb9041a4152844a3 - md5: 3bf8fb959dc598c67dac0430b4aff57a +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.62.0-py312h8a5da7c_0.conda + sha256: 777c80a1aa0889e6b637631c31f95d0b048848c5ba710f89ed7cedd3ad318227 + md5: 526f7ffd63820e55d7992cc1cf931a36 depends: - __glibc >=2.17,<3.0.a0 - brotli @@ -6963,12 +6992,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/fonttools?source=hash-mapping - size: 2932702 - timestamp: 1765632761555 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.61.1-py312ha4530ae_0.conda - sha256: 2274586cc2863f249f0d843b343897f6448e4e0ccceb51a1af6673de2ebd1c02 - md5: 815d984410c54cf5186fbb6f2ff13628 + - pkg:pypi/fonttools?source=compressed-mapping + size: 2935817 + timestamp: 1773137546716 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.62.0-py312ha4530ae_0.conda + sha256: ca4e2e03dc6c2b34880a7b450fe9bd66d7b2b26b5ee62dc2aa605f8e974ff758 + md5: d2038fcea211e3e59fa78fa03938edad depends: - brotli - libgcc >=14 @@ -6980,9 +7009,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/fonttools?source=hash-mapping - size: 2901753 - timestamp: 1765632735926 + - pkg:pypi/fonttools?source=compressed-mapping + size: 2936215 + timestamp: 1773137278297 - conda: https://conda.anaconda.org/conda-forge/linux-64/foonathan-memory-0.7.3-h5888daf_1.conda sha256: 28d9fce64ee8b5e94350feb0829e054811678f9638039f78ddff8a8615c1b693 md5: 2a3316f47d7827afde5381ecd43b5e85 @@ -7105,26 +7134,26 @@ packages: purls: [] size: 485755 timestamp: 1763479143663 -- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda - sha256: bf8e4dffe46f7d25dc06f31038cacb01672c47b9f45201f065b0f4d00ab0a83e - md5: 4afc585cd97ba8a23809406cd8a9eda8 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda + sha256: 36857701b46828b6760c3c1652414ee504e7fc12740261ac6fcff3959b72bd7a + md5: eeec961fec28e747e1e1dc0446277452 depends: - - libfreetype 2.14.1 ha770c72_0 - - libfreetype6 2.14.1 h73754d4_0 + - libfreetype 2.14.2 ha770c72_0 + - libfreetype6 2.14.2 h73754d4_0 license: GPL-2.0-only OR FTL purls: [] - size: 173114 - timestamp: 1757945422243 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.1-h8af1aa0_0.conda - sha256: 9f8de35e95ce301cecfe01bc9d539c7cc045146ffba55efe9733ff77ad1cfb21 - md5: 0c8f36ebd3678eed1685f0fc93fc2175 + size: 174292 + timestamp: 1772757205296 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda + sha256: ecbe6e811574fba5194b29ac3a2badea5eaa060bd9fe7f5bd48a70d16ef38e5a + md5: 9cb47d7bbb36646c44d7cf1cb8047887 depends: - - libfreetype 2.14.1 h8af1aa0_0 - - libfreetype6 2.14.1 hdae7a39_0 + - libfreetype 2.14.2 h8af1aa0_0 + - libfreetype6 2.14.2 hdae7a39_0 license: GPL-2.0-only OR FTL purls: [] - size: 173174 - timestamp: 1757945489158 + size: 173437 + timestamp: 1772756019067 - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda sha256: 858283ff33d4c033f4971bf440cebff217d5552a5222ba994c49be990dacd40d md5: f9f81ea472684d75b9dd8d0b328cf655 @@ -7610,18 +7639,18 @@ packages: purls: [] size: 1353008 timestamp: 1770195199411 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-hd1da3a6_0.conda - sha256: bdabb15234026840760db07fc9f1b33dc4d3e1fde1cd2aab2b04e78b927a75c4 - md5: 3f327980b9e38ea34d7cf2831a2a4bcc +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda + sha256: a1c0db6c226b9d80e74bdd49f604eece637489c8c71e6ae63ada8db9e2359944 + md5: 3ead7f968b529f76f972621558ed2f68 depends: - libgcc >=14 - libstdcxx >=14 - - spirv-tools >=2025,<2026.0a0 + - spirv-tools >=2026,<2027.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 1349540 - timestamp: 1769369895399 + size: 1348415 + timestamp: 1770195275881 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmock-1.17.0-ha770c72_1.conda sha256: 80ca13dc518962fcd86856586cb5fb612fe69914234eab322f9dee25f628090f md5: 33e7a8280999b958df24a95f0cb86b1a @@ -8587,28 +8616,28 @@ packages: purls: [] size: 12282786 timestamp: 1720853454991 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - sha256: 09f7f9213eb68e7e4291cd476e72b37f3ded99ed957528567f32f5ba6b611043 - md5: 15b35dc33e185e7d2aac1cfcd6778627 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + sha256: dcbaa3042084ac58685e3ef4547e4c4be9d37dc52b92ea18581288af95e48b52 + md5: 998ee7d53e32f7ab57fc35707285527e depends: - libgcc >=14 - libstdcxx >=14 license: MIT license_family: MIT - size: 12852963 - timestamp: 1767975394622 -- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.16-pyhd8ed1ab_0.conda - sha256: 6a88cdde151469131df1948839ac2315ada99cf8d38aaacc9a7a5984e9cd8c19 - md5: 8bc5851c415865334882157127e75799 + size: 12851689 + timestamp: 1772208964788 +- conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.17-pyhd8ed1ab_0.conda + sha256: 7cd5eccdb171a0adbf83a1ad8fc4e17822f4fc3f5518da9040de64e88bc07343 + md5: 5b7ae2ec4e0750e094f804a6cf1b2a37 depends: - python >=3.10 - ukkonen license: MIT license_family: MIT purls: - - pkg:pypi/identify?source=compressed-mapping - size: 79302 - timestamp: 1768295306539 + - pkg:pypi/identify?source=hash-mapping + size: 79520 + timestamp: 1772402363021 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 md5: 53abe63df7e10a6ba605dc5f9f961d36 @@ -8731,29 +8760,28 @@ packages: - pkg:pypi/invoke?source=hash-mapping size: 132825 timestamp: 1760146119847 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.10.0-pyh53cf698_0.conda - sha256: 12cb4db242ea1a2e5e60a51b20f16e9c8120a9eb5d013c641cbf827bf3bb78e1 - md5: 441ca4e203a62f7db2f29f190c02b9cf +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.11.0-pyhecfbec7_0.conda + sha256: 1f90e346baab7926bc52d7b60c0625087e96b4fab1bdb9a7fe83ac842312c930 + md5: 326c46b8ec2a1b4964927c7ea55ebf49 depends: - __unix - - pexpect >4.3 - - decorator >=4.3.2 + - decorator >=5.1.0 - ipython_pygments_lexers >=1.0.0 - - jedi >=0.18.1 - - matplotlib-inline >=0.1.5 + - jedi >=0.18.2 + - matplotlib-inline >=0.1.6 - prompt-toolkit >=3.0.41,<3.1.0 - - pygments >=2.11.0 - - python >=3.11 + - pygments >=2.14.0 + - python >=3.12 - stack_data >=0.6.0 - traitlets >=5.13.0 - - typing_extensions >=4.6 + - pexpect >4.6 - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/ipython?source=compressed-mapping - size: 647436 - timestamp: 1770040907512 + size: 648197 + timestamp: 1772790149194 - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 md5: bd80ba060603cc228d9d81c257093119 @@ -8791,33 +8819,33 @@ packages: purls: [] size: 461260 timestamp: 1747574434594 -- conda: https://conda.anaconda.org/conda-forge/linux-64/jasper-4.2.8-he3c4edf_0.conda - sha256: 0e919ec86d980901d8cbb665e91f5e9bddb5ff662178f25aed6d63f999fd9afc - md5: a04073db11c2c86c555fb088acc8f8c1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/jasper-4.2.9-he3c4edf_0.conda + sha256: cea4c90ca4971cbc29d5930301cabcc581a781fd26d0cc7ca0aa459cb33ff573 + md5: 5455c1a77c2aa337f04d94ff0ef413c3 depends: - __glibc >=2.17,<3.0.a0 - freeglut >=3.2.2,<4.0a0 - libgcc >=14 - libglu >=9.0.3,<10.0a0 - libglu >=9.0.3,<9.1.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 license: JasPer-2.0 purls: [] - size: 681643 - timestamp: 1754514437930 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jasper-4.2.8-h27a9ab5_0.conda - sha256: 9a35d2fa6f74df0952303e1ba951ed4928d36ba7149a07c3c896b5619be731c3 - md5: 310b168e7084345675ba0cd30b1dc1ce + size: 683370 + timestamp: 1772794291374 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jasper-4.2.9-h27a9ab5_0.conda + sha256: 0bcf499e170a35df96a6dbcf98fcce28fdb369d652e915392cdc7448ea28643a + md5: 1591a2cca2a575ecd07f6058da35d722 depends: - freeglut >=3.2.2,<4.0a0 - libgcc >=14 - libglu >=9.0.3,<10.0a0 - libglu >=9.0.3,<9.1.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 license: JasPer-2.0 purls: [] - size: 727096 - timestamp: 1754514489871 + size: 718883 + timestamp: 1772794311177 - conda: https://conda.anaconda.org/conda-forge/noarch/jaxtyping-0.3.7-pyhd8ed1ab_0.conda sha256: f6d39c7a9acf6289e75444c032a7154bba5abb45b16feb4013e12250cd485cc2 md5: 96387643c6c475b099766f98c41242f0 @@ -8940,24 +8968,24 @@ packages: purls: [] size: 129048 timestamp: 1754906002667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_2.conda - sha256: 170d76b7ac7197012bb048e1021482a7b2455f3592a5e8d97c96f285ebad064b - md5: 3a3004fddd39e3bb1a631b08d7045156 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py312h0a2e395_0.conda + sha256: eec7654c2d68f06590862c6e845cc70987b6d6559222b6f0e619dea4268f5dd5 + md5: cd74a9525dc74bbbf93cf8aa2fa9eb5b depends: - python - - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/kiwisolver?source=hash-mapping - size: 77682 - timestamp: 1762488738724 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py312h1683e8e_2.conda - sha256: 04187c7cf56abd3cebd504e717724b817fc0952b08f0099e1523542da1aa90b0 - md5: b1d3e3106c1d103d367298dcfa77837a + - pkg:pypi/kiwisolver?source=compressed-mapping + size: 77120 + timestamp: 1773067050308 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py312h1683e8e_0.conda + sha256: 778a04854b5eb635216839f4ae7b3f312d306b6554b0296c745fd47d8859fe8c + md5: f72640fdd363b16da4c2972236c80035 depends: - python - libstdcxx >=14 @@ -8967,8 +8995,8 @@ packages: license_family: BSD purls: - pkg:pypi/kiwisolver?source=hash-mapping - size: 82688 - timestamp: 1762488927391 + size: 82439 + timestamp: 1773067307369 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 md5: 3f43953b7d3fb3aaa1d0d0723d91e368 @@ -9109,32 +9137,32 @@ packages: purls: [] size: 875924 timestamp: 1770267209884 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - sha256: 412381a43d5ff9bbed82cd52a0bbca5b90623f62e41007c9c42d3870c60945ff - md5: 9344155d33912347b37f0ae6c410a835 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 + - libgcc >=14 + - libstdcxx >=14 license: Apache-2.0 license_family: Apache purls: [] - size: 264243 - timestamp: 1745264221534 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda - sha256: f01df5bbf97783fac9b89be602b4d02f94353f5221acfd80c424ec1c9a8d276c - md5: 60dceb7e876f4d74a9cbd42bbbc6b9cf + size: 261513 + timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda + sha256: 8957fd460c1c132c8031f65fd5f56ec3807fd71b7cab2c5e2b0937b13404ab36 + md5: d13423b06447113a90b5b1366d4da171 depends: - - libgcc >=13 - - libstdcxx >=13 + - libgcc >=14 + - libstdcxx >=14 license: Apache-2.0 license_family: Apache purls: [] - size: 227184 - timestamp: 1745265544057 -- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.0-hb700be7_0.conda - sha256: 863e1caf9d0086f93b66c43bf646481bb820fffdf037425c511cb0a54d18d1fc - md5: a4724e93a90434575b889adb4dc57b49 + size: 240444 + timestamp: 1773114901155 +- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda + sha256: 5384380213daffbd7fe4d568b2cf2ab9f2476f7a5f228a3d70280e98333eaf0f + md5: 4323e07abff8366503b97a0f17924b76 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -9142,8 +9170,8 @@ packages: license: MIT license_family: MIT purls: [] - size: 672752 - timestamp: 1770189828697 + size: 858387 + timestamp: 1772045965844 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda sha256: dcd1429a1782864c452057a6c5bc1860f2b637dc20a2b7e6eacd57395bbceff8 md5: 83b160d4da3e1e847bf044997621ed63 @@ -9218,45 +9246,45 @@ packages: purls: [] size: 37745 timestamp: 1769221878827 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda - sha256: ee2cf1499a5a5fd5f03c6203597fe14bf28c6ca2a8fffb761e41f3cf371e768e - md5: 5fdaa8b856683a5598459dead3976578 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.6-gpl_hc2c16d8_100.conda + sha256: 69ea8da58658ad26cb64fb0bfccd8a3250339811f0b57c6b8a742e5e51bacf70 + md5: 981d372c31a23e1aa9965d4e74d085d5 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 + - liblzma >=5.8.2,<6.0a0 - libxml2 - libxml2-16 >=2.14.6 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - lzo >=2.10,<3.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-2-Clause license_family: BSD purls: [] - size: 886102 - timestamp: 1767630453053 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarchive-3.8.5-gpl_hbe7d12b_100.conda - sha256: 23422c1eb7f5f05a1cd4acab5ed4d8ae4abf360eda52628ea3f05230bef917b3 - md5: a3926f266064d00a31cb00510ebb031d + size: 887139 + timestamp: 1773243188979 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarchive-3.8.6-gpl_hbe7d12b_100.conda + sha256: 635a78a04461e82150263ee9a1fbf6c965de0b811a10e87392a1e44be1115a39 + md5: f2c45cbb67fd0f668a1a0c152b70dc5f depends: - bzip2 >=1.0.8,<2.0a0 - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 + - liblzma >=5.8.2,<6.0a0 - libxml2 - libxml2-16 >=2.14.6 - libzlib >=1.3.1,<2.0a0 - lz4-c >=1.10.0,<1.11.0a0 - lzo >=2.10,<3.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - zstd >=1.5.7,<1.6.0a0 license: BSD-2-Clause license_family: BSD purls: [] - size: 1002688 - timestamp: 1767630660506 + size: 1000663 + timestamp: 1773243230880 - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.25.1-h3f43e3d_1.conda sha256: cb728a2a95557bb6a5184be2b8be83a6f2083000d0c7eff4ad5bbe5792133541 md5: 3b0d184bc9404516d418d4509e418bdc @@ -9715,31 +9743,31 @@ packages: purls: [] size: 20670213 timestamp: 1770191273636 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_3.conda - sha256: 8215f7553e2640461c1d9564147db4d0b31169cc31bb65c9db9fd38ccd73146e - md5: b4277f5a09d458a0306db3147bd0171c +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.0-default_h746c552_0.conda + sha256: 4a9dd814492a129f2ff40cd4ab0b942232c9e3c6dbc0d0aaf861f1f65e99cc7d + md5: 140459a7413d8f6884eb68205ce39a0d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libllvm21 >=21.1.8,<21.2.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 - libstdcxx >=14 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 12349894 - timestamp: 1770190719381 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-21.1.8-default_h94a09a5_3.conda - sha256: 556af269db9fdddcd35dfecaf436b36adb6fe540d516a067d46252ea39fe882a - md5: d294b96fc51b22e382e5220937c738f4 + size: 12817500 + timestamp: 1772101411287 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.0-default_h94a09a5_0.conda + sha256: 643c2fb49f91977348cd04589bf4fab3b3e1e096ee42f979255f2ff9749d31a6 + md5: 4e1023aa62d0919a4014954d57bcb786 depends: - libgcc >=14 - - libllvm21 >=21.1.8,<21.2.0a0 + - libllvm22 >=22.1.0,<22.2.0a0 - libstdcxx >=14 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 12117427 - timestamp: 1770191545586 + size: 12619911 + timestamp: 1772102257387 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda sha256: cb83980c57e311783ee831832eb2c20ecb41e7dee6e86e8b70b8cef0e43eab55 md5: d4a250da4737ee127fb1fa6452a9002e @@ -10057,51 +10085,51 @@ packages: purls: [] size: 397272 timestamp: 1764526699497 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - sha256: 4641d37faeb97cf8a121efafd6afd040904d4bca8c46798122f417c31d5dfbec - md5: f4084e4e6577797150f9b04a4560ceb0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda + sha256: 2e1bfe1e856eb707d258f669ef6851af583ceaffab5e64821b503b0f7cd09e9e + md5: 26c746d14402a3b6c684d045b23b9437 depends: - - libfreetype6 >=2.14.1 + - libfreetype6 >=2.14.2 license: GPL-2.0-only OR FTL purls: [] - size: 7664 - timestamp: 1757945417134 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.1-h8af1aa0_0.conda - sha256: 342c07e4be3d09d04b531c889182a11a488e7e9ba4b75f642040e4681c1e9b98 - md5: 1e61fb236ccd3d6ccaf9e91cb2d7e12d + size: 8035 + timestamp: 1772757210108 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda + sha256: 23cdb94528bb4328b6f7550906dee5080952354445d8bd96241fa7d059c4af95 + md5: 93bce8dee6a0a4906331db294ec250fe depends: - - libfreetype6 >=2.14.1 + - libfreetype6 >=2.14.2 license: GPL-2.0-only OR FTL purls: [] - size: 7753 - timestamp: 1757945484817 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda - sha256: 4a7af818a3179fafb6c91111752954e29d3a2a950259c14a2fc7ba40a8b03652 - md5: 8e7251989bca326a28f4a5ffbd74557a + size: 8108 + timestamp: 1772756012710 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda + sha256: aba65b94bdbed52de17ec3d0c6f2ebac2ef77071ad22d6900d1614d0dd702a0c + md5: 8eaba3d1a4d7525c6814e861614457fd depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libpng >=1.6.50,<1.7.0a0 + - libpng >=1.6.55,<1.7.0a0 - libzlib >=1.3.1,<2.0a0 constrains: - - freetype >=2.14.1 + - freetype >=2.14.2 license: GPL-2.0-only OR FTL purls: [] - size: 386739 - timestamp: 1757945416744 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.1-hdae7a39_0.conda - sha256: cedc83d9733363aca353872c3bfed2e188aa7caf57b57842ba0c6d2765652b7c - md5: 9c2f56b6e011c6d8010ff43b796aab2f + size: 386316 + timestamp: 1772757193822 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda + sha256: a2e9efb033f7519bbc0a54558d7c9bb96252adc22c6e09df2daee7615265fbb1 + md5: 69d1cdfdabb66464cbde17890e8be3b9 depends: - libgcc >=14 - - libpng >=1.6.50,<1.7.0a0 + - libpng >=1.6.55,<1.7.0a0 - libzlib >=1.3.1,<2.0a0 constrains: - - freetype >=2.14.1 + - freetype >=2.14.2 license: GPL-2.0-only OR FTL purls: [] - size: 423210 - timestamp: 1757945484108 + size: 423372 + timestamp: 1772756012086 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 md5: 0aa00f03f9e39fb9876085dee11a85d4 @@ -10815,21 +10843,6 @@ packages: purls: [] size: 18397 timestamp: 1765818635115 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm20-20.1.8-hfd2ba90_1.conda - sha256: 1a5eb7ebccdc23b0e606f9645cf5b436e01f161c80705bfb34d2793a36846b8f - md5: 36f730da2c88718ea21242a7326292da - depends: - - libgcc >=14 - - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.5 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 42749733 - timestamp: 1757353785740 - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda sha256: 91bb4f5be1601b40b4995911d785e29387970f0b3c80f33f7f9028f95335399f md5: 1a2708a460884d6861425b7f9a7bef99 @@ -10861,6 +10874,37 @@ packages: purls: [] size: 43148553 timestamp: 1765930975162 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.0-hf7376ad_0.conda + sha256: 2efe1d8060c6afeb2df037fc61c182fb84e10f49cdbd29ed672e112d4d4ce2d7 + md5: 213f51bbcce2964ff2ec00d0fdd38541 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 44236214 + timestamp: 1772009776202 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.0-hfd2ba90_0.conda + sha256: 7be3cdc0bf2747e9c590463a540060ab3ae961f44f0aa0b27acb86b37ba47ac4 + md5: c109137a7e54fde795637863f62485a1 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 43128981 + timestamp: 1771982780082 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -11050,25 +11094,25 @@ packages: purls: [] size: 39449 timestamp: 1609781865660 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb9d3cd8_3.conda - sha256: eb130af5be94c7db5e3448c7f254f8e066e62d1b76cd1c6c7c33f3565a55a685 - md5: 20ab6b90150325f1af7ca96bffafde63 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hb03c661_3.conda + sha256: 17d72848a6480f0b0708f2b2f64292b5fa0e0996ce56f26fc26e4aebb5a9ca81 + md5: 672fad24c7fedff73c684c3e9e9848b3 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - libgcc >=14 license: LGPL-2.1-only purls: [] - size: 44030 - timestamp: 1749573854077 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnuma-2.0.18-h86ecc28_3.conda - sha256: 752d7c5681a97f61220081c45983b779d579b40a8815ba9c5da239d4b0239732 - md5: 2d42cf3d018bd9f47ad064e87fc9dd20 + size: 44408 + timestamp: 1772779840609 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnuma-2.0.18-he30d5cf_3.conda + sha256: 05bfb59a13fb47176f923715580c9c3c80ee1088fb23c6344d215a834066e286 + md5: 8a7f1c9ecae8c8b8b05d7b90b3f160bf depends: - - libgcc >=13 + - libgcc >=14 license: LGPL-2.1-only purls: [] - size: 47464 - timestamp: 1749575391929 + size: 47706 + timestamp: 1772781596087 - conda: https://conda.anaconda.org/conda-forge/linux-64/libode-0.16.6-he3147e3_0.conda sha256: 9a81f24cbbf3d2e4ce3a6364be6a30b51d35e21af8162b84420b83c501017d8b md5: 15ffb39dd5700bd3272e056356e2864f @@ -11877,48 +11921,48 @@ packages: purls: [] size: 177394 timestamp: 1716828514515 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-h0c1763c_0.conda - sha256: c1ff4589b48d32ca0a2628970d869fa9f7b2c2d00269a3761edc7e9e4c1ab7b8 - md5: f7d30045eccb83f2bb8053041f42db3c +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-h0c1763c_0.conda + sha256: 1daeb5187efcdbe3bdf2dc66f1161e09cb8dfd01618015d2106feae13cf3390d + md5: a7bda2babcbb004443cb1c0be9a8c353 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 939312 - timestamp: 1768147967568 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 - md5: da5be73701eecd0e8454423fd6ffcf30 + size: 949843 + timestamp: 1772818873928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 + md5: fd893f6a3002a635b5e50ceb9dd2c0f4 depends: - __glibc >=2.17,<3.0.a0 - icu >=78.2,<79.0a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing - size: 942808 - timestamp: 1768147973361 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h022381a_0.conda - sha256: 22d51ca175abb6792bb31a67c8d13d55de04a1140500fb82629f6fb77e1d28df - md5: b864d0a93e2ab2ac21175984fdeb299e + size: 951405 + timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h022381a_0.conda + sha256: 69d3c370a6e21a362765988f9693efdfa7864498120a223b1f91101f4fb2628a + md5: 8e3ccd7bd0e0369fd743c5eec6ce849c depends: - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 938753 - timestamp: 1768147976144 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b - md5: 4e3ba0d5d192f99217b85f07a0761e64 + size: 951337 + timestamp: 1772818878412 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda + sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 + md5: 77891484f18eca74b8ad83694da9815e depends: - icu >=78.2,<79.0a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing - size: 944688 - timestamp: 1768147991301 + size: 952296 + timestamp: 1772818881550 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 md5: eecce068c7e4eddeb169591baac20ac4 @@ -12517,21 +12561,21 @@ packages: purls: [] size: 45283 timestamp: 1761015644057 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-he237659_1.conda - sha256: 047be059033c394bd32ae5de66ce389824352120b3a7c0eff980195f7ed80357 - md5: 417955234eccd8f252b86a265ccdab7f +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda + sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 + md5: e49238a1609f9a4a844b09d9926f2c3d depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.1,<79.0a0 + - icu >=78.2,<79.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 hca6bf5a_1 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 hca6bf5a_0 - libzlib >=1.3.1,<2.0a0 license: MIT license_family: MIT - size: 45402 - timestamp: 1766327161688 + size: 45968 + timestamp: 1772704614539 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h788dabe_0.conda sha256: db0a568e0853ee38b7a4db1cb4ee76e57fe7c32ccb1d5b75f6618a1041d3c6e4 md5: a0e7779b7625b88e37df9bd73f0638dc @@ -12547,20 +12591,20 @@ packages: purls: [] size: 47192 timestamp: 1761015739999 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h825857f_1.conda - sha256: 9fe997c3e5a8207161d093a5d73f586ae46dc319cb054220086395e150dd1469 - md5: eb4665cdf78fd02d4abc4edf8c15b7b9 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda + sha256: 3e51e1952cb60c8107094b6b78473d91ff49d428ad4bef6806124b383e8fe29c + md5: 19de96909ee1198e2853acd8aba89f6c depends: - - icu >=78.1,<79.0a0 + - icu >=78.2,<79.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 h79dcc73_1 + - liblzma >=5.8.2,<6.0a0 + - libxml2-16 2.15.2 h79dcc73_0 - libzlib >=1.3.1,<2.0a0 license: MIT license_family: MIT - size: 47725 - timestamp: 1766327143205 + size: 47837 + timestamp: 1772704681112 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda sha256: 71436e72a286ef8b57d6f4287626ff91991eb03c7bdbe835280521791efd1434 md5: e7733bc6785ec009e47a224a71917e84 @@ -12578,37 +12622,22 @@ packages: purls: [] size: 556302 timestamp: 1761015637262 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hca6bf5a_1.conda - sha256: 8331284bf9ae641b70cdc0e5866502dd80055fc3b9350979c74bb1d192e8e09e - md5: 3fdd8d99683da9fe279c2f4cecd1e048 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda + sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c + md5: f3bc152cb4f86babe30f3a4bf0dbef69 depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.1,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.1 - license: MIT - license_family: MIT - size: 555747 - timestamp: 1766327145986 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h79dcc73_1.conda - sha256: c76951407554d69dd348151f91cc2dc164efbd679b4f4e77deb2f9aa6eba3c12 - md5: e42758e7b065c34fd1b0e5143752f970 - depends: - - icu >=78.1,<79.0a0 + - icu >=78.2,<79.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 + - liblzma >=5.8.2,<6.0a0 - libzlib >=1.3.1,<2.0a0 constrains: - - libxml2 2.15.1 + - libxml2 2.15.2 license: MIT license_family: MIT - size: 599721 - timestamp: 1766327134458 + size: 557492 + timestamp: 1772704601644 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h8591a01_0.conda sha256: 7a13450bce2eeba8f8fb691868b79bf0891377b707493a527bd930d64d9b98af md5: e7177c6fbbf815da7b215b4cc3e70208 @@ -12625,6 +12654,21 @@ packages: purls: [] size: 597078 timestamp: 1761015734476 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda + sha256: da6b2ebbcecc158200d90be39514e4e902971628029b35b7f6ad57270659c5d9 + md5: e3ec9079759d35b875097d6a9a69e744 + depends: + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.2,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.2 + license: MIT + license_family: MIT + size: 598438 + timestamp: 1772704671710 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 md5: 87e6096ec6d542d1c1f8b33245fe8300 @@ -12868,23 +12912,27 @@ packages: purls: [] size: 528318 timestamp: 1727801707353 -- pypi: https://files.pythonhosted.org/packages/f3/5f/93b3e3607ccd693a768eafee60829cd14ea1810b75aa48e8b20e27b332c4/marisa_trie-1.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/15/c2/3842d8e39006b5b03384418b55108a3f3931ac6fe9b998814be81267acec/marisa_trie-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: marisa-trie - version: 1.3.1 - sha256: 99a00cab4cf9643a87977c87a5c8961aa44fff8d5dd46e00250135f686e7dedf + version: 1.4.0 + sha256: 20bc1a6936ba13b6b69684df2e41592f39f700f478e62453bb07fcfbefe1aa30 requires_dist: - hypothesis ; extra == 'test' - pytest ; extra == 'test' - readme-renderer ; extra == 'test' + - pytest-run-parallel ; python_full_version >= '3.13' and extra == 'test' + - hypothesis>=6.136.9 ; python_full_version >= '3.13' and extra == 'test' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/fe/98/88ca0c98d37034a3237acaf461d210cbcfeb6687929e5ba0e354971fa3ed/marisa_trie-1.3.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/a8/a2/1e0f0665a98968b0af7067cf2dad569e1bd8c1f13a97670b74b5ac5153d9/marisa_trie-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl name: marisa-trie - version: 1.3.1 - sha256: 9688c7b45f744366a4ef661e399f24636ebe440d315ab35d768676c59c613186 + version: 1.4.0 + sha256: fc11658ff7eb5888e7a2bd5c9a98f73a2e03dbf252f844032d7181627e59017b requires_dist: - hypothesis ; extra == 'test' - pytest ; extra == 'test' - readme-renderer ; extra == 'test' + - pytest-run-parallel ; python_full_version >= '3.13' and extra == 'test' + - hypothesis>=6.136.9 ; python_full_version >= '3.13' and extra == 'test' requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e @@ -12898,9 +12946,9 @@ packages: - pkg:pypi/markdown-it-py?source=hash-mapping size: 64736 timestamp: 1754951288511 -- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_0.conda - sha256: f77f9f1a4da45cbc8792d16b41b6f169f649651a68afdc10b2da9da12b9aa42b - md5: f775a43412f7f3d7ed218113ad233869 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda + sha256: 5f3aad1f3a685ed0b591faad335957dbdb1b73abfd6fc731a0d42718e0653b33 + md5: 93a4752d42b12943a355b682ee43285b depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -12912,11 +12960,11 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 25321 - timestamp: 1759055268795 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_0.conda - sha256: f35cf61ae7fbb3ed0529f000b4bc9999ac0bed8803654ed2db889a394d9853c2 - md5: d4e5ac7000bdc398b3cfba57f01e7e63 + size: 26057 + timestamp: 1772445297924 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda + sha256: 5919bf53e9f74ee1c6ce35ce13a7cd92741d45385c2d0b3eae48b01c0f11f41a + md5: 1fecdd103b37427ba6041b9b03d657ea depends: - libgcc >=14 - python >=3.12,<3.13.0a0 @@ -12926,9 +12974,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 25943 - timestamp: 1759056553164 + - pkg:pypi/markupsafe?source=compressed-mapping + size: 26305 + timestamp: 1772446326927 - pypi: https://files.pythonhosted.org/packages/be/2f/5108cb3ee4ba6501748c4908b908e55f42a5b66245b4cfe0c99326e1ef6e/marshmallow-3.26.2-py3-none-any.whl name: marshmallow version: 3.26.2 @@ -13069,29 +13117,49 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-25.0.5-h0ca1d6e_2.conda - sha256: 9c8c2e9cbbc0035742626f598342e71b9f23e40d0e01ef49e36be4283b0c6b61 - md5: b30afa10c465f89601390bb243aab0ed +- conda: https://conda.anaconda.org/conda-forge/linux-64/mesalib-25.3.5-h8cca3c9_0.conda + sha256: 7c108069febb3224c7d36b35a5edc754a1811327c097eb12cef4fb23ccf2ef65 + md5: a3f29f4ad0b41ba53ab492678d6ea092 depends: - - libdrm >=2.4.125,<2.5.0a0 - - libexpat >=2.7.1,<3.0a0 + - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libllvm20 >=20.1.8,<20.2.0a0 - libstdcxx >=14 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - spirv-tools >=2025,<2026.0a0 + - libexpat >=2.7.3,<3.0a0 - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxrandr >=1.5.4,<2.0a0 + - libllvm21 >=21.1.8,<21.2.0a0 + - libxcb >=1.17.0,<2.0a0 + - spirv-tools >=2026,<2027.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 - xorg-libxshmfence >=1.3.3,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2887201 + timestamp: 1770434574590 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-25.3.5-h455aa48_0.conda + sha256: d5afdcb15537ad1c24d622ddd6760b0a0341080b5c632088334a60c01763eeba + md5: ed2f43aa4b07b63d7a8b79b00a109c2b + depends: + - libstdcxx >=14 + - libgcc >=14 + - xorg-libxrandr >=1.5.5,<2.0a0 - zstd >=1.5.7,<1.6.0a0 - track_features: - - mesalib + - xorg-libxshmfence >=1.3.3,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - spirv-tools >=2026,<2027.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - libllvm21 >=21.1.8,<21.2.0a0 + - libxcb >=1.17.0,<2.0a0 license: MIT license_family: MIT purls: [] - size: 6100696 - timestamp: 1755729867981 + size: 2825639 + timestamp: 1770434558040 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 md5: c7f302fd11eeb0987a6a5e1f3aed6a21 @@ -13169,7 +13237,7 @@ packages: license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/multidict?source=compressed-mapping + - pkg:pypi/multidict?source=hash-mapping size: 100056 timestamp: 1771611023053 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.7.1-py312ha4530ae_0.conda @@ -13183,7 +13251,7 @@ packages: license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/multidict?source=compressed-mapping + - pkg:pypi/multidict?source=hash-mapping size: 102146 timestamp: 1771610849986 - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda @@ -13613,10 +13681,10 @@ packages: purls: [] size: 3051975 timestamp: 1761048310669 -- pypi: https://files.pythonhosted.org/packages/01/8a/e2d4332ae18d6383376e75141cd914256bee12c3cc439f42260eb176ceb9/onnxruntime-1.24.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/1c/dc/1f5489f7b21817d4ad352bf7a92a252bd5b438bcbaa7ad20ea50814edc79/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl name: onnxruntime - version: 1.24.2 - sha256: 76c44fc9a89dcefcd5a4ab5c6bbbb9ff1604325ab2d5d0bc9ff5a9cba7b37f4a + version: 1.24.3 + sha256: 0a9847b870b6cb462652b547bc98c49e0efb67553410a082fde1918a38707452 requires_dist: - flatbuffers - numpy>=1.21.6 @@ -13624,10 +13692,10 @@ packages: - protobuf - sympy requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/35/af/ad86cfbfd65d5a86204b3a30893e92c0cf3f1a56280efc5a12e69d81f52d/onnxruntime-1.24.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/28/7c/fd253da53594ab8efbefdc85b3638620ab1a6aab6eb7028a513c853559ce/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: onnxruntime - version: 1.24.2 - sha256: 09aa6f8d766b4afc3cfba68dd10be39586b49f9462fbd1386c5d5644239461ca + version: 1.24.3 + sha256: b354afce3333f2859c7e8706d84b6c552beac39233bcd3141ce7ab77b4cabb5d requires_dist: - flatbuffers - numpy>=1.21.6 @@ -13684,37 +13752,37 @@ packages: purls: [] size: 27887 timestamp: 1766496259667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.5-h40f6f1d_0.conda - sha256: b7810f5e93e6ae7e82fa7d4d7069cd17f4d79751d67788a44417f2a43cab2735 - md5: add0b275bf1abebb23924be0c54631eb +- conda: https://conda.anaconda.org/conda-forge/linux-64/openexr-3.4.6-h40f6f1d_0.conda + sha256: c733f18e2896920eddbd26aba28fd16dae5b25f272ede436672ad0ceb60e8603 + md5: 0a5f140bdbc5f7ab45568a0bc3431362 depends: - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - imath >=3.2.2,<3.2.3.0a0 - - libdeflate >=1.25,<1.26.0a0 - - libzlib >=1.3.1,<2.0a0 - openjph >=0.26.3,<0.27.0a0 + - libzlib >=1.3.1,<2.0a0 + - libdeflate >=1.25,<1.26.0a0 + - imath >=3.2.2,<3.2.3.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 1217782 - timestamp: 1771861766485 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openexr-3.4.5-hd0c962a_0.conda - sha256: 7af76459df8f0560f5b6caf697c790c3fc7bf9af605784a161909ef53ec915e8 - md5: 24f9f24bbbd1659f3c7d5a68aadcaeb2 + size: 1217961 + timestamp: 1772443688420 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openexr-3.4.6-hd0c962a_0.conda + sha256: 049c3884af3f770d60e348abf253cf5d41d174d9068ee583b590122aa9ff0d84 + md5: 4e67c6e32982faacff191606815bb836 depends: - libstdcxx >=14 - libgcc >=14 - imath >=3.2.2,<3.2.3.0a0 - openjph >=0.26.3,<0.27.0a0 - - libzlib >=1.3.1,<2.0a0 - libdeflate >=1.25,<1.26.0a0 + - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 1176180 - timestamp: 1771861734406 + size: 1176095 + timestamp: 1772443692126 - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda sha256: 3f231f2747a37a58471c82a9a8a80d92b7fece9f3fce10901a5ac888ce00b747 md5: b28cf020fd2dead0ca6d113608683842 @@ -14175,7 +14243,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/parso?source=hash-mapping + - pkg:pypi/parso?source=compressed-mapping size: 82287 timestamp: 1770676243987 - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda @@ -14426,9 +14494,9 @@ packages: purls: [] size: 54834 timestamp: 1720806008171 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa - md5: 4fefefb892ce9cc1539405bec2f1a6cd +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 82c1787f2a65c0155ef9652466ee98d6 depends: - python >=3.10 - python @@ -14436,8 +14504,8 @@ packages: license_family: MIT purls: - pkg:pypi/platformdirs?source=compressed-mapping - size: 25643 - timestamp: 1771233827084 + size: 25646 + timestamp: 1773199142345 - conda: https://conda.anaconda.org/conda-forge/noarch/playsound-1.3.0-pyhd8ed1ab_1.conda sha256: 0adc0f2657a349d3dc27da112362dd293aecedb0ae99515c309597bf833a235c md5: 99249c0d0b9b9663c59337873b16ac63 @@ -14817,7 +14885,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pybind11-global?source=compressed-mapping + - pkg:pypi/pybind11-global?source=hash-mapping size: 241244 timestamp: 1771365839659 - conda: https://conda.anaconda.org/conda-forge/linux-64/pybullet-3.25-py312hf49885f_5.conda @@ -15031,7 +15099,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyparsing?source=hash-mapping + - pkg:pypi/pyparsing?source=compressed-mapping size: 110893 timestamp: 1769003998136 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.11-py312h82c0db2_2.conda @@ -15368,6 +15436,20 @@ packages: - pkg:pypi/python-dateutil?source=hash-mapping size: 233310 timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.1.3-pyhcf101f3_0.conda + sha256: 36429765f626c345710fbae14aeeda676c1745427667eb480bb855b7089affba + md5: 69fc0a99fc21b26b81026c72e00f83df + depends: + - python >=3.10 + - filelock >=3.15.4 + - platformdirs <5,>=4.3.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/python-discovery?source=compressed-mapping + size: 33996 + timestamp: 1773161039118 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.8.1-py312h5253ce2_0.conda sha256: 41a3f2541952ee521c867ada76da02a43a919beeb46da8fee99284d161273a50 md5: e2cc29a3786c42455a70263a8bf6813e @@ -15379,7 +15461,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/librt?source=compressed-mapping + - pkg:pypi/librt?source=hash-mapping size: 77475 timestamp: 1771423012370 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.8.1-py312hd41f8a7_0.conda @@ -15450,17 +15532,10 @@ packages: - pyobjc>=2.4 ; sys_platform == 'darwin' - pypiwin32 ; sys_platform == 'win32' - pywin32 ; sys_platform == 'win32' -- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - sha256: 8d2a8bf110cc1fc3df6904091dead158ba3e614d8402a83e51ed3a8aa93cdeb0 - md5: bc8e3267d44011051f2eb14d22fb0960 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pytz?source=hash-mapping - size: 189015 - timestamp: 1742920947249 +- pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl + name: pytz + version: 2026.1.post1 + sha256: f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf md5: 15878599a87992e44c059731771591cb @@ -15839,15 +15914,15 @@ packages: md5: 1b712720f0094de41b1d0482f117f66d size: 1075 timestamp: 1771970041027 -- pypi: https://files.pythonhosted.org/packages/59/3c/ea5a4687adaba5e125b9bd6190153d0037325a0ba3757cc1537cc2c8dd90/regex-2026.2.19-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/9e/40/bb226f203caa22c1043c1ca79b36340156eca0f6a6742b46c3bb222a3a57/regex-2026.2.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: regex - version: 2026.2.19 - sha256: 75472631eee7898e16a8a20998d15106cb31cfde21cdf96ab40b432a7082af06 + version: 2026.2.28 + sha256: d6b08a06976ff4fb0d83077022fde3eca06c55432bb997d8c0495b9a4e9872f4 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/f3/d0/b7dd3883ed1cff8ee0c0c9462d828aaf12be63bf5dc55453cbf423523b13/regex-2026.2.19-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl +- pypi: https://files.pythonhosted.org/packages/dd/c9/8cc8d850b35ab5650ff6756a1cb85286e2000b66c97520b29c1587455344/regex-2026.2.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl name: regex - version: 2026.2.19 - sha256: 03d706fbe7dfec503c8c3cb76f9352b3e3b53b623672aa49f18a251a6c71b8e6 + version: 2026.2.28 + sha256: e71dcecaa113eebcc96622c17692672c2d104b1d71ddf7adeda90da7ddeb26fc requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 @@ -34485,15 +34560,15 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 462324 timestamp: 1692383535614 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.0-pyh332efcf_0.conda - sha256: fd7201e38e38bf7f25818d624ca8da97b8998957ca9ae3fb7fdc9c17e6b25fcd - md5: 1d00d46c634177fc8ede8b99d6089239 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd depends: - python >=3.10 license: MIT license_family: MIT - size: 637506 - timestamp: 1770634745653 + size: 639697 + timestamp: 1773074868565 - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda sha256: 0c2d6f24ee2b614ee1da4d7d99cc9944ea1ace65455a47d48d8c1f726317168a md5: 8dc8dda113c4c568256bdd486b6e842e @@ -34508,19 +34583,19 @@ packages: purls: [] size: 113513 timestamp: 1770208767759 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-h8c88b8f_0.conda - sha256: a8d6b35ecae1d9605e7944b6b5562b5d857355cc7be493b13fee550f7169fb40 - md5: 3a720e8647ebfff1322d81beb8a8be95 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda + sha256: bf3f47847832e33acbcb7a1aba948f3b574979ad2a91f2ebdc9fc685c09433db + md5: 8268bdcd82d8f9abcb7f0fd6a9568ba4 depends: - glslang >=16,<17.0a0 - libgcc >=14 - libstdcxx >=14 - - spirv-tools >=2025,<2026.0a0 + - spirv-tools >=2026,<2027.0a0 license: Apache-2.0 license_family: Apache purls: [] - size: 115395 - timestamp: 1764287938541 + size: 115498 + timestamp: 1770208786806 - conda: https://conda.anaconda.org/conda-forge/noarch/simpleeval-1.0.3-pyhd8ed1ab_0.conda sha256: 19d1dab079746de0c38581d926e02306368b74d0683cd3e6b18ccabea54c7e07 md5: 00cdd2e3ec6d3be6bc2b7d46470a10a1 @@ -34551,9 +34626,9 @@ packages: - pkg:pypi/sip?source=hash-mapping size: 680892 timestamp: 1759437964748 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sip-6.15.0-py312hfcd9f9b_0.conda - sha256: 075343fecb7377d266cf8de0c222c3990108adb794120aa4dff340f88f5801db - md5: 5c35c3d8c5aeda2af6a3f28bd3d44057 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sip-6.15.2-py312hfcd9f9b_0.conda + sha256: c08306703fd62ed68c21f1d8a7e1e7026ddd3ba6d904aee1c6b2a416d667a038 + md5: 56a35789823c7073cced902103f856c6 depends: - libgcc >=14 - libstdcxx >=14 @@ -34567,8 +34642,8 @@ packages: license_family: BSD purls: - pkg:pypi/sip?source=hash-mapping - size: 724152 - timestamp: 1765032349484 + size: 735337 + timestamp: 1773072698070 - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -34625,7 +34700,7 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/sniffio?source=hash-mapping + - pkg:pypi/sniffio?source=compressed-mapping size: 15698 timestamp: 1762941572482 - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda @@ -34818,19 +34893,19 @@ packages: purls: [] size: 2296977 timestamp: 1770089626195 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2025.5-hfefdfc9_0.conda - sha256: 1405f03c947115f8dbec0f95dbbf6f9df0ea05680389bdb41733493da3b0f0b9 - md5: 57618236eb1718afeff0345e7ff25bda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda + sha256: 841a7df4b73a13a148410e677b1bf07ed81bd181cc686278d64d65e033f4a06a + md5: ad8208c6618a543687d754dc57876091 depends: - libgcc >=14 - libstdcxx >=14 constrains: - - spirv-headers >=1.4.335.0,<1.4.335.1.0a0 + - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 2559644 - timestamp: 1769406140602 + size: 2255599 + timestamp: 1770089690097 - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.32.3-hcee41ef_1.tar.bz2 sha256: 92b004539613e6093bb5b126b0267031c039e01cf828fc404507adfec1670470 md5: eba59aaa700c4787661b55a8aa3541a7 @@ -35384,55 +35459,63 @@ packages: purls: [] size: 14197 timestamp: 1767012435525 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - sha256: de93eed364f14f08f78ff41994dfe22ff018521c4702e432630d10c0eb0eff6b - md5: e73db224203e56b25e040446fa1584db +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.2.0-pyhcf101f3_0.conda + sha256: b83246d145ba0e6814d2ed0b616293e56924e6c7d6649101f5a4f97f9e757ed1 + md5: 704c22301912f7e37d0a92b2e7d5942d depends: - python >=3.10 - distlib >=0.3.7,<1 + - filelock <4,>=3.24.2 + - importlib-metadata >=6.6 - platformdirs >=3.9.1,<5 + - python-discovery >=1 - typing_extensions >=4.13.2 - - importlib-metadata >=6.6 - - filelock >=3.24.2,<4 - python license: MIT + license_family: MIT purls: - pkg:pypi/virtualenv?source=compressed-mapping - size: 4657721 - timestamp: 1771967166128 -- conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.0.0-hc0f0d8f_1.conda - sha256: 534164cb8b5e37671962c55b4323d22bcc5986f29a19aee9578730c4171b4ca0 - md5: 8c6efaa4095e9304c609bf7a5e0b3905 + size: 4647775 + timestamp: 1773133660203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.1.0-cpu_hc82bd48_.conda + build_number: 3 + sha256: 5794f9182f199ec834c7e60e8d972a14e7732e93d7a81073e1f64af59df1c3a8 + md5: a560c1c6ba2cd9b7b6994c26b0bc32f3 depends: - - __glibc >=2.17,<3.0.a0 + - libgcc >=14 - _openmp_mutex >=4.5 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 - hdf5 >=1.14.6,<1.14.7.0a0 - - libgcc >=13 - - libstdcxx >=13 + - mesalib >=25.3.5,<25.4.0a0 + - glew >=2.3.0,<2.4.0a0 + - zfp >=1.0.1,<2.0a0 + track_features: + - viskores-p-0 license: BSD-3-Clause license_family: BSD purls: [] - size: 16513879 - timestamp: 1745949674261 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.0-cpu_hc7513a2_.conda + size: 25058145 + timestamp: 1772772304007 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.0-cpu_hb695247_.conda build_number: 3 - sha256: 8d498c85d0110fd61a45b606d0a7db9006dfa22a733e188471327df1e05a8948 - md5: 2a65455f2ecc00382f7027b4580640aa + sha256: 93517965be4e1798f8700a207ed41124ebab593e81cc383ba3ea7588a24933b4 + md5: 75c3b414927044e57e705460be12b269 depends: - - _openmp_mutex >=4.5 - libstdcxx >=14 - libgcc >=14 - - mesalib >=25.0.5,<25.1.0a0 - - hdf5 >=1.14.6,<1.14.7.0a0 + - _openmp_mutex >=4.5 + - mesalib >=25.3.5,<25.4.0a0 - glew >=2.3.0,<2.4.0a0 - zfp >=1.0.1,<2.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 track_features: - viskores-p-0 license: BSD-3-Clause license_family: BSD purls: [] - size: 22928982 - timestamp: 1766777752684 + size: 22928990 + timestamp: 1772771310357 - conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-9.5.2-py312h244374b_7.conda sha256: 30f056623ebb1c460e03e9ba597d4e7cb0edf177f08ad6f11bda4e7e7aa72fc4 md5: 39f83887a40f72e2ddba78e661519900 @@ -35471,9 +35554,9 @@ packages: purls: [] size: 25478 timestamp: 1768718080474 -- conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_6.conda - sha256: f719d6395bc75f3e50913aad550f8c4a21392780321a805f9f0e194a6d994fec - md5: 24f269a608a9032faf6a1bcaea8d9e21 +- conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_7.conda + sha256: 41b5dc84636ba8b2ca9e1c7b58633a2e62e6530dcb86a7f12ecf02c5c563d163 + md5: 2edca3790f2a372db44ff1aa159769fc depends: - python - utfcpp @@ -35483,49 +35566,49 @@ packages: - numpy - wslink - matplotlib-base >=2.0.0 + - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - lz4-c >=1.10.0,<1.11.0a0 - - qt6-main >=6.10.1,<6.11.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libglx >=1.7.0,<2.0a0 + - gl2ps >=1.4.2,<1.4.3.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - jsoncpp >=1.9.6,<1.9.7.0a0 - fmt >=12.1.0,<12.2.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - libjpeg-turbo >=3.1.2,<4.0a0 - - hdf5 >=1.14.6,<1.14.7.0a0 - - proj >=9.7.1,<9.8.0a0 - libopengl >=1.7.0,<2.0a0 - - libnetcdf >=4.9.3,<4.9.4.0a0 - - libglu >=9.0.3,<9.1.0a0 - - libpng >=1.6.53,<1.7.0a0 - libogg >=1.3.5,<1.4.0a0 - - jsoncpp >=1.9.6,<1.9.7.0a0 - - libglvnd >=1.7.0,<2.0a0 + - proj >=9.7.1,<9.8.0a0 + - qt6-main >=6.10.1,<6.11.0a0 - python_abi 3.12.* *_cp312 - - tbb >=2022.3.0 - libxml2 - libxml2-16 >=2.14.6 + - libexpat >=2.7.3,<3.0a0 - xorg-libxcursor >=1.2.3,<2.0a0 + - libpng >=1.6.54,<1.7.0a0 + - libnetcdf >=4.9.3,<4.9.4.0a0 + - libtheora >=1.1.1,<1.2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 - libzlib >=1.3.1,<2.0a0 + - viskores >=1.1.0,<1.2.0a0 + - hdf5 >=1.14.6,<1.14.7.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglvnd >=1.7.0,<2.0a0 - double-conversion >=3.4.0,<3.5.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - gl2ps >=1.4.2,<1.4.3.0a0 - - libexpat >=2.7.3,<3.0a0 - - liblzma >=5.8.1,<6.0a0 - pugixml >=1.15,<1.16.0a0 - - libtheora >=1.1.1,<1.2.0a0 - - viskores >=1.0.0,<1.1.0a0 + - libglx >=1.7.0,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libglu >=9.0.3,<9.1.0a0 + - libsqlite >=3.51.2,<4.0a0 + - tbb >=2022.3.0 constrains: - libboost-headers >=1.88.0,<1.89.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/vtk?source=hash-mapping - size: 68885287 - timestamp: 1767724868097 + size: 68877621 + timestamp: 1768718074241 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-base-9.5.2-py312h90a26f6_7.conda sha256: 1a037be116a1f59b9be87eb044e34706ed892f31431fce4088d8f88f4bf6086e md5: 28f2d99155e7efc5b9c4346095c9e1c6 @@ -35581,19 +35664,19 @@ packages: - pkg:pypi/vtk?source=hash-mapping size: 64690746 timestamp: 1768718080472 -- conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-io-ffmpeg-9.5.2-py312h8da9809_6.conda - sha256: cd33522db5736b4c94b5006124028d9c5250f041ef175b7428d189f9a17c4936 - md5: ea7bf2efe8bc5325094d17ad14288f00 +- conda: https://conda.anaconda.org/conda-forge/linux-64/vtk-io-ffmpeg-9.5.2-py312hcdbd8b1_7.conda + sha256: eb3c073853a7483b62a945cd24694b66ec76df8568e6f6c8743acd487388056b + md5: 91396193530de78d6a3579f779dc472d depends: - - vtk-base ==9.5.2 py312h6fba518_6 + - vtk-base ==9.5.2 py312h6fba518_7 - ffmpeg - ffmpeg >=8.0.1,<9.0a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: [] - size: 108372 - timestamp: 1767724868098 + size: 108379 + timestamp: 1768718074243 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/vtk-io-ffmpeg-9.5.2-py312haba1314_7.conda sha256: b160385fe40160cdef7704daab3ea8946a4c15836ea77fcd1cedcd8afa8e87f5 md5: d2cf62a6a54db8d70f0683f3aefacc2a @@ -35684,9 +35767,9 @@ packages: - pkg:pypi/werkzeug?source=compressed-mapping size: 257130 timestamp: 1771530143814 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.1-py312h4c3975b_0.conda - sha256: 450743011cc1a3a557c3f7c0b65e0de8e3a5474261b05a2209273455f392fff1 - md5: 8d156d9c38ef7af6eded19dddb71b543 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.1.2-py312h4c3975b_0.conda + sha256: 5bf21e14a364018a36869a16d9f706fb662c6cb6da3066100ba6822a70f93d2d + md5: 7f2ef073d94036f8b16b6ee7d3562a88 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -35696,11 +35779,11 @@ packages: license_family: BSD purls: - pkg:pypi/wrapt?source=hash-mapping - size: 87294 - timestamp: 1770112026776 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.1.1-py312hcd1a082_0.conda - sha256: b23c404060d8976054dbc3b56c77ef158d117d36578fd4b37064b5945c9527e7 - md5: bb45341c4cda3ca0f04d7b18508bfd8d + size: 87514 + timestamp: 1772794814485 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.1.2-py312hcd1a082_0.conda + sha256: 7771d343ecafe1cab14291a17f4331e9e5680bd72d4b51d5aa44d0674eb2a185 + md5: fb36661901c6da45fd7296fca1cfc48a depends: - libgcc >=14 - python >=3.12,<3.13.0a0 @@ -35710,21 +35793,20 @@ packages: license_family: BSD purls: - pkg:pypi/wrapt?source=hash-mapping - size: 87879 - timestamp: 1770112070859 -- conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda - sha256: e9ac3caa3b17bed9bc301a67d3950f84fa37fb34002d2878c46cafb87978401d - md5: 8fa415e696acd9af59ce0a4425fd1b38 + size: 87781 + timestamp: 1772794847949 +- conda: https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.6-pyhd8ed1ab_0.conda + sha256: 0754558be231485ee835b0db11bace246ecd5465143a355029b039803ea716b0 + md5: d34454e27bb9ec7025cefccfa92908ad depends: - aiohttp <4 - msgpack-python >=1,<2 - python >=3.10 license: BSD-3-Clause - license_family: BSD purls: - - pkg:pypi/wslink?source=hash-mapping - size: 35839 - timestamp: 1760984848678 + - pkg:pypi/wslink?source=compressed-mapping + size: 36729 + timestamp: 1773305846931 - pypi: https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl name: wsproto version: 1.3.2 @@ -35920,29 +36002,29 @@ packages: name: xdgenvpy version: 2.4.0 sha256: 4c4e427a753e8ecb0e336a7cd7eacd55f91a5fc8fd1fa42a957706fccf2b9949 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda - sha256: aa03b49f402959751ccc6e21932d69db96a65a67343765672f7862332aa32834 - md5: 71ae752a748962161b4740eaff510258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 + md5: b56e0c8432b56decafae7e78c5f29ba5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 license: MIT license_family: MIT purls: [] - size: 396975 - timestamp: 1759543819846 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.46-he30d5cf_0.conda - sha256: c440a757d210e84c7f315ac3b034266980a8b4c986600649d296b9198b5b4f5e - md5: 9524f30d9dea7dd5d6ead43a8823b6c2 + size: 399291 + timestamp: 1772021302485 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda + sha256: ec7ff9dffbd41faa31a30fa0724699f05bca000d57c745a195ecdb56888a8605 + md5: 4ac707a4279972357712af099cd1ae50 depends: - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 license: MIT license_family: MIT purls: [] - size: 396706 - timestamp: 1759543850920 + size: 399629 + timestamp: 1772021320967 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b md5: fb901ff28063514abb6046c9ec2c4a45 @@ -36642,9 +36724,9 @@ packages: purls: [] size: 213281 timestamp: 1745308220432 -- conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py312h8a5da7c_0.conda - sha256: 6e3f2db09387fc982b5400b842745084825cd2d4621e8278e4af8fb0dc2b55d8 - md5: 6a3fd177315aaafd4366930d440e4430 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.23.0-py312h8a5da7c_0.conda + sha256: 5d991a8f418675338528ea8097e55143ad833807a110c4251879040351e0d4af + md5: 4b403cb52e72211c489a884b29290c2c depends: - __glibc >=2.17,<3.0.a0 - idna >=2.0 @@ -36656,12 +36738,12 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/yarl?source=hash-mapping - size: 151549 - timestamp: 1761337128623 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.22.0-py312ha4530ae_0.conda - sha256: 2b34672145b430d3057dba6f5bbf668c85246eef7e8437f25ee4247bf0781193 - md5: 582c9758a8b95fde421fec361e5ea600 + - pkg:pypi/yarl?source=compressed-mapping + size: 147028 + timestamp: 1772409590700 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.23.0-py312ha4530ae_0.conda + sha256: 2d4e2398ac23cec7107ee2243fc238d891bd6fb41e190ee23aff870397df0d60 + md5: 5620b15c3e8916bca815c64f4336856e depends: - idna >=2.0 - libgcc >=14 @@ -36674,8 +36756,8 @@ packages: license_family: Apache purls: - pkg:pypi/yarl?source=hash-mapping - size: 149300 - timestamp: 1761337087437 + size: 146602 + timestamp: 1772409452021 - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda sha256: 47cfe31255b91b4a6fa0e9dbaf26baa60ac97e033402dbc8b90ba5fee5ffe184 md5: 8035e5b54c08429354d5d64027041cad @@ -36704,6 +36786,19 @@ packages: purls: [] size: 350254 timestamp: 1757370867477 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h909a3a2_5.conda + sha256: 5fabe6cccbafc1193038862b0b0d784df3dae84bc48f12cac268479935f9c8b7 + md5: 6a0eb48e58684cca4d7acc8b7a0fd3c7 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 277694 + timestamp: 1766549572069 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zfp-1.0.1-h05c1e92_5.conda sha256: 25200bf068eb299ff9e6cdeeef528298bc11a82a6b43a1360dead2bd7d8f7a0e md5: 0809f7fc3fe01142d0d1920bbe3b63c3 diff --git a/pixi.toml b/pixi.toml index ea30b045ec..1dbbdbd5ea 100644 --- a/pixi.toml +++ b/pixi.toml @@ -3,7 +3,7 @@ authors = ["Florian Vahl <7vahl@informatik.uni-hamburg.de>"] channels = [ "https://data.bit-bots.de/conda/", # For self hosted ROS / robostack packages "https://data.bit-bots.de/conda-misc/output/", # For self hosted misc (non-ROS, neural network weights, ...) packages - "robostack-jazzy", # Robostack jazzy channel for ROS packages + "robostack-jazzy", # Robostack jazzy channel for ROS packages "conda-forge" # General conda-forge channel ] name = "bitbots_main" @@ -208,11 +208,12 @@ webots = ">=2022b,<2023a" # of pre-commit hooks running after commits from the git-subrepo cli git-subrepo = ">=0.4.9,<0.5" clang-format = ">=21.1.0,<22" -cppcheck = ">=2.18.3,<3" +cppcheck = ">=2.18.3,<2.20" pre-commit = ">=4.4.0,<5" [feature.ros.pypi-dependencies] # These are are pypi dependencies needed for our ROS 2 packages +construct = ">=2.10.56, <3" syrupy = ">=5.0.0, <6" exhale = ">=0.3.7, <0.4" mycroft-mimic3-tts = ">=0.2.4, <0.3" diff --git a/src/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/game_status_capsule.py b/src/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/game_status_capsule.py index 0f52543a6b..1b43668f08 100644 --- a/src/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/game_status_capsule.py +++ b/src/bitbots_behavior/bitbots_blackboard/bitbots_blackboard/capsules/game_status_capsule.py @@ -1,7 +1,8 @@ from typing import Optional from bitbots_utils.utils import get_parameters_from_other_node -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState +from std_msgs.msg import Bool from bitbots_blackboard.capsules import AbstractBlackboardCapsule @@ -12,33 +13,44 @@ class GameStatusCapsule(AbstractBlackboardCapsule): def __init__(self, node, blackboard=None): super().__init__(node, blackboard) self.team_id: int = get_parameters_from_other_node(self._node, "parameter_blackboard", ["team_id"])["team_id"] + self.own_id: int = get_parameters_from_other_node(self._node, "parameter_blackboard", ["bot_id"])["bot_id"] self.gamestate = GameState() self.last_update: float = 0.0 self.unpenalized_time: float = 0.0 self.last_goal_from_us_time = -86400.0 self.last_goal_time = -86400.0 self.free_kick_kickoff_team: Optional[bool] = None + self.game_controller_stop: bool = False + # publish stopped msg for hcm + self.stop_pub = node.create_publisher(Bool, "game_controller/stop_msg", 1) - def get_gamestate(self) -> int: - return self.gamestate.game_state + def get_game_state(self) -> int: + # Init, ready, set, playing, finished + return self.gamestate.main_state - def get_secondary_state(self) -> int: - return self.gamestate.secondary_state + def get_game_phase(self) -> int: + # Timeout, Normal, Extratime, Penaltyshoot + return self.gamestate.game_phase - def get_secondary_state_mode(self) -> int: - return self.gamestate.secondary_state_mode + def get_set_play(self) -> int: + # None, Direct Freekick, Indirect Freekick, Penalty, Throw in, Goalkick, Cornerkick, + return self.gamestate.set_play def get_secondary_team(self) -> int: - return self.gamestate.secondary_state_team + # Team ID, wer in set Play den Ball hat + return self.gamestate.kicking_team def has_kickoff(self) -> bool: - return self.gamestate.has_kick_off + # vegelcih mit eigener Teamnummer + return self.gamestate.kicking_team == self.team_id + + def is_stopped(self) -> bool: + return self.gamestate.stopped def has_penalty_kick(self) -> bool: return ( - self.gamestate.secondary_state == GameState.STATE_PENALTYKICK - or self.gamestate.secondary_state == GameState.STATE_PENALTYSHOOT - ) and self.gamestate._secondary_state_team == self.team_id + self.gamestate.set_play == GameState.SET_PLAY_PENALTY_KICK and self.gamestate.kicking_team == self.team_id + ) def get_our_goals(self) -> int: return self.gamestate.own_score @@ -55,26 +67,17 @@ def get_seconds_since_any_goal(self) -> float: def get_seconds_remaining(self) -> float: # Time from the message minus time passed since receiving it return max( - self.gamestate.seconds_remaining - (self._node.get_clock().now().nanoseconds / 1e9 - self.last_update), 0.0 + self.gamestate.secs_remaining - (self._node.get_clock().now().nanoseconds / 1e9 - self.last_update), 0.0 ) def get_secondary_seconds_remaining(self) -> float: """Seconds remaining for things like kickoff""" # Time from the message minus time passed since receiving it return max( - self.gamestate.secondary_seconds_remaining - - (self._node.get_clock().now().nanoseconds / 1e9 - self.last_update), + self.gamestate.secondary_time - (self._node.get_clock().now().nanoseconds / 1e9 - self.last_update), 0.0, ) - def get_seconds_since_last_drop_ball(self) -> Optional[float]: - """Returns the seconds since the last drop in""" - if self.gamestate.drop_in_time == -1: - return None - else: - # Time from the message plus seconds passed since receiving it - return self.gamestate.drop_in_time + (self._node.get_clock().now().nanoseconds / 1e9 - self.last_update) - def get_seconds_since_unpenalized(self) -> float: return self._node.get_clock().now().nanoseconds / 1e9 - self.unpenalized_time @@ -87,9 +90,6 @@ def received_gamestate(self) -> bool: def get_team_id(self) -> int: return self.team_id - def get_red_cards(self) -> int: - return self.gamestate.team_mates_with_red_card - def gamestate_callback(self, gamestate_msg: GameState) -> None: if self.gamestate.penalized and not gamestate_msg.penalized: self.unpenalized_time = self._node.get_clock().now().nanoseconds / 1e9 @@ -101,21 +101,29 @@ def gamestate_callback(self, gamestate_msg: GameState) -> None: if gamestate_msg.rival_score > self.gamestate.rival_score: self.last_goal_time = self._node.get_clock().now().nanoseconds / 1e9 + self.game_controller_stop = gamestate_msg.stopped + + self.stop_pub.publish(Bool(data=self.game_controller_stop)) + + """Anstoß im Falle von Overtime jetzt erstmal nicht genauer geregelt if ( - gamestate_msg.secondary_state_mode == 2 - and self.gamestate.secondary_state_mode != 2 - and gamestate_msg.game_state == GameState.GAMESTATE_PLAYING + gamestate_msg.main_state == GameState.STATE_SET + and self.gamestate.setPlay != 2 + and gamestate_msg.state == GameState.STATE_PLAYING ): # secondary action is now executed but we will not see this in the new messages. # it will look like a normal kick off, but we need to remember that this is some sort of free kick # we set the kickoff value accordingly, then we will not be allowed to move if it is a kick for the others - self.free_kick_kickoff_team = gamestate_msg.secondary_state_team + self.free_kick_kickoff_team = gamestate_msg.kicking_team - if gamestate_msg.secondary_state_mode != 2 and gamestate_msg.secondary_seconds_remaining == 0: + if gamestate_msg.set_play != 2 and gamestate_msg.secondary_time == 0: + self.free_kick_kickoff_team = gamestate_msg.kicking_team + + if gamestate_msg.set_play != 2 and gamestate_msg.secondary_time == 0: self.free_kick_kickoff_team = None if self.free_kick_kickoff_team is not None: gamestate_msg.has_kick_off = self.free_kick_kickoff_team == self.team_id - + """ self.last_update = self._node.get_clock().now().nanoseconds / 1e9 self.gamestate = gamestate_msg diff --git a/src/bitbots_behavior/bitbots_blackboard/package.xml b/src/bitbots_behavior/bitbots_blackboard/package.xml index 4bbed0ca3d..b0258395f3 100644 --- a/src/bitbots_behavior/bitbots_blackboard/package.xml +++ b/src/bitbots_behavior/bitbots_blackboard/package.xml @@ -23,7 +23,7 @@ bitbots_docs bitbots_tf_buffer bitbots_utils - game_controller_hl_interfaces + game_controller_hsl_interfaces python3-numpy rclpy ros2_numpy diff --git a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/game_state_decider.py b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/game_state_decider.py index bef4e355dd..eff710ca7e 100644 --- a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/game_state_decider.py +++ b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/game_state_decider.py @@ -1,6 +1,6 @@ from bitbots_blackboard.body_blackboard import BodyBlackboard from dynamic_stack_decider.abstract_decision_element import AbstractDecisionElement -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState class GameStateDecider(AbstractDecisionElement): @@ -16,18 +16,28 @@ def perform(self, reevaluate=False): :return: """ - game_state_number = self.blackboard.gamestate.get_gamestate() + game_state_number = self.blackboard.gamestate.get_game_state() + is_stopped = self.blackboard.gamestate.is_stopped() # todo this is a temporary hack to make GUI work - if game_state_number == GameState.GAMESTATE_INITIAL: + if is_stopped: + return "STOPPED" + elif game_state_number == GameState.STATE_INITIAL: return "INITIAL" - elif game_state_number == GameState.GAMESTATE_READY: + elif game_state_number == GameState.STATE_READY: return "READY" - elif game_state_number == GameState.GAMESTATE_SET: + elif game_state_number == GameState.STATE_SET: return "SET" - elif game_state_number == GameState.GAMESTATE_PLAYING: + elif game_state_number == GameState.STATE_PLAYING: return "PLAYING" - elif game_state_number == GameState.GAMESTATE_FINISHED: + elif game_state_number == GameState.STATE_FINISHED: return "FINISHED" + elif game_state_number == GameState.STATE_STANDBY: + return "STANDBY" + else: + # This should never happen, but all cases required string response + # as we do not get any stack trace otherwise + self.blackboard.node.get_logger().error(f"Received unknown game state number: {game_state_number}") + return "UNKNOWN" def get_reevaluate(self): """ diff --git a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/last_player.py b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/last_player.py deleted file mode 100644 index 04e32b588f..0000000000 --- a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/last_player.py +++ /dev/null @@ -1,23 +0,0 @@ -from bitbots_blackboard.body_blackboard import BodyBlackboard -from dynamic_stack_decider.abstract_decision_element import AbstractDecisionElement - - -class LastPlayer(AbstractDecisionElement): - blackboard: BodyBlackboard - - def __init__(self, blackboard, dsd, parameters): - super().__init__(blackboard, dsd, parameters) - - def perform(self, reevaluate=False): - # Get nessesary data - red_cards = self.blackboard.gamestate.get_red_cards() - own_id = self.blackboard.misc.bot_id - - # Use generator comprehension to check if all red cards are true except our own - if all(x for i, x in enumerate(red_cards) if i != own_id): - return "YES" - else: - return "NO" - - def get_reevaluate(self): - return True diff --git a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/secondary_state_decider.py b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/secondary_state_decider.py index 7ed7d761e9..62e170fe30 100644 --- a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/secondary_state_decider.py +++ b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/decisions/secondary_state_decider.py @@ -1,6 +1,6 @@ from bitbots_blackboard.body_blackboard import BodyBlackboard from dynamic_stack_decider.abstract_decision_element import AbstractDecisionElement -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState class SecondaryStateDecider(AbstractDecisionElement): @@ -15,28 +15,35 @@ def __init__(self, blackboard, dsd, parameters): super().__init__(blackboard, dsd, parameters) def perform(self, reevaluate=False): - state_number = self.blackboard.gamestate.get_secondary_state() + set_play_number = self.blackboard.gamestate.get_set_play() + game_phase_number = self.blackboard.gamestate.get_game_phase() + # todo this is a temporary hack to make GUI work - if state_number == GameState.STATE_NORMAL: + if game_phase_number == GameState.GAME_PHASE_NORMAL and set_play_number == GameState.SET_PLAY_NONE: return "NORMAL" - elif state_number == GameState.STATE_PENALTYSHOOT: + elif game_phase_number == GameState.GAME_PHASE_PENALTY_SHOOT_OUT and set_play_number == GameState.SET_PLAY_NONE: return "PENALTYSHOOT" - elif state_number == GameState.STATE_OVERTIME: + elif game_phase_number == GameState.GAME_PHASE_EXTRA_TIME and set_play_number == GameState.SET_PLAY_NONE: return "OVERTIME" - elif state_number == GameState.STATE_TIMEOUT: + elif game_phase_number == GameState.GAME_PHASE_TIMEOUT and set_play_number == GameState.SET_PLAY_NONE: return "TIMEOUT" - elif state_number == GameState.STATE_DIRECT_FREEKICK: + elif set_play_number == GameState.SET_PLAY_DIRECT_FREE_KICK: return "DIRECT_FREEKICK" - elif state_number == GameState.STATE_INDIRECT_FREEKICK: + elif set_play_number == GameState.SET_PLAY_INDIRECT_FREE_KICK: return "INDIRECT_FREEKICK" - elif state_number == GameState.STATE_PENALTYKICK: + elif set_play_number == GameState.SET_PLAY_PENALTY_KICK: return "PENALTYKICK" - elif state_number == GameState.STATE_CORNER_KICK: + elif set_play_number == GameState.SET_PLAY_CORNER_KICK: return "CORNER_KICK" - elif state_number == GameState.STATE_GOAL_KICK: + elif set_play_number == GameState.SET_PLAY_GOAL_KICK: return "GOAL_KICK" - elif state_number == GameState.STATE_THROW_IN: + elif set_play_number == GameState.SET_PLAY_THROW_IN: return "THROW_IN" + else: + self.blackboard.node.get_logger().error( + f"Unknown secondary state with game phase {game_phase_number} and set play {set_play_number}" + ) + return "UNKNOWN" def get_reevaluate(self): """ @@ -57,9 +64,9 @@ def __init__(self, blackboard, dsd, parameters): self.team_id = self.blackboard.gamestate.get_team_id() def perform(self, reevaluate=False): - state_number = self.blackboard.gamestate.get_secondary_state() + game_phase_number = self.blackboard.gamestate.get_game_phase() # we have to handle penalty shoot differently because the message is strange - if state_number == GameState.STATE_PENALTYSHOOT: + if game_phase_number == GameState.GAME_PHASE_PENALTY_SHOOT_OUT: if self.blackboard.gamestate.has_kickoff(): return "OUR" return "OTHER" @@ -73,26 +80,3 @@ def get_reevaluate(self): Secondary state Team can change during the game """ return True - - -class SecondaryStateModeDecider(AbstractDecisionElement): - """ - Decides which mode in the secondary state we are. - """ - - blackboard: BodyBlackboard - - def __init__(self, blackboard, dsd, parameters): - super().__init__(blackboard, dsd, parameters) - - def perform(self, reevaluate=False): - state_mode = self.blackboard.gamestate.get_secondary_state_mode() - if state_mode == GameState.MODE_PREPARATION: - return "PREPARATION" - elif state_mode == GameState.MODE_PLACING: - return "PLACING" - elif state_mode == GameState.MODE_END: - return "END" - - def get_reevaluate(self): - return True diff --git a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/main.dsd b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/main.dsd index 3b0287230b..bccdc8ebac 100644 --- a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/main.dsd +++ b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/behavior_dsd/main.dsd @@ -82,13 +82,6 @@ $PassStarted NO --> @LookAtFieldFeatures, @ChangeAction + action:positioning, @AvoidBallActive, @GoToPassAcceptPosition NO --> @LookAtFieldFeatures, @ChangeAction + action:positioning, @AvoidBallActive, @GoToPassPreparePosition -#GoalieRole -$CurrentScore - BEHIND --> $LastPlayer - YES --> #StrikerRole - NO --> #GoalieBehavior - ELSE --> #GoalieBehavior - #PenaltyShootoutBehavior $SecondaryStateTeamDecider OUR --> @StandAndWaitRandom + min:10 + max:30, @KickBallDynamic + r:true + type:penalty, @Stand @@ -110,35 +103,10 @@ $DoOnce NO --> $SecondaryStateTeamDecider OUR --> #SearchBall OTHER --> @AvoidBallActive, @LookAtFieldFeatures, @WalkInPlace + duration:2, @GoToRelativePosition + x:1 + y:0 + t:0, @Stand - YES --> $SecondaryStateDecider - CORNER_KICK --> $SecondaryStateTeamDecider - OUR --> $RankToBallNoGoalie - FIRST --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToCornerKickPosition + mode:striker - SECOND --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToCornerKickPosition + mode:supporter - THIRD --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition - OTHER --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToCornerKickPosition + mode:others - THROW_IN --> $SecondaryStateTeamDecider - OUR --> $RankToBallNoGoalie - FIRST --> $DoOnce - NOT_DONE --> @ChangeAction + action:going_to_ball, @LookAtFieldFeatures, @AvoidBallActive, @GoToBall + target:gradient + distance:0.3 + blocking:false - DONE --> $ReachedAndAlignedToPathPlanningGoalPosition + threshold:0.03 + latch:true - NO --> @GoToBall + target:gradient + distance:0.3 - YES --> @LookForward, @ChangeAction + action:kicking, @Stand + duration:1.5 + r:false, @PlayAnimationDynup + direction:descend_no_arms, @PlayAnimationGrabBall + r:false, @PlayAnimationDynup + direction:rise_no_arms, @PlayAnimationThrow + r:false, @GetWalkready + r:false, @Stand - SECOND --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToPassPreparePosition - THIRD --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition - OTHER --> $RankToBallNoGoalie - FIRST --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + mode:freekick_first - SECOND --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + mode:freekick_second - THIRD --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition - ELSE --> $SecondaryStateTeamDecider - OUR --> $RankToBallNoGoalie - FIRST --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToBall + target:gradient + distance:0.5 - SECOND --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToPassPreparePosition - THIRD --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition - OTHER --> $RankToBallNoGoalie - FIRST --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + mode:freekick_first - SECOND --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + mode:freekick_second - THIRD --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + YES --> $RankToBallNoGoalie + FIRST --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + mode:freekick_first + SECOND --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition + mode:freekick_second + THIRD --> @ChangeAction + action:positioning, @LookAtFieldFeatures, @AvoidBallActive, @GoToDefensePosition #Init @Stand + duration:0.1 + r:false, @ChangeAction + action:waiting, @LookForward, @Stand @@ -152,7 +120,7 @@ $BallSeen NO_NORMAL --> #StandAndLook NO_FREEKICK --> #Placing YES --> $ConfigRole - GOALIE --> #GoalieRole + GOALIE --> #GoalieBehavior ELSE --> $CountActiveRobotsWithoutGoalie ONE --> $RankToBallNoGoalie FIRST --> #StrikerRole @@ -177,7 +145,7 @@ $IsPenalized DONE --> #PositioningReady SET --> $SecondaryStateDecider PENALTYSHOOT --> $SecondaryStateTeamDecider - OUR --> @Stand + duration:0.1 + r:false, @DeactivateHCM + r:false, @LookForward + r:false, @PlayAnimationInitInSim + r:false, @GetWalkready + r:false, @Stand // we need to also see the goalie + OUR --> @Stand + duration:0.1 + r:false, @DeactivateHCM + r:false, @LookForward + r:false, @PlayAnimationInitInSim + r:false, @GetWalkready + r:false, @Stand OTHER --> $BallSeen YES --> @Stand + duration:0.1 + r:false, @DeactivateHCM + r:false, @LookForward + r:false, @PlayAnimationInitInSim + r:false, @GetWalkready + r:false, @TrackBall + r:false, @PlayAnimationGoalieArms + r:false, @Stand // goalie only needs to care about the ball NO --> @Stand + duration:0.1 + r:false, @DeactivateHCM + r:false, @LookForward + r:false, @PlayAnimationInitInSim + r:false, @GetWalkready + r:false, @LookAtFieldFeatures + r:false, @PlayAnimationGoalieArms + r:false, @Stand @@ -188,8 +156,10 @@ $IsPenalized PLAYING --> $SecondaryStateDecider PENALTYSHOOT --> #PenaltyShootoutBehavior TIMEOUT --> #StandAndLook - ELSE --> $SecondaryStateModeDecider - ELSE --> #StandAndLook - PLACING --> #Placing + ELSE --> $SecondaryStateTeamDecider + OUR --> #NormalBehavior + OTHER --> #Placing NORMAL --> #NormalBehavior OVERTIME --> #NormalBehavior + STANDBY --> #StandAndLook + STOPPED --> #DoNothing diff --git a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/body_behavior.py b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/body_behavior.py index c529e74a69..61eace4381 100644 --- a/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/body_behavior.py +++ b/src/bitbots_behavior/bitbots_body_behavior/bitbots_body_behavior/body_behavior.py @@ -4,7 +4,7 @@ from bitbots_blackboard.body_blackboard import BodyBlackboard from bitbots_tf_buffer import Buffer from dynamic_stack_decider.dsd import DSD -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState from geometry_msgs.msg import PoseWithCovarianceStamped, Twist from rclpy.callback_groups import MutuallyExclusiveCallbackGroup from rclpy.duration import Duration diff --git a/src/bitbots_behavior/bitbots_body_behavior/package.xml b/src/bitbots_behavior/bitbots_body_behavior/package.xml index c0256d7dc4..0a0594b84e 100644 --- a/src/bitbots_behavior/bitbots_body_behavior/package.xml +++ b/src/bitbots_behavior/bitbots_body_behavior/package.xml @@ -22,7 +22,7 @@ bitbots_tts bitbots_utils dynamic_stack_decider - game_controller_hl_interfaces + game_controller_hsl_interfaces geometry_msgs python3-numpy rclpy diff --git a/src/bitbots_lowlevel/bitbots_buttons/CMakeLists.txt b/src/bitbots_lowlevel/bitbots_buttons/CMakeLists.txt index 771c19b290..27ef961c7f 100644 --- a/src/bitbots_lowlevel/bitbots_buttons/CMakeLists.txt +++ b/src/bitbots_lowlevel/bitbots_buttons/CMakeLists.txt @@ -15,7 +15,7 @@ find_package(ament_cmake REQUIRED) find_package(backward_ros REQUIRED) find_package(bitbots_docs REQUIRED) find_package(bitbots_msgs REQUIRED) -find_package(game_controller_hl_interfaces REQUIRED) +find_package(game_controller_hsl_interfaces REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(std_srvs REQUIRED) @@ -27,7 +27,7 @@ ament_target_dependencies( ament_cmake backward_ros bitbots_msgs - game_controller_hl_interfaces + game_controller_hsl_interfaces rclcpp std_msgs std_srvs diff --git a/src/bitbots_lowlevel/bitbots_buttons/package.xml b/src/bitbots_lowlevel/bitbots_buttons/package.xml index 0deeed624b..ce87ddfb10 100644 --- a/src/bitbots_lowlevel/bitbots_buttons/package.xml +++ b/src/bitbots_lowlevel/bitbots_buttons/package.xml @@ -20,14 +20,14 @@ backward_ros bitbots_docs bitbots_msgs - game_controller_hl_interfaces + game_controller_hsl_interfaces rclcpp std_msgs std_srvs test_msgs - + python3 tested_robot diff --git a/src/bitbots_lowlevel/bitbots_buttons/src/button_node.cpp b/src/bitbots_lowlevel/bitbots_buttons/src/button_node.cpp index 6e2e2e18b7..28f83ca0aa 100644 --- a/src/bitbots_lowlevel/bitbots_buttons/src/button_node.cpp +++ b/src/bitbots_lowlevel/bitbots_buttons/src/button_node.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -53,12 +53,12 @@ class ButtonNode : public rclcpp::Node { teaching_mode_client_ = this->create_client("teaching_mode"); buttons_sub_ = this->create_subscription( "/buttons", 1, std::bind(&bitbots_buttons::ButtonNode::buttonCb, this, _1)); - gamestate_sub_ = this->create_subscription( + gamestate_sub_ = this->create_subscription( "gamestate", 1, std::bind(&bitbots_buttons::ButtonNode::gamestateCb, this, _1)); } // Sets the in_game_ variable to true, if a Gamestate message from the Gamecontroller arrives. - void gamestateCb(const game_controller_hl_interfaces::msg::GameState::SharedPtr msg) { in_game_ = true; } + void gamestateCb(const game_controller_hsl_interfaces::msg::GameState::SharedPtr msg) { in_game_ = true; } void buttonCb(const bitbots_msgs::msg::Buttons::SharedPtr msg) { // button1 - red @@ -197,7 +197,7 @@ class ButtonNode : public rclcpp::Node { rclcpp::Client::SharedPtr foot_zero_client_; rclcpp::Client::SharedPtr power_client_; rclcpp::Subscription::SharedPtr buttons_sub_; - rclcpp::Subscription::SharedPtr gamestate_sub_; + rclcpp::Subscription::SharedPtr gamestate_sub_; }; } // namespace bitbots_buttons diff --git a/src/bitbots_misc/bitbots_bringup/launch/highlevel.launch b/src/bitbots_misc/bitbots_bringup/launch/highlevel.launch index fc277868b5..6543a3607f 100644 --- a/src/bitbots_misc/bitbots_bringup/launch/highlevel.launch +++ b/src/bitbots_misc/bitbots_bringup/launch/highlevel.launch @@ -16,7 +16,7 @@ - + diff --git a/src/bitbots_misc/bitbots_bringup/package.xml b/src/bitbots_misc/bitbots_bringup/package.xml index 30fbedae9d..f3aec43bbb 100644 --- a/src/bitbots_misc/bitbots_bringup/package.xml +++ b/src/bitbots_misc/bitbots_bringup/package.xml @@ -33,7 +33,7 @@ bitbots_utils bitbots_vision foxglove_bridge - game_controller_hl + game_controller_hsl humanoid_base_footprint soccer_ipm system_monitor diff --git a/src/bitbots_misc/bitbots_docs/docs/manual/testing/sim_test.rst b/src/bitbots_misc/bitbots_docs/docs/manual/testing/sim_test.rst index 9d3b21b10e..38410e360a 100644 --- a/src/bitbots_misc/bitbots_docs/docs/manual/testing/sim_test.rst +++ b/src/bitbots_misc/bitbots_docs/docs/manual/testing/sim_test.rst @@ -37,4 +37,4 @@ Test the complete software stack in simulation .. code-block:: bash ros2 launch bitbots_bringup simulator_teamplayer.launch - ros2 run game_controller_hl sim_gamestate.py + ros2 run game_controller_hsl sim_gamestate.py diff --git a/src/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst b/src/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst index 7b25661cea..dc617b760b 100644 --- a/src/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst +++ b/src/bitbots_misc/bitbots_docs/docs/manual/tutorials/cl_simulation_testing_setup.rst @@ -36,7 +36,7 @@ Instead of doing `pixi run ...` you can also activate the pixi environment for t With ``game_controller:=false`` we ensure, that the game_controller_listener is not started as well, but instead we will simulate the current gamestate by our own script (in another terminal): -``pixi run ros2 run game_controller_hl sim_gamestate.py`` +``pixi run ros2 run game_controller_hsl sim_gamestate.py`` Which allows us to simulate the current gamestate and different phases of the game. Now everything is ready for some simulation testing. diff --git a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py index 0429ed5bfd..79652a3e5d 100644 --- a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py +++ b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py @@ -2,6 +2,7 @@ import numpy as np from bitbots_utils.transforms import quat2fused +from std_msgs.msg import Bool from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement @@ -23,6 +24,7 @@ def __init__(self, blackboard, dsd, parameters): def perform(self, reevaluate=False): # Check of the fallen detection is active if not self.blackboard.is_stand_up_active: + self.publish_if_fallen(False) return "NOT_FALLEN" # Get angular velocity from the IMU @@ -30,6 +32,7 @@ def perform(self, reevaluate=False): # Check if the robot is rotating if np.mean(np.abs(angular_velocity)) >= 0.2: + self.publish_if_fallen(False) return "NOT_FALLEN" # Convert quaternion to fused angles @@ -37,18 +40,27 @@ def perform(self, reevaluate=False): # Decides which side is facing downwards. if fused_pitch > self.fallen_orientation_thresh: + self.publish_if_fallen(True) return "FALLEN_FRONT" if fused_pitch < -self.fallen_orientation_thresh: + self.publish_if_fallen(True) return "FALLEN_BACK" if fused_roll > self.fallen_orientation_thresh: + self.publish_if_fallen(True) return "FALLEN_RIGHT" if fused_roll < -self.fallen_orientation_thresh: + self.publish_if_fallen(True) return "FALLEN_LEFT" + self.publish_if_fallen(False) return "NOT_FALLEN" + def publish_if_fallen(self, is_fallen): + # publishes if robot is fallen + self.blackboard.is_fallen_publisher.publish(Bool(data=is_fallen)) + def get_reevaluate(self): return True diff --git a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py index 1e5556e62f..b28ad4efdb 100644 --- a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py +++ b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py @@ -15,3 +15,19 @@ def perform(self, reevaluate=False): def get_reevaluate(self): return True + + +class GameControllerStop(AbstractHCMDecisionElement): + """ + Handles manual stops + """ + + def perform(self, reevaluate=False): + if self.blackboard.game_controller_stop: + # we do an action sequence to go into stop and to stay there + return "STOPPED" + else: + return "FREE" + + def get_reevaluate(self): + return True diff --git a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd index 2e0b29b049..c4e15f47f7 100644 --- a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd +++ b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd @@ -21,7 +21,7 @@ $StartHCM TEACH --> @RobotStateRecord, @SetTorque + stiff:false, @Wait HOLD --> @SetTorque + stiff:true, @Wait FINISHED --> @SetTorque + stiff:true + r:false, @RobotStateControllable, @PlayAnimationDynup + direction:walkready + r:false - OFF --> $Stop + OFF --> $Stop STOPPED --> @RobotStatePenalty, @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:walkready + r:false, @Wait FREE -->$CheckIMU IMU_NOT_STARTED --> @RobotStateStartup, @WaitForIMUStartup @@ -32,10 +32,18 @@ $StartHCM OKAY --> $PickedUp PICKED_UP --> @RobotStatePickedUp, @PlayAnimationDynup + direction:walkready + r:false, @Wait ON_GROUND --> $Fallen - FALLEN_FRONT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationStandupFront, @SetSquat + squat:true - FALLEN_BACK --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @SetFootZero, @PlayAnimationFallingBack, @PlayAnimationStandupBack, @SetSquat + squat:true - FALLEN_RIGHT --> @RobotStateFallen, @CancelGoals, @StopWalking, @PlayAnimationTurningFrontRight - FALLEN_LEFT --> @RobotStateFallen, @CancelGoals, @StopWalking, @PlayAnimationTurningFrontLeft + FALLEN_FRONT --> $GameControllerStop + STOPPED --> @RobotStateFallen, @CancelGoals, @StopWalking, @Wait + FREE --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationStandupFront, @SetSquat + squat:true + FALLEN_BACK --> $GameControllerStop + STOPPED --> @RobotStateFallen, @CancelGoals, @StopWalking, @Wait + FREE --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @SetFootZero, @PlayAnimationFallingBack, @PlayAnimationStandupBack, @SetSquat + squat:true + FALLEN_RIGHT --> $GameControllerStop + STOPPED --> @RobotStateFallen, @CancelGoals, @StopWalking, @Wait + FREE --> @RobotStateFallen, @CancelGoals, @StopWalking, @PlayAnimationTurningFrontRight + FALLEN_LEFT --> $GameControllerStop + STOPPED --> @RobotStateFallen, @CancelGoals, @StopWalking, @Wait + FREE --> @RobotStateFallen, @CancelGoals, @StopWalking, @PlayAnimationTurningFrontLeft NOT_FALLEN --> $Falling FALLING_LEFT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingLeft, @Wait FALLING_RIGHT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingRight, @Wait diff --git a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index 3ac8d4dae9..6db308509c 100644 --- a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -8,6 +8,7 @@ from rclpy.task import Future from rclpy.time import Time from sensor_msgs.msg import Imu, JointState +from std_msgs.msg import Bool from std_msgs.msg import Empty as EmptyMsg from std_srvs.srv import Empty as EmptySrv from std_srvs.srv import SetBool @@ -25,6 +26,7 @@ def __init__(self, node: Node): # Basic state self.current_state: T_RobotControlState = RobotControlState.STARTUP self.stopped: bool = False + self.game_controller_stop: bool = False # Save start time self.start_time: Time = self.node.get_clock().now() @@ -55,6 +57,7 @@ def __init__(self, node: Node): self.cancel_path_planning_pub = self.node.create_publisher(EmptyMsg, "pathfinding/cancel", 1) self.speak_publisher = self.node.create_publisher(Audio, "speak", 1) self.torque_publisher = self.node.create_publisher(JointTorque, "set_torque_individual", 10) + self.is_fallen_publisher = self.node.create_publisher(Bool, "hsl_gamecontroller/is_fallen", 1) # Latest imu data self.accel = numpy.array([0, 0, 0]) diff --git a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index 14a4a38d42..05663e0e4f 100755 --- a/src/bitbots_motion/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/src/bitbots_motion/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -80,6 +80,7 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): self.node.create_subscription(Bool, "core/power_switch_status", self.power_cb, 1) self.node.create_subscription(Bool, "hcm_deactivate", self.deactivate_cb, 1) self.node.create_subscription(DiagnosticArray, "diagnostics_agg", self.diag_cb, 1) + self.node.create_subscription(Bool, "game_controller/stop_msg", self.stop_cb, 1) # Create services self.node.create_service(SetBool, "record_mode", self.set_record_mode_callback) @@ -122,6 +123,9 @@ def deactivate_cb(self, msg: Bool): """Deactivates the HCM.""" self.hcm_deactivated = msg.data + def stop_cb(self, msg: Bool): + self.blackboard.game_controller_stop = msg.data + def set_manual_penalize_mode_callback(self, req: ManualPenalize.Request, resp: ManualPenalize.Response): """Callback for the manual penalize service.""" if req.penalize == ManualPenalize.Request.OFF: diff --git a/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_dsd/decisions/game_state.py b/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_dsd/decisions/game_state.py index e28adbd82e..ae2eba9840 100644 --- a/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_dsd/decisions/game_state.py +++ b/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_dsd/decisions/game_state.py @@ -1,4 +1,4 @@ -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState from bitbots_localization_handler.localization_dsd.decisions import AbstractLocalizationDecisionElement @@ -32,18 +32,25 @@ def perform(self, reevaluate=False): :param reevaluate: :return: """ - game_state_number = self.blackboard.gamestate.get_gamestate() - - if game_state_number == GameState.GAMESTATE_INITIAL: + game_state_number = self.blackboard.gamestate.get_game_state() + # todo this is a temporary hack to make GUI work + if game_state_number == GameState.STATE_INITIAL: return "INITIAL" - elif game_state_number == GameState.GAMESTATE_READY: + elif game_state_number == GameState.STATE_READY: return "READY" - elif game_state_number == GameState.GAMESTATE_SET: + elif game_state_number == GameState.STATE_SET: return "SET" - elif game_state_number == GameState.GAMESTATE_PLAYING: + elif game_state_number == GameState.STATE_PLAYING: return "PLAYING" - elif game_state_number == GameState.GAMESTATE_FINISHED: + elif game_state_number == GameState.STATE_FINISHED: return "FINISHED" + elif game_state_number == GameState.STATE_STANDBY: + return "STANDBY" + else: + # This should never happen, but all cases required string response + # as we do not get any stack trace otherwise + self.blackboard.node.get_logger().error(f"Received unknown game state number: {game_state_number}") + return "UNKNOWN" def get_reevaluate(self): """ @@ -59,29 +66,35 @@ class SecondaryStateDecider(AbstractLocalizationDecisionElement): """ def perform(self, reevaluate=False): - state_number = self.blackboard.gamestate.get_secondary_state() + set_play_number = self.blackboard.gamestate.get_set_play() + game_phase_number = self.blackboard.gamestate.get_game_phase() # todo this is a temporary hack to make GUI work - if state_number == GameState.STATE_NORMAL: + if game_phase_number == GameState.GAME_PHASE_NORMAL and set_play_number == GameState.SET_PLAY_NONE: return "NORMAL" - elif state_number == GameState.STATE_PENALTYSHOOT: + elif game_phase_number == GameState.GAME_PHASE_PENALTY_SHOOT_OUT and set_play_number == GameState.SET_PLAY_NONE: return "PENALTYSHOOT" - elif state_number == GameState.STATE_OVERTIME: + elif game_phase_number == GameState.GAME_PHASE_EXTRA_TIME and set_play_number == GameState.SET_PLAY_NONE: return "OVERTIME" - elif state_number == GameState.STATE_TIMEOUT: + elif game_phase_number == GameState.GAME_PHASE_TIMEOUT and set_play_number == GameState.SET_PLAY_NONE: return "TIMEOUT" - elif state_number == GameState.STATE_DIRECT_FREEKICK: + elif set_play_number == GameState.SET_PLAY_DIRECT_FREE_KICK: return "DIRECT_FREEKICK" - elif state_number == GameState.STATE_INDIRECT_FREEKICK: + elif set_play_number == GameState.SET_PLAY_INDIRECT_FREE_KICK: return "INDIRECT_FREEKICK" - elif state_number == GameState.STATE_PENALTYKICK: + elif set_play_number == GameState.SET_PLAY_PENALTY_KICK: return "PENALTYKICK" - elif state_number == GameState.STATE_CORNER_KICK: + elif set_play_number == GameState.SET_PLAY_CORNER_KICK: return "CORNER_KICK" - elif state_number == GameState.STATE_GOAL_KICK: + elif set_play_number == GameState.SET_PLAY_GOAL_KICK: return "GOAL_KICK" - elif state_number == GameState.STATE_THROW_IN: + elif set_play_number == GameState.SET_PLAY_THROW_IN: return "THROW_IN" + else: + self.blackboard.node.get_logger().error( + f"Unknown secondary state with game phase {game_phase_number} and set play {set_play_number}" + ) + return "UNKNOWN" def get_reevaluate(self): """ @@ -100,9 +113,9 @@ def __init__(self, blackboard, dsd, parameters): self.team_id = self.blackboard.gamestate.get_team_id() def perform(self, reevaluate=False): - state_number = self.blackboard.gamestate.get_secondary_state() + game_phase_number = self.blackboard.gamestate.get_game_phase() # we have to handle penalty shoot differently because the message is strange - if state_number == GameState.STATE_PENALTYSHOOT: + if game_phase_number == GameState.GAME_PHASE_PENALTY_SHOOT_OUT: if self.blackboard.gamestate.has_kickoff(): return "OUR" return "OTHER" @@ -143,17 +156,17 @@ class InitialToReady(AbstractLocalizationDecisionElement): def __init__(self, blackboard, dsd, parameters): super().__init__(blackboard, dsd, parameters) - self.previous_game_state_number = self.blackboard.gamestate.get_gamestate() + self.previous_game_state_number = self.blackboard.gamestate.get_game_state() def perform(self, reevaluate=False): previous_game_state_number = self.previous_game_state_number - game_state_number = self.blackboard.gamestate.get_gamestate() + game_state_number = self.blackboard.gamestate.get_game_state() self.previous_game_state_number = game_state_number self.publish_debug_data("Previous game state", previous_game_state_number) self.publish_debug_data("Current game state", game_state_number) - if previous_game_state_number == GameState.GAMESTATE_INITIAL and game_state_number == GameState.GAMESTATE_READY: + if previous_game_state_number == GameState.STATE_INITIAL and game_state_number == GameState.STATE_READY: return "YES" else: return "NO" diff --git a/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_handler.py b/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_handler.py index 3239dbde21..f479718296 100755 --- a/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_handler.py +++ b/src/bitbots_navigation/bitbots_localization_handler/bitbots_localization_handler/localization_handler.py @@ -3,7 +3,7 @@ import rclpy from dynamic_stack_decider.dsd import DSD -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState from geometry_msgs.msg import PoseWithCovarianceStamped from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup from rclpy.experimental.events_executor import EventsExecutor diff --git a/src/bitbots_navigation/bitbots_localization_handler/package.xml b/src/bitbots_navigation/bitbots_localization_handler/package.xml index ce1b07b2fe..32e098f39f 100644 --- a/src/bitbots_navigation/bitbots_localization_handler/package.xml +++ b/src/bitbots_navigation/bitbots_localization_handler/package.xml @@ -19,7 +19,7 @@ bitbots_msgs bitbots_utils dynamic_stack_decider - game_controller_hl_interfaces + game_controller_hsl_interfaces geometry_msgs python3-numpy rclpy diff --git a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py index 0ae4aba8ba..d52c6e7a11 100755 --- a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py +++ b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py @@ -6,12 +6,13 @@ from typing import Optional import rclpy +import transforms3d from ament_index_python.packages import get_package_share_directory from bitbots_tf_buffer import Buffer from bitbots_utils.utils import get_parameter_dict, get_parameters_from_other_node from builtin_interfaces.msg import Time as TimeMsg -from game_controller_hl_interfaces.msg import GameState -from geometry_msgs.msg import PoseWithCovarianceStamped, Twist, TwistWithCovarianceStamped +from game_controller_hsl_interfaces.msg import GameState, PlayerStatusPose +from geometry_msgs.msg import PoseWithCovarianceStamped, Quaternion, Twist, TwistWithCovarianceStamped from numpy import double from rclpy.callback_groups import MutuallyExclusiveCallbackGroup from rclpy.duration import Duration @@ -104,6 +105,9 @@ def try_to_establish_connection(self): def create_publishers(self): self.team_data_publisher = self.node.create_publisher(TeamData, self.topics["team_data_topic"], qos_profile=1) + self.game_controller_player_pose_publisher = self.node.create_publisher( + PlayerStatusPose, "hsl_gamecontroller/pose_stamped", 1 + ) def create_subscribers(self): self.node.create_subscription( @@ -176,6 +180,15 @@ def gamestate_cb(self, msg: GameState): def pose_cb(self, msg: PoseWithCovarianceStamped): self.pose = msg + player_pose_msg = PlayerStatusPose() + player_pose_msg.header = msg.header + player_pose_msg.pose = [ + msg.pose.pose.position.x, + msg.pose.pose.position.y, + self.extract_orientation_yaw_angle(msg.pose.pose.orientation), + ] + self.game_controller_player_pose_publisher.publish(player_pose_msg) + def cmd_vel_cb(self, msg: Twist): self.cmd_vel = msg self.cmd_vel_time = self.get_current_time().to_msg() @@ -293,6 +306,14 @@ def is_robot_allowed_to_send_message(self) -> bool: def get_current_time(self) -> Time: return self.node.get_clock().now() + def extract_orientation_yaw_angle(self, quaternion: Quaternion): + angles = self.convert_to_euler(quaternion) + theta = angles[2] + return theta + + def convert_to_euler(self, quaternion: Quaternion): + return transforms3d.euler.quat2euler([quaternion.w, quaternion.x, quaternion.y, quaternion.z]) + def main(): rclpy.init(args=None) diff --git a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/converter/state_to_message_converter.py b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/converter/state_to_message_converter.py index 41ea6a62ee..1d821e48a0 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/converter/state_to_message_converter.py +++ b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/converter/state_to_message_converter.py @@ -4,7 +4,7 @@ import numpy as np import transforms3d from builtin_interfaces.msg import Time -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState from geometry_msgs.msg import PointStamped, PoseStamped, PoseWithCovarianceStamped, Quaternion, Twist from jaxtyping import Float64 from soccer_vision_3d_msgs.msg import Robot, RobotArray diff --git a/src/bitbots_team_communication/bitbots_team_communication/package.xml b/src/bitbots_team_communication/bitbots_team_communication/package.xml index 12a0701b1d..8881b82667 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/package.xml +++ b/src/bitbots_team_communication/bitbots_team_communication/package.xml @@ -23,7 +23,7 @@ bitbots_tf_buffer bitbots_utils builtin_interfaces - game_controller_hl_interfaces + game_controller_hsl_interfaces geometry_msgs python3-protobuf python3-transforms3d diff --git a/src/bitbots_team_communication/bitbots_team_communication/scripts/test_team_comm.py b/src/bitbots_team_communication/bitbots_team_communication/scripts/test_team_comm.py index d392b3309d..fc82a82618 100755 --- a/src/bitbots_team_communication/bitbots_team_communication/scripts/test_team_comm.py +++ b/src/bitbots_team_communication/bitbots_team_communication/scripts/test_team_comm.py @@ -5,7 +5,7 @@ import numpy import rclpy -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState from geometry_msgs.msg import Point, Pose, PoseWithCovariance, PoseWithCovarianceStamped, Quaternion, TransformStamped from rclpy.qos import QoSDurabilityPolicy, QoSProfile from soccer_vision_3d_msgs.msg import Robot, RobotArray diff --git a/src/bitbots_team_communication/bitbots_team_communication/test/converter/test_state_to_message_converter.py b/src/bitbots_team_communication/bitbots_team_communication/test/converter/test_state_to_message_converter.py index 16d8511f7a..2e995483e6 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/test/converter/test_state_to_message_converter.py +++ b/src/bitbots_team_communication/bitbots_team_communication/test/converter/test_state_to_message_converter.py @@ -4,7 +4,7 @@ import numpy import pytest from builtin_interfaces.msg import Time -from game_controller_hl_interfaces.msg import GameState +from game_controller_hsl_interfaces.msg import GameState from geometry_msgs.msg import ( Point, PointStamped, diff --git a/src/bitbots_vision/package.xml b/src/bitbots_vision/package.xml index 6f5b75f5e0..ef99db0232 100644 --- a/src/bitbots_vision/package.xml +++ b/src/bitbots_vision/package.xml @@ -28,7 +28,7 @@ rosidl_default_generators rosidl_default_runtime bitbots_utils - game_controller_hl_interfaces + game_controller_hsl_interfaces geometry_msgs image_transport python3-numpy diff --git a/src/bitbots_world_model/bitbots_ball_filter/bitbots_ball_filter/ball_filter.py b/src/bitbots_world_model/bitbots_ball_filter/bitbots_ball_filter/ball_filter.py index fd3763146d..b9d3cabc6d 100755 --- a/src/bitbots_world_model/bitbots_ball_filter/bitbots_ball_filter/ball_filter.py +++ b/src/bitbots_world_model/bitbots_ball_filter/bitbots_ball_filter/ball_filter.py @@ -14,7 +14,7 @@ from ros2_numpy import msgify, numpify from sensor_msgs.msg import CameraInfo from soccer_vision_3d_msgs.msg import Ball, BallArray -from std_msgs.msg import Header +from std_msgs.msg import Float32, Header from std_srvs.srv import Trigger from tf2_geometry_msgs import PointStamped, PoseStamped @@ -39,6 +39,7 @@ def __init__(self) -> None: # Initialize parameters self.update_params() self.logger.info(f"Using frame '{self.config.filter.frame}' for ball filtering") + self.last_ball_time: Time = self.get_clock().now() self.camera_info: Optional[CameraInfo] = None @@ -49,6 +50,10 @@ def __init__(self) -> None: self.ball_pose_publisher = self.create_publisher( PoseWithCovarianceStamped, self.config.ros.ball_position_publish_topic, 1 ) + self.game_controller_ball_position_publisher = self.create_publisher( + PointStamped, "hsl_gamecontroller/ball_position", 1 + ) + self.ball_age_publisher = self.create_publisher(Float32, "hsl_gamecontroller/ball_age", 1) # Create callback group self.callback_group = MutuallyExclusiveCallbackGroup() @@ -141,6 +146,8 @@ def ball_callback(self, msg: BallArray) -> None: # Store the ball measurement self.ball_state_position = numpify(ball_measurement_map.point) self.ball_state_covariance = covariance + # @TODO: actually give last ball time + self.last_ball_time = self.get_clock().now() ball_measurement_updated = True # Get our estimate in the base footprint frame for easier distance calculation @@ -259,6 +266,21 @@ def filter_step(self) -> None: pose_msg.pose.pose.orientation.w = 1.0 self.ball_pose_publisher.publish(pose_msg) + ball_position_msg = PointStamped() + ball_position_msg.point = msgify(Point, self.ball_state_position) + ball_position_msg.header = Header( + stamp=Time.to_msg(self.get_clock().now()), + frame_id=self.config.filter.frame, + ) + self.game_controller_ball_position_publisher.publish(ball_position_msg) + + # Build message for Ball age + ball_age_msg = Float32() + seconds_since_last_ball = (self.get_clock().now() - self.last_ball_time).nanoseconds / 1e9 + ball_age_msg.data = seconds_since_last_ball + + self.ball_age_publisher.publish(ball_age_msg) + def main(args=None) -> None: rclpy.init(args=args) diff --git a/src/lib/game_controller_hsl/.github/dependabot.yml b/src/lib/game_controller_hsl/.github/dependabot.yml new file mode 100644 index 0000000000..e644b373e1 --- /dev/null +++ b/src/lib/game_controller_hsl/.github/dependabot.yml @@ -0,0 +1,11 @@ +# Set update schedule for GitHub Actions +# (https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot) + +version: 2 +updates: + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + # Check for updates to GitHub Actions every week + interval: "weekly" diff --git a/src/lib/game_controller_hsl/.github/workflows/build_and_test_humble.yaml b/src/lib/game_controller_hsl/.github/workflows/build_and_test_humble.yaml new file mode 100644 index 0000000000..4d6c800432 --- /dev/null +++ b/src/lib/game_controller_hsl/.github/workflows/build_and_test_humble.yaml @@ -0,0 +1,34 @@ +# This is a basic workflow to help you get started with Actions + +name: Build and Test (humble) + +# Controls when the action will run. +on: + # Triggers the workflow on push + push: + branches: [ rolling ] + + # Triggers the workflow on pull requests + pull_request: + branches: [ rolling ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + container: + image: ubuntu:jammy + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: ros-tooling/setup-ros@v0.7 + with: + use-ros2-testing: true + - uses: ros-tooling/action-ros-ci@v0.4 + with: + target-ros2-distro: humble diff --git a/src/lib/game_controller_hsl/.github/workflows/build_and_test_jazzy.yaml b/src/lib/game_controller_hsl/.github/workflows/build_and_test_jazzy.yaml new file mode 100644 index 0000000000..4252ce33c6 --- /dev/null +++ b/src/lib/game_controller_hsl/.github/workflows/build_and_test_jazzy.yaml @@ -0,0 +1,34 @@ +# This is a basic workflow to help you get started with Actions + +name: Build and Test (jazzy) + +# Controls when the action will run. +on: + # Triggers the workflow on push + push: + branches: [ rolling ] + + # Triggers the workflow on pull requests + pull_request: + branches: [ rolling ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + container: + image: ubuntu:noble + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: ros-tooling/setup-ros@v0.7 + with: + use-ros2-testing: true + - uses: ros-tooling/action-ros-ci@v0.4 + with: + target-ros2-distro: jazzy diff --git a/src/lib/game_controller_hsl/.github/workflows/build_and_test_rolling.yaml b/src/lib/game_controller_hsl/.github/workflows/build_and_test_rolling.yaml new file mode 100644 index 0000000000..630ce076fc --- /dev/null +++ b/src/lib/game_controller_hsl/.github/workflows/build_and_test_rolling.yaml @@ -0,0 +1,34 @@ +# This is a basic workflow to help you get started with Actions + +name: Build and Test (rolling) + +# Controls when the action will run. +on: + # Triggers the workflow on push + push: + branches: [ rolling ] + + # Triggers the workflow on pull requests + pull_request: + branches: [ rolling ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + container: + image: ubuntu:noble + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: ros-tooling/setup-ros@v0.7 + with: + use-ros2-testing: true + - uses: ros-tooling/action-ros-ci@v0.4 + with: + target-ros2-distro: rolling diff --git a/src/lib/game_controller_hsl/.gitignore b/src/lib/game_controller_hsl/.gitignore new file mode 100644 index 0000000000..68a82f03c6 --- /dev/null +++ b/src/lib/game_controller_hsl/.gitignore @@ -0,0 +1,4 @@ +__pycache__ +*.pyc + +.vscode diff --git a/src/lib/game_controller_hsl/.gitrepo b/src/lib/game_controller_hsl/.gitrepo new file mode 100644 index 0000000000..991c15b706 --- /dev/null +++ b/src/lib/game_controller_hsl/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/ingydotnet/git-subrepo#readme +; +[subrepo] + remote = git@github.com:bit-bots/game_controller_hsl.git + branch = rolling + commit = b92a2693616b8ca4849eca14363dda06e8e1f3d8 + parent = 21a107e9266bd5711d75963818a3c364c50a180b + method = merge + cmdver = 0.4.9 diff --git a/src/lib/game_controller_hsl/CONTRIBUTING.md b/src/lib/game_controller_hsl/CONTRIBUTING.md new file mode 100644 index 0000000000..6f63de9e5d --- /dev/null +++ b/src/lib/game_controller_hsl/CONTRIBUTING.md @@ -0,0 +1,13 @@ +Any contribution that you make to this repository will +be under the Apache 2 License, as dictated by that +[license](http://www.apache.org/licenses/LICENSE-2.0.html): + +~~~ +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. +~~~ diff --git a/src/lib/game_controller_hsl/LICENSE b/src/lib/game_controller_hsl/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/src/lib/game_controller_hsl/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/src/lib/game_controller_hsl/README.md b/src/lib/game_controller_hsl/README.md new file mode 100644 index 0000000000..cdf18f8899 --- /dev/null +++ b/src/lib/game_controller_hsl/README.md @@ -0,0 +1,9 @@ +# Game Controller Client (RoboCup Humanoid League) + +[![Build and Test (humble)](../../actions/workflows/build_and_test_humble.yaml/badge.svg?branch=rolling)](../../actions/workflows/build_and_test_humble.yaml?query=branch:rolling) +[![Build and Test (jazzy)](../../actions/workflows/build_and_test_jazzy.yaml/badge.svg?branch=rolling)](../../actions/workflows/build_and_test_jazzy.yaml?query=branch:rolling) +[![Build and Test (rolling)](../../actions/workflows/build_and_test_rolling.yaml/badge.svg?branch=rolling)](../../actions/workflows/build_and_test_rolling.yaml?query=branch:rolling) + +This is the client for the humanoid league game controller. It communicates with the game controller via UDP and sends a game state message to ROS subscribers. + +## Still work in progress \ No newline at end of file diff --git a/src/lib/game_controller_hsl/game_controller_hsl/config/game_controller_settings.yaml b/src/lib/game_controller_hsl/game_controller_hsl/config/game_controller_settings.yaml new file mode 100644 index 0000000000..7f8c2c8734 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/config/game_controller_settings.yaml @@ -0,0 +1,8 @@ +--- +# Game controller network settings + +game_controller_hsl: + ros__parameters: + listen_host: '0.0.0.0' + listen_port: 3838 + answer_port: 3939 diff --git a/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/__init__.py b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/gamestate.py b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/gamestate.py new file mode 100644 index 0000000000..c21d9ce57f --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/gamestate.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +from construct import Byte, Struct, Enum, Bytes, Const, Array, Int16ul, PaddedString, Flag, Int16sl, Float32l + +Short = Int16ul + +RobotInfoStruct = "robot_info" / Struct( + # define NONE 0 + # define PENALTY_HL_KID_BALL_MANIPULATION 1 + # define PENALTY_HL_KID_PHYSICAL_CONTACT 2 + # define PENALTY_HL_KID_ILLEGAL_ATTACK 3 + # define PENALTY_HL_KID_ILLEGAL_DEFENSE 4 + # define PENALTY_HL_KID_REQUEST_FOR_PICKUP 5 + # define PENALTY_HL_KID_REQUEST_FOR_SERVICE 6 + # define PENALTY_HL_KID_REQUEST_FOR_PICKUP_2_SERVICE 7 + # define MANUAL 15 + "penalty" / Byte, + "secs_till_unpenalized" / Byte, + "warnings" / Byte, + "cautions" / Byte, + #"number_of_red_cards" / Byte, + #"goalkeeper" / Flag +) + +TeamInfoStruct = "team" / Struct( + "team_number" / Byte, + "field_player_color" / Enum(Byte, + BLUE=0, + RED=1, + YELLOW=2, + BLACK=3, + WHITE=4, + GREEN=5, + ORANGE=6, + PURPLE=7, + BROWN=8, + GRAY=9 + ), + "goalkeeper_color" / Enum(Byte, + BLUE=0, + RED=1, + YELLOW=2, + BLACK=3, + WHITE=4, + GREEN=5, + ORANGE=6, + PURPLE=7, + BROWN=8, + GRAY=9 + ), + "goalkeeper" / Byte, + "score" / Byte, + "penalty_shot" / Byte, # penalty shot counter + "single_shots" / Short, # bits represent penalty shot success + "message_budget" / Short, + "players" / Array(20, RobotInfoStruct) #always eleven fine? +) + +GAME_CONTROLLER_RESPONSE_VERSION = 19 + +GameStateStruct = "gamedata" / Struct( + "header" / Const(b'RGme'), + "version" / Const(GAME_CONTROLLER_RESPONSE_VERSION, Byte), + "packet_number" / Byte, + "players_per_team" / Byte, + "competition_type" / Enum(Byte, + COMPETITION_TYPE_SMALL=0, + COMPETITION_TYPE_MIDDLE=2, + COMPETITION_TYPE_LARGE=1 + ), + "stopped" / Flag, + "game_phase" / Enum(Byte, + GAME_PHASE_TIMEOUT=0, + GAME_PHASE_NORMAL=1, + GAME_PHASE_EXTRA_TIME =2, + GAME_PHASE_PENALTY_SHOOT_OUT=3 + ), + "state" / Enum(Byte, + STATE_INITIAL=0, + # auf startposition gehen + STATE_READY=1, + # bereithalten + STATE_SET=2, + # spielen + STATE_PLAYING=3, + # spiel zu ende + STATE_FINISHED=4 + ), + "set_play" / Enum(Byte, + SET_PLAY_NONE=0, + SET_PLAY_DIRECT_FREE_KICK=1, + SET_PLAY_INDIRECT_FREE_KICK=2, + SET_PLAY_PENALTY_KICK=3, + SET_PLAY_THROW_IN=4, + SET_PLAY_GOAL_KICK=5, + SET_PLAY_CORNER_KICK=6 + ), + "first_half" / Flag, + "kicking_team" / Byte, + "secs_remaining" / Int16sl, + "secondary_time" / Int16sl, + "teams" / Array(2, "team" / TeamInfoStruct) +) + +GAME_CONTROLLER_RESPONSE_VERSION = 4 + +ResponseStruct = Struct( + "header" / Const(b"RGrt"), + "version" / Const(GAME_CONTROLLER_RESPONSE_VERSION, Byte), + "player_number" / Byte, + "team_number" / Byte, + "fallen" / Flag, + "pose" / Float32l[3], + "ball_age" / Float32l, + "ball" / Float32l[2] +) diff --git a/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/receiver.py b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/receiver.py new file mode 100755 index 0000000000..86a419daba --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/receiver.py @@ -0,0 +1,285 @@ +# Copyright (c) 2023 Hamburg Bit-Bots +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import socket +import rclpy + +from construct import ConstError +from rclpy.node import Node +from rclpy.time import Time +from rclpy.duration import Duration +from std_msgs.msg import Header +from construct import Container +from geometry_msgs.msg import PointStamped +from std_msgs.msg import Float32, Bool +from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus +from game_controller_hsl.gamestate import GameStateStruct, ResponseStruct +from game_controller_hsl.utils import get_parameters_from_other_node +from game_controller_hsl_interfaces.msg import GameState, PlayerStatusPose + + +class GameStateReceiver(Node): + """This class puts up a simple UDP Server which receives the + *addr* parameter to listen to the packages from the game_controller. + + If it receives a package it will be interpreted with the construct data + structure and the :func:`on_new_gamestate` will be called with the content. + + After this we send a package back to the GC""" + + def __init__(self, *args, **kwargs): + super().__init__( + "game_controller", + *args, + **kwargs, + allow_undeclared_parameters=True, + automatically_declare_parameters_from_overrides=True, + ) + + # Check if we have the team and bot id parameters or if we should get them from the blackboard + if self.has_parameter("team_id") and self.has_parameter("bot_id"): + self.get_logger().info("Found team_id and bot_id parameter, using them") + # Get the parameters from our node + self.team_number = self.get_parameter("team_id").value + self.player_number = self.get_parameter("bot_id").value + else: + self.get_logger().info( + "No team_id and bot_id parameter set in game_controller, getting them from blackboard" + ) + # Get the parameter names from the parameter server + param_blackboard_name: str = self.get_parameter("parameter_blackboard_name").value + team_id_param_name: str = self.get_parameter("team_id_param_name").value + bot_id_param_name: str = self.get_parameter("bot_id_param_name").value + # Get the parameters from the blackboard + params = get_parameters_from_other_node( + self, param_blackboard_name, [team_id_param_name, bot_id_param_name] + ) + # Set the parameters + self.team_number = params[team_id_param_name] + self.player_number = params[bot_id_param_name] + + self.is_fallen: bool = False + self.ball_age: float = 100 # Start with high value to show low confidence + self.ball_position_msg: PointStamped = PointStamped() + self.pose_msg: PlayerStatusPose = PlayerStatusPose() + + # Create subscribers + self.create_subscription(PointStamped, "hsl_gamecontroller/ball_position", self.ball_position_cb, 1) + self.create_subscription(Float32, "hsl_gamecontroller/ball_age", self.ball_age_cb, 1) + self.create_subscription(Bool, "hsl_gamecontroller/is_fallen", self.is_fallen_cb, 1) + self.create_subscription(PlayerStatusPose, "hsl_gamecontroller/pose", self.pose_cb, 1) + + self.get_logger().info(f"We are playing as player {self.player_number} in team {self.team_number}") + + # The publisher for the game state + self.state_publisher = self.create_publisher(GameState, "gamestate", 1) + + # The publisher for the diagnostics + self.diagnostic_pub = self.create_publisher(DiagnosticArray, "diagnostics", 1) + + # The time in seconds after which we assume the game controller is lost + # and we tell the robot to move + self.game_controller_lost_time = 5 + + # The address listening on and the port for sending back the robots meta data + self.addr = (self.get_parameter("listen_host").value, self.get_parameter("listen_port").value) + self.answer_port = self.get_parameter("answer_port").value + + # The time of the last package + self.last_package_time: Time = self.get_clock().now() + + # Create the socket we want to use for the communications + self.socket = self._open_socket() + + def ball_position_cb(self, msg: PointStamped): + self.ball_position_msg = msg + + def ball_age_cb(self, msg: Float32): + self.ball_age = msg.data + + def is_fallen_cb(self, msg: Bool): + self.is_fallen = msg.data + + def pose_cb(self, msg: PlayerStatusPose): + self.pose_msg = msg + + def _open_socket(self) -> socket.socket: + """Creates the socket""" + new_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + new_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + new_socket.bind(self.addr) + new_socket.settimeout(2) + return new_socket + + def receive_forever(self): + """Waits in a loop for new packages""" + while rclpy.ok(): + # Try to receive a package + self.receive_and_answer_once() + # Check if we didn't receive a package for a long time for publishing diagnostics + received_message_lately = self.get_time_since_last_package() < Duration( + seconds=self.game_controller_lost_time + ) + self.publish_diagnostics(received_message_lately) + + def receive_and_answer_once(self): + """Receives a package, interprets it and sends an answer.""" + try: + # Receive the package + data, peer = self.socket.recvfrom(GameStateStruct.sizeof()) + + # Parse the package based on the GameStateStruct + # This throws a ConstError if it doesn't work + parsed_state = GameStateStruct.parse(data) + + # Assign the new package after it parsed successful to the state + self.last_package_time = self.get_clock().now() + + # Build the game state message and publish it + self.state_publisher.publish(self.build_game_state_msg(parsed_state)) + + # Answer the GameController + self.answer_to_gamecontroller(peer) + + except AssertionError as ae: + self.get_logger().error(str(ae)) + except socket.timeout: + self.get_logger().info("No GameController message received (socket timeout)", throttle_duration_sec=5) + except ConstError: + self.get_logger().warn("Parse Error: Probably using an old protocol!") + except IOError as e: + self.get_logger().warn(f"Error while sending keep-alive: {str(e)}") + + def publish_diagnostics(self, received_message_lately: bool): + """ + This publishes a Diagnostics Array. + """ + # initialize DiagnsticArray message + diag_array = DiagnosticArray() + + # configure DiagnosticStatus message + diag = DiagnosticStatus(name="Game Controller", hardware_id="Game Controller") + if not received_message_lately: + self.get_logger().info("No GameController message received", throttle_duration_sec=5) + diag.message = ( + "Lost connection to game controller for " + + str(int(self.get_time_since_last_package().nanoseconds / 1e9)) + + " sec" + ) + diag.level = DiagnosticStatus.WARN + else: + diag.message = "Connected" + diag.level = DiagnosticStatus.OK + + diag_array.status.append(diag) + + # add timestamp to header and publish DiagnosticArray + diag_array.header.stamp = self.get_clock().now().to_msg() + self.diagnostic_pub.publish(diag_array) + + def answer_to_gamecontroller(self, peer): + """Sends a life sign to the game controller""" + # Build the answer package + data = ResponseStruct.build( + dict( + player_number=self.player_number, + team_number=self.team_number, + fallen=self.is_fallen, + pose=self.pose_msg.pose, + ball_age=self.ball_age, + ball=[self.ball_position_msg.point.x, self.ball_position_msg.point.y], + ) + ) + # Send the package + self.get_logger().debug(f"Sending answer to {peer[0]}:{self.answer_port}") + try: + self.socket.sendto(data, (peer[0], self.answer_port)) + except Exception as e: + self.get_logger().error(f"Network Error: {str(e)}") + + def build_game_state_msg(self, state) -> GameState: + """Builds a GameState message from the game state""" + + # Get the team objects sorted into own and rival team + own_team = GameStateReceiver.select_team_by(lambda team: team.team_number == self.team_number, state.teams) + rival_team = GameStateReceiver.select_team_by(lambda team: team.team_number != self.team_number, state.teams) + + # Add some assertions to make sure everything is fine + assert not (own_team is None or rival_team is None), ( + f"Team {self.team_number} not playing, only {state.teams[0].team_number} and {state.teams[1].team_number}" + ) + + assert self.player_number <= len(own_team.players), f"Robot {self.player_number} not playing" + + this_robot = own_team.players[self.player_number - 1] + + return GameState( + header=Header(stamp=self.get_clock().now().to_msg()), + players_per_team=state.players_per_team, + competition_type=state.competition_type.intvalue, + game_phase=state.game_phase.intvalue, + main_state=state.state.intvalue, + set_play=state.set_play.intvalue, + kicking_team=state.kicking_team, + first_half=state.first_half, + stopped=state.stopped, + own_score=own_team.score, + rival_score=rival_team.score, + secs_remaining=state.secs_remaining, + secondary_time=state.secondary_time, + penalized=this_robot.penalty != 0, + seconds_till_unpenalized=this_robot.secs_till_unpenalized, + warings=this_robot.warnings, + cautions=this_robot.cautions, + own_player_color=own_team.field_player_color.intvalue, + own_goalie_color=own_team.goalkeeper_color.intvalue, + rival_player_color=rival_team.field_player_color.intvalue, + rival_goalie_color=rival_team.goalkeeper_color.intvalue, + # --- Gibt es nicht mehr? --- + # drop_in_team = state.drop_in_team, + # drop_in_time = state.drop_in_time, + penalty_shot=own_team.penalty_shot, + single_shots=own_team.single_shots, + # --- Gibt es nicht mehr? Waren die ähnlich wie Message Budget? --- + # coach_message = own_team.coach_message, + message_budget=own_team.message_budget, + team_mates_with_penalty=[player.penalty != 0 for player in own_team.players], + # --- Gibt es nicht mehr? Selber bemerken ob man rot hat? --- + # team_mates_with_red_card = [player.number_of_red_cards != 0 for player in own_team.players], + ) + + def get_time_since_last_package(self) -> Duration: + """Returns the time in seconds since the last package was received""" + return self.get_clock().now() - self.last_package_time + + @staticmethod + def select_team_by(predicate: callable, teams: list[Container]) -> Container: + """Selects the team based on the predicate""" + selected = [team for team in teams if predicate(team)] + return next(iter(selected), None) + + +def main(args=None): + rclpy.init(args=args) + receiver = GameStateReceiver() + + try: + receiver.receive_forever() + except KeyboardInterrupt: + receiver.destroy_node() + rclpy.shutdown() + + +if __name__ == "__main__": + main() diff --git a/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/utils.py b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/utils.py new file mode 100644 index 0000000000..58a24d5711 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/game_controller_hsl/utils.py @@ -0,0 +1,32 @@ +from typing import Any + +import rclpy +from rclpy.node import Node +from rcl_interfaces.srv import GetParameters +from rclpy.parameter import parameter_value_to_python + + +def get_parameters_from_other_node(own_node: Node, + other_node_name: str, + parameter_names: list[str], + service_timeout_sec: float = 20.0) -> dict[str, Any]: + """ + Used to receive parameters from other running nodes. + Returns a dict with requested parameter name as dict key and parameter value as dict value. + + From bitbots_utils (https://github.com/bit-bots/bitbots_misc) + """ + client = own_node.create_client(GetParameters, f'{other_node_name}/get_parameters') + ready = client.wait_for_service(timeout_sec=service_timeout_sec) + if not ready: + raise RuntimeError(f'Wait for {other_node_name} parameter service timed out') + request = GetParameters.Request() + request.names = parameter_names + future = client.call_async(request) + rclpy.spin_until_future_complete(own_node, future) + response = future.result() + + results = {} # Received parameter + for i, param in enumerate(parameter_names): + results[param] = parameter_value_to_python(response.values[i]) + return results \ No newline at end of file diff --git a/src/lib/game_controller_hsl/game_controller_hsl/launch/game_controller.launch b/src/lib/game_controller_hsl/game_controller_hsl/launch/game_controller.launch new file mode 100644 index 0000000000..1e4cedbc64 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/launch/game_controller.launch @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/game_controller_hsl/game_controller_hsl/package.xml b/src/lib/game_controller_hsl/game_controller_hsl/package.xml new file mode 100644 index 0000000000..e86607bf88 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/package.xml @@ -0,0 +1,31 @@ + + + + game_controller_hsl + 1.1.0 + + The game_controller_hsl packages receives packets from the GameController and + republishes them as GameState ROS messages. It sends response packets + back to the GameController. + + + Timon Engelke + Hamburg Bit-Bots + + Apache License 2.0 + + Timon Engelke + + rosidl_default_generators + rosidl_default_runtime + + diagnostic_msgs + game_controller_hsl_interfaces + python3-construct + rclpy + std_msgs + + + ament_python + + diff --git a/src/lib/game_controller_hsl/game_controller_hsl/resource/game_controller_hsl b/src/lib/game_controller_hsl/game_controller_hsl/resource/game_controller_hsl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/lib/game_controller_hsl/game_controller_hsl/scripts/sim_gamestate.py b/src/lib/game_controller_hsl/game_controller_hsl/scripts/sim_gamestate.py new file mode 100755 index 0000000000..96e6daa377 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/scripts/sim_gamestate.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python3 + +# This script was based on the teleop_twist_keyboard package +# original code can be found at https://github.com/ros-teleop/teleop_twist_keyboard +# The script provides a simple mechanism to test robot behavior in different game states, +# when no game controller is running + +import sys +import select +import termios +import tty + +import rclpy +from rclpy.node import Node +from rclpy.qos import QoSProfile, DurabilityPolicy + +from game_controller_hsl_interfaces.msg import GameState +from game_controller_hsl.utils import get_parameters_from_other_node + + +class SimGamestate(Node): + msg = """Setting the GameState by entering a number: + +0: STATE_INITIAL = 0 +1: STATE_READY = 1 +2: STATE_SET = 2 +3: STATE_PLAYING =3 +4: STATE_FINISHED = 4 + +5: COMPETITION_TYPE_SMALL = 0 +6: COMPETITION_TYPE_MIDDLE = 1 +7: COMPETITION_TYPE_LARGE = 3 + +Set the game phase by entering: +a: GAME_PHASE_TIMEOUT = 0 +b: GAME_PHASE_NORMAL = 1 +c: GAME_PHASE_EXTRA_TIME = 2 +d: GAME_PHASE_PENALTY_SHOOT_OUT = 3 + +Set play states by entering: +e: SET_PLAY_NONE = 0 +f: SET_PLAY_DIRECT_FREE_KICK = 1 +g: SET_PLAY_INDIRECT_FREE_KICK = 2 +h: SET_PLAY_PENALTY_KICK = 3 +i: SET_PLAY_THROW_IN = 4 +j: SET_PLAY_GOAL_KICK = 5 +k: SET_PLAY_CORNER_KICK = 6 + +p: toggle penalized +t: toggle kicking team +s: toggle stopped state ++: increase own score by 1 + + + + + + + + + + + + + + + + + +CTRL-C to quit +""" + + def __init__(self): + super().__init__("sim_gamestate") + self.logger = self.get_logger() + + # Try fetching team id from parameter blackboard or ask user for input + try: + self.team_id = get_parameters_from_other_node(self, "parameter_blackboard", ["team_id"])["team_id"] + except KeyError: + self.logger.error("No team id found in parameter blackboard") + self.team_id = int(input("Please enter team id: ")) + + self.has_kick_off = True + + self.settings = termios.tcgetattr(sys.stdin) + + self.publisher = self.create_publisher( + GameState, + "gamestate", + QoSProfile(durability=DurabilityPolicy.TRANSIENT_LOCAL, depth=1), + ) + + def loop(self): + game_state_msg = GameState() + game_state_msg.header.stamp = self.get_clock().now().to_msg() + + # Init kicking team to our teamID + game_state_msg.kicking_team = self.team_id + + try: + print(self.msg) + while True: + key = self.get_key() + if key == "\x03": + break + elif key in ["0", "1", "2", "3", "4"]: + int_key = int(key) + game_state_msg.main_state = int_key + elif key in ["5", "6", "7"]: + int_key = int(key) + game_state_msg.competition_type = int_key - 5 + elif key == "p": # penalize / unpenalize + game_state_msg.penalized = not game_state_msg.penalized + elif key in [chr(ord("a") + x) for x in range(4)]: + game_state_msg.game_phase = ord(key) - ord("a") + elif key in [chr(ord("e") + x) for x in range(7)]: + game_state_msg.set_play = ord(key) - ord("e") + elif key == "t": + if game_state_msg.kicking_team == self.team_id: + game_state_msg.kicking_team = self.team_id + 1 + else: + game_state_msg.kicking_team = self.team_id + elif key == "s": + game_state_msg.stopped = not game_state_msg.stopped + elif key == "+": + game_state_msg.own_score += 1 + + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + sys.stdout.write("\x1b[A") + self.publisher.publish(game_state_msg) + print( + f""" + +Competition Type: {game_state_msg.competition_type} +Game Phase: {game_state_msg.game_phase} +Set Play: {game_state_msg.set_play} +Main State: {game_state_msg.main_state} + +Kicking Team: {game_state_msg.kicking_team} + +Penalized: {game_state_msg.penalized} +Stopped: {game_state_msg.stopped} + +Goals(Own : Rival): {game_state_msg.own_score} : {game_state_msg.rival_score} + +CTRL-C to quit +""" + ) + + except Exception as e: + print(e) + + finally: + print() + + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.settings) + + def get_key(self): + tty.setraw(sys.stdin.fileno()) + select.select([sys.stdin], [], [], 0) + return_key = sys.stdin.read(1) + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.settings) + return return_key + + +if __name__ == "__main__": + rclpy.init(args=None) + node = SimGamestate() + node.loop() + node.destroy_node() + rclpy.shutdown() diff --git a/src/lib/game_controller_hsl/game_controller_hsl/setup.cfg b/src/lib/game_controller_hsl/game_controller_hsl/setup.cfg new file mode 100644 index 0000000000..2fbfb2ad13 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/game_controller_hsl +[install] +install_scripts=$base/lib/game_controller_hsl diff --git a/src/lib/game_controller_hsl/game_controller_hsl/setup.py b/src/lib/game_controller_hsl/game_controller_hsl/setup.py new file mode 100644 index 0000000000..80ee92fd3a --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl/setup.py @@ -0,0 +1,34 @@ +import glob + +from setuptools import find_packages, setup + +package_name = 'game_controller_hsl' + +setup( + name=package_name, + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ('share/' + package_name + "/config", + glob.glob('config/*.yaml')), + ('share/' + package_name + '/launch', + glob.glob('launch/*.launch')), + ], + install_requires=[ + 'launch', + 'setuptools', + 'construct', + ], + scripts=['scripts/sim_gamestate.py'], + zip_safe=True, + keywords=['ROS'], + license='MIT', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + 'game_controller = game_controller_hsl.receiver:main', + ], + } +) diff --git a/src/lib/game_controller_hsl/game_controller_hsl_interfaces/.gitignore b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/.gitignore new file mode 100644 index 0000000000..1716c0f2fa --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/.gitignore @@ -0,0 +1,12 @@ +# auto-generated documentation +**/docs/_build +**/docs/_out +**/docs/cppapi +**/docs/pyapi + +.idea/* +*.pyc +.pyenv2/* +.pyenv3/* +.vscode/* + diff --git a/src/lib/game_controller_hsl/game_controller_hsl_interfaces/CMakeLists.txt b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/CMakeLists.txt new file mode 100644 index 0000000000..0f527ede72 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.5) +project(game_controller_hsl_interfaces) + +find_package(ament_cmake REQUIRED) +find_package(ament_lint_auto REQUIRED) +find_package(rosidl_default_generators REQUIRED) +find_package(std_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() +endif() + +rosidl_generate_interfaces(${PROJECT_NAME} + "msg/GameState.msg" + "msg/PlayerStatusPose.msg" + DEPENDENCIES + std_msgs + geometry_msgs +) + +ament_package() diff --git a/src/lib/game_controller_hsl/game_controller_hsl_interfaces/msg/GameState.msg b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/msg/GameState.msg new file mode 100644 index 0000000000..a98eb004b0 --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/msg/GameState.msg @@ -0,0 +1,73 @@ +# This message provides all information from the game controller +# for additional information see documentation of the game controller +# https://github.com/bhuman/GameController + + +std_msgs/Header header + +uint8 players_per_team + +uint8 COMPETITION_TYPE_SMALL = 0 +uint8 COMPETITION_TYPE_MIDDLE = 1 +uint8 COMPETITION_TYPE_LARGE = 2 +uint8 competition_type + +uint8 GAME_PHASE_NORMAL = 0 +uint8 GAME_PHASE_PENALTY_SHOOT_OUT = 1 +uint8 GAME_PHASE_EXTRA_TIME = 2 +uint8 GAME_PHASE_TIMEOUT = 3 +uint8 game_phase + +uint8 STATE_INITIAL = 0 +uint8 STATE_READY = 1 +uint8 STATE_SET = 2 +uint8 STATE_PLAYING = 3 +uint8 STATE_FINISHED = 4 +uint8 main_state + +uint8 SET_PLAY_NONE = 0 +uint8 SET_PLAY_DIRECT_FREE_KICK = 1 +uint8 SET_PLAY_INDIRECT_FREE_KICK = 2 +uint8 SET_PLAY_PENALTY_KICK = 3 +uint8 SET_PLAY_THROW_IN = 4 +uint8 SET_PLAY_GOAL_KICK = 5 +uint8 SET_PLAY_CORNER_KICK = 6 +uint8 set_play + +uint8 kicking_team +bool first_half +bool stopped +uint8 own_score +uint8 rival_score + +# Seconds remaining for the game half +int16 secs_remaining +# Seconds remaining for things like kickoff +int16 secondary_time +bool penalized +uint16 seconds_till_unpenalized +uint8 warnings +uint8 cautions + +uint8 TEAM_BLUE = 0 +uint8 TEAM_RED = 1 +uint8 TEAM_YELLOW = 2 +uint8 TEAM_BLACK = 3 +uint8 TEAM_WHITE = 4 +uint8 TEAM_GREEN = 5 +uint8 TEAM_ORANGE = 6 +uint8 TEAM_PURPLE = 7 +uint8 TEAM_BROWN = 8 +uint8 TEAM_GRAY = 9 +uint8 own_player_color +uint8 own_goalie_color +uint8 rival_player_color +uint8 rival_goalie_color + +# The number of the current penalty shot during penalty shootout +uint8 penalty_shot +# a binary pattern indicating the successful penalty shots (1 for successful, 0 for unsuccessful) +uint16 single_shots + +uint8 message_budget +bool[] team_mates_with_penalty diff --git a/src/lib/game_controller_hsl/game_controller_hsl_interfaces/msg/PlayerStatusPose.msg b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/msg/PlayerStatusPose.msg new file mode 100644 index 0000000000..f2f6f218ad --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/msg/PlayerStatusPose.msg @@ -0,0 +1,22 @@ +# This Pose message is based on the following field coordinate system: +# +# y +# ^ ______________________ +# | M | | | O +# | Y |_ -x, y | x, y _| P +# | G | | | | | P +# 0 + O | | ( ) | | G +# | A |_| | |_| O +# | L | -x,-y | x,-y | A +# | |__________|__________| L +# | +# +------------------+--------------> x +# 0 +# +# 0,0 is the center of the filed and we expect (x, y, theta) with theta +# being the euler angle in radians, 0 along the +x axis, +# increasing counter clockwise + +std_msgs/Header header + +float32[3] pose diff --git a/src/lib/game_controller_hsl/game_controller_hsl_interfaces/package.xml b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/package.xml new file mode 100644 index 0000000000..07ee19e59b --- /dev/null +++ b/src/lib/game_controller_hsl/game_controller_hsl_interfaces/package.xml @@ -0,0 +1,28 @@ + + + + game_controller_hsl_interfaces + 0.0.1 + RoboCup Humanoid League Game Controller Messages + + Florian Vahl + Hamburg Bit-Bots + + Apache License 2.0 + + Marc Bestmann + + ament_cmake + rosidl_default_generators + + std_msgs + ament_lint_auto + + rosidl_default_generators + rosidl_default_runtime + rosidl_interface_packages + + + ament_cmake + +