diff --git a/.gitignore b/.gitignore index 25770c7..8682600 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ docs/site/ # environment. Manifest*.toml !scripts/render_env/Manifest.toml +!scripts/Benchmarking/Manifest.toml # File generated by the Preferences package to store local preferences LocalPreferences.toml diff --git a/Project.toml b/Project.toml index dc40b51..c6fb26c 100644 --- a/Project.toml +++ b/Project.toml @@ -24,5 +24,5 @@ FlexiChains = "0.3" LinearAlgebra = "1.10" PDMats = "0.11" Random = "1.10" -Turing = "0.40" +Turing = "0.40, 0.41, 0.42" julia = "1.10" diff --git a/scripts/Benchmarking/.CondaPkg/.gitattributes b/scripts/Benchmarking/.CondaPkg/.gitattributes new file mode 100644 index 0000000..887a2c1 --- /dev/null +++ b/scripts/Benchmarking/.CondaPkg/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting & preventing 3-way merges +pixi.lock merge=binary linguist-language=YAML linguist-generated=true diff --git a/scripts/Benchmarking/.CondaPkg/.gitignore b/scripts/Benchmarking/.CondaPkg/.gitignore new file mode 100644 index 0000000..740bb7d --- /dev/null +++ b/scripts/Benchmarking/.CondaPkg/.gitignore @@ -0,0 +1,4 @@ + +# pixi environments +.pixi +*.egg-info diff --git a/scripts/Benchmarking/.CondaPkg/pixi.lock b/scripts/Benchmarking/.CondaPkg/pixi.lock new file mode 100644 index 0000000..dc28703 --- /dev/null +++ b/scripts/Benchmarking/.CondaPkg/pixi.lock @@ -0,0 +1,3197 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.0.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.0.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.0.0-pyh5442c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.0.0-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2 + - 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/noarch/bambi-0.15.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-2.139-blis.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-39_hdec4247_blis.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/blis-0.9.0-h4ab18f5_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_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/noarch/cachetools-7.0.5-pyhd8ed1ab_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/cloudpickle-3.1.2-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-13.4.0-h109b0d3_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.7-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.2-py313h33d0bda_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-h166bdaf_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.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.58.5-py313h8060acc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/formulae-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.4.0-h0dff253_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.84.2-h4833e2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-13.1.0-hcae58fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.43-h0c6a113_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.4.0-h76987e4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.2.1-h3beb420_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.6.0-cpu_py313h8f0a827_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.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.8-py313h33d0bda_1.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/lcms2-2.17-h717163a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.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/libabseil-20250127.1-cxx17_hbbce691_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-39_h91f140b_blis.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-39_h3c44731_blis.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.7-default_h1df26ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.7-default_he06ed0a_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/libdeflate-1.24-h86f0d12_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-13.4.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.4.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h6f5c62b_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-13.4.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.4.0-hd358419_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.2-h3618099_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.4.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-12_hd37a5e2_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-12_hce4cc19_netlib.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.7-he9d0ab4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.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/libopengl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h943b412_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-he92a37e_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.2-h2f26a44_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-13.4.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.4.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hf01ce69_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_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/libxkbcommon-1.10.0-h65c71a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.0-h4922eb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.7-pyhd8ed1ab_0.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/matplotlib-3.10.3-py313h78bf25f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.3-py313h129903b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.5.2-py313hae39701_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py313ha87cce1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.1-py313h17eae1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.1-h7b32b05_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.0-py313ha87cce1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py313h8db990d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.2-h29eaf8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.24.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py313h7dabd7a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.31.6-py313ha6381f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.31.6-np2py313hfea535a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.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-graphviz-0.21-pyhbacfb6d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.1.post1-pyhcf101f3_0.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/qt6-main-6.9.1-h0384650_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.0-py313h86fcf2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_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/sysroot_linux-64-2.17-h0157908_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.1-py313h536fd9c_0.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/wayland-1.24.0-h3e06ad9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - 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.45-hb9d3cd8_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.12-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.5-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.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/zstd-1.5.7-hb78ec9c_6.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: c0cddb66070dd6355311f7667ce2acccf70d1013edaa6e97f22859502fefdb22 + md5: 887b70e1d607fba7957aa02f9ee0d939 + depends: + - llvm-openmp >=9.0.1 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 8244 + timestamp: 1764092331208 +- conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda + sha256: a362b4f5c96a0bf4def96be1a77317e2730af38915eb9bec85e2a92836501ed7 + md5: b3f0179590f3c0637b7eb5309898f79e + depends: + - __unix + - hicolor-icon-theme + - librsvg + license: LGPL-3.0-or-later OR CC-BY-SA-3.0 + license_family: LGPL + size: 631452 + timestamp: 1758743294412 +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda + sha256: b9214bc17e89bf2b691fad50d952b7f029f6148f4ac4fe7c60c08f093efdf745 + md5: 76df83c2a9035c54df5d04ff81bcc02d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + license_family: GPL + size: 566531 + timestamp: 1744668655747 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-1.0.0-pyhc364b38_0.conda + sha256: a23a874173bd8006396fe6e8d5a94a88210652fda022836f7819acdc0f735b0a + md5: f443320529c68a2c730d9b52ec70aa4a + depends: + - python >=3.12 + - arviz-base >=1.0.0,<1.1.0 + - arviz-stats >=1.0.0,<1.1.0 + - arviz-plots >=1.0.0,<1.1.0 + - matplotlib >=3.9 + - python + license: Apache-2.0 + license_family: APACHE + size: 20091 + timestamp: 1773850004502 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-base-1.0.0-pyhd8ed1ab_0.conda + sha256: 654fae10a2cd0618d52b414b7db9938944d7802f007a8ec6eacc5713462a248f + md5: b409caab0b67edbaedf0350fb6437ff8 + depends: + - numpy >=2 + - python >=3.12 + - typing_extensions >=3.10 + - xarray >=2024.11.0 + license: Apache-2.0 + license_family: Apache + size: 1375527 + timestamp: 1772461322923 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-plots-1.0.0-pyhc364b38_0.conda + sha256: e0834eac1c0d2c073e6b9ecc6cd1485add53b9cb349e55c23e1b6e5cf6aa70c6 + md5: 6e3808d41a8db413122c13e92869527d + depends: + - python >=3.12 + - arviz-base >=1.0.0,<1.1.0 + - arviz-stats >=1.0.0,<1.1.0 + - python + license: Apache-2.0 + license_family: APACHE + size: 130116 + timestamp: 1773827817751 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-1.0.0-pyh5442c79_0.conda + sha256: b2e594c52ce95e4e77ce19882663889c665a8f39ae6db037947773637c2bc075 + md5: d134120c02d781eb01f14570426e0c54 + depends: + - python >=3.12 + - arviz-stats-core ==1.0.0 pyhc364b38_0 + - arviz-base >=1.0.0,<1.1.0 + - xarray-einstats + - xarray >=2024.11.0 + - python + license: Apache-2.0 + license_family: APACHE + size: 136583 + timestamp: 1773747716818 +- conda: https://conda.anaconda.org/conda-forge/noarch/arviz-stats-core-1.0.0-pyhc364b38_0.conda + sha256: e35092a9e99bcb52784723e07116cab83ae361812cf95004cdc1f499480b7fd7 + md5: 6dbde5213451b7b721a58909e296ac70 + depends: + - python >=3.12 + - numpy >=2 + - scipy >=1.13 + - python + license: Apache-2.0 + license_family: APACHE + size: 136507 + timestamp: 1773747716818 +- conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 + sha256: 26ab9386e80bf196e51ebe005da77d57decf6d989b4f34d96130560bc133479c + md5: 6b889f174df1e0f816276ae69281af4d + depends: + - at-spi2-core >=2.40.0,<2.41.0a0 + - atk-1.0 >=2.36.0 + - dbus >=1.13.6,<2.0a0 + - libgcc-ng >=9.3.0 + - libglib >=2.68.1,<3.0a0 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + license_family: LGPL + size: 339899 + timestamp: 1619122953439 +- conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2 + sha256: c4f9b66bd94c40d8f1ce1fad2d8b46534bdefda0c86e3337b28f6c25779f258d + md5: 8cb2fc4cd6cc63f1369cfa318f581cc3 + depends: + - dbus >=1.13.6,<2.0a0 + - libgcc-ng >=9.3.0 + - libglib >=2.68.3,<3.0a0 + - xorg-libx11 + - xorg-libxi + - xorg-libxtst + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + license_family: LGPL + size: 658390 + timestamp: 1625848454791 +- conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda + sha256: df682395d05050cd1222740a42a551281210726a67447e5258968dd55854302e + md5: f730d54ba9cd543666d7220c9f7ed563 + depends: + - libgcc-ng >=12 + - libglib >=2.80.0,<3.0a0 + - libstdcxx-ng >=12 + constrains: + - atk-1.0 2.38.0 + arch: x86_64 + platform: linux + license: LGPL-2.0-or-later + license_family: LGPL + size: 355900 + timestamp: 1713896169874 +- conda: https://conda.anaconda.org/conda-forge/noarch/bambi-0.15.0-pyhd8ed1ab_0.conda + sha256: 4739559782aeeff15e990b2be0a662d60b9947e163d290ce30110c061d621a84 + md5: 46301e2722f2cd1f17f51588fff5c2a6 + depends: + - arviz >=0.12.0 + - formulae >=0.5.3 + - numpy >1.22 + - pandas >=1.0.0 + - pymc >=5.18.0 + - pytensor >=2.12.3 + - python >=3.10 + - python-graphviz + - scipy >=1.7.0 + - setuptools >47.1.0 + license: MIT + license_family: MIT + size: 86615 + timestamp: 1734959534579 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + sha256: 0a7d405064f53b9d91d92515f1460f7906ee5e8523f3cd8973430e81219f4917 + md5: 8165352fdce2d2025bf884dc0ee85700 + depends: + - ld_impl_linux-64 2.45.1 default_hbd61a6d_102 + - sysroot_linux-64 + - zstd >=1.5.7,<1.6.0a0 + arch: x86_64 + platform: linux + license: GPL-3.0-only + size: 3661455 + timestamp: 1774197460085 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda + sha256: 78a58d523d072b7f8e591b8f8572822e044b31764ed7e8d170392e7bc6d58339 + md5: 2a307a17309d358c9b42afdd3199ddcc + depends: + - binutils_impl_linux-64 2.45.1 default_hfdba357_102 + arch: x86_64 + platform: linux + license: GPL-3.0-only + size: 36304 + timestamp: 1774197485247 +- conda: https://conda.anaconda.org/conda-forge/linux-64/blas-2.139-blis.conda + build_number: 39 + sha256: eb062025cc724a2071c1e3d1b369a1c5dee167be6f99676d1df52cb41fbe905a + md5: 9e1e7138f9aaf95be8c83608d248dc6f + depends: + - blas-devel 3.9.0 39*_blis + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 17437 + timestamp: 1763189507286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-39_hdec4247_blis.conda + build_number: 39 + sha256: 9a65dac01cc1a52723a6590a4a31486cb4e68b2c12133791923801eafd9791f0 + md5: e5d43240309fa5bceb1323209043c05c + depends: + - blis 0.9.0.* + - libblas 3.9.0 39_h91f140b_blis + - libcblas 3.9.0 39_h3c44731_blis + - liblapack 3.9.0 *_netlib + - liblapacke 3.9.0 *_netlib + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 17180 + timestamp: 1763189417006 +- conda: https://conda.anaconda.org/conda-forge/linux-64/blis-0.9.0-h4ab18f5_2.conda + sha256: 3e501cbf98ccb69210e6145d38295dc14ca11417e9c86fec988f06adea8456fd + md5: 6f77ba1352b69c4a6f8a6d20def30e4e + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 3547115 + timestamp: 1713877874618 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda + sha256: c969baaa5d7a21afb5ed4b8dd830f82b78e425caaa13d717766ed07a61630bec + md5: 5d08a0ac29e6a5a984817584775d4131 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.1.0 hb9d3cd8_3 + - libbrotlidec 1.1.0 hb9d3cd8_3 + - libbrotlienc 1.1.0 hb9d3cd8_3 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 19810 + timestamp: 1749230148642 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda + sha256: ab74fa8c3d1ca0a055226be89e99d6798c65053e2d2d3c6cb380c574972cd4a7 + md5: 58178ef8ba927229fba6d84abf62c108 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.1.0 hb9d3cd8_3 + - libbrotlienc 1.1.0 hb9d3cd8_3 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 19390 + timestamp: 1749230137037 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 252783 + timestamp: 1720974456583 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda + sha256: f8003bef369f57396593ccd03d08a8e21966157269426f71e943f96e4b579aeb + md5: f7f0d6cc2dc986d42ac2689ec88192be + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 206884 + timestamp: 1744127994291 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc + md5: 4492fd26db29495f0ba23f146cd5638d + depends: + - __unix + license: ISC + size: 147413 + timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-7.0.5-pyhd8ed1ab_0.conda + sha256: edfecb626da69607f926f51ad0d24942bfe9f7a29391d55d4ac62403e878605b + md5: a66a1542c3ed584ca4fdb23955d81e91 + depends: + - python >=3.10 + license: MIT + license_family: MIT + size: 19034 + timestamp: 1773120473852 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + sha256: 3bd6a391ad60e471de76c0e9db34986c4b5058587fbf2efa5a7f54645e28c2c7 + md5: 09262e66b19567aff4f592fb53b28760 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=75.1,<76.0a0 + - libexpat >=2.6.4,<3.0a0 + - libgcc >=13 + - libglib >=2.82.2,<3.0a0 + - libpng >=1.6.47,<1.7.0a0 + - libstdcxx >=13 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.44.2,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.5,<2.0a0 + - xorg-libx11 >=1.8.11,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + arch: x86_64 + platform: linux + license: LGPL-2.1-only or MPL-1.1 + size: 978114 + timestamp: 1741554591855 +- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda + sha256: 4c287c2721d8a34c94928be8fe0e9a85754e90189dd4384a31b1806856b50a67 + md5: 61b8078a0905b12529abc622406cb62c + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + size: 27353 + timestamp: 1765303462831 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-13.4.0-h109b0d3_18.conda + sha256: c941e26b0898c85e5b4fdbc08d55f5b57d30a7008fcabe3a701f9ba008b79e45 + md5: fa7ecb1bad14085f74246ebcca368fec + depends: + - gcc_impl_linux-64 >=13.4.0,<13.4.1.0a0 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 31538 + timestamp: 1771377555764 +- conda: https://conda.anaconda.org/conda-forge/noarch/cons-0.4.7-pyhd8ed1ab_2.conda + sha256: 2edb605f79d96a2e05bc86bd153c6f03239981f68b25e129429640ebaf316d3b + md5: 31b1db820db9a562fb374ed9339d844c + depends: + - logical-unification >=0.4.0 + - python >=3.9 + license: LGPL-3.0-only + license_family: LGPL + size: 14816 + timestamp: 1752393486187 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.2-py313h33d0bda_0.conda + sha256: 8e6e7c9644fa4841909f46b8136b6fad540c9c7b2688bfc15e8f9ce5eef0aabe + md5: 5dc81fffe102f63045225007a33d6199 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.23 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 278576 + timestamp: 1744743243839 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + size: 14778 + timestamp: 1764466758386 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda + sha256: ee09ad7610c12c7008262d713416d0b58bf365bc38584dce48950025850bdf3f + md5: cae723309a49399d2949362f4ab5c9e4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.0,<4.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause-Attribution + license_family: BSD + size: 209774 + timestamp: 1750239039316 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda + sha256: 3b988146a50e165f0fa4e839545c679af88e4782ec284cc7b6d07dd226d6a068 + md5: 679616eb5ad4e521c83da4650860aba7 + depends: + - libstdcxx >=13 + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libexpat >=2.7.0,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.84.2,<3.0a0 + arch: x86_64 + platform: linux + license: GPL-2.0-or-later + license_family: GPL + size: 437860 + timestamp: 1747855126005 +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda + sha256: 1bcc132fbcc13f9ad69da7aa87f60ea41de7ed4d09f3a00ff6e0e70e1c690bc2 + md5: bfd56492d8346d669010eccafe0ba058 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 69544 + timestamp: 1739569648873 +- conda: https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-h166bdaf_1.tar.bz2 + sha256: 1e58ee2ed0f4699be202f23d49b9644b499836230da7dd5b2f63e6766acff89e + md5: a089d06164afd2d511347d3f87214e0b + depends: + - libgcc-ng >=10.3.0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 1440699 + timestamp: 1648505042260 +- conda: https://conda.anaconda.org/conda-forge/noarch/etuples-0.3.10-pyhd8ed1ab_1.conda + sha256: 92b79c5f79eefcee3dc604a96f5546f52bb65329eea043ccb541b692956c8fb5 + md5: 315e9d823f7763da48e072e59bfd0e8e + depends: + - cons + - multipledispatch + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 18084 + timestamp: 1752608449672 +- 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 + size: 25845 + timestamp: 1773314012590 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + sha256: 7093aa19d6df5ccb6ca50329ef8510c6acb6b0d8001191909397368b65b02113 + md5: 8f5b0b297b59e1ac160ad4beec99dbee + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - libexpat >=2.6.3,<3.0a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 265599 + timestamp: 1730283881107 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + size: 4059 + timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.58.5-py313h8060acc_0.conda + sha256: 30a61fd3c6aa8b38a0ef123b893daa4cb3bcee3c9d6386f583bab79fc2bdbe43 + md5: c078f338a3e09800a3b621b1942ba5b5 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli + - libgcc >=13 + - munkres + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 2852512 + timestamp: 1751573485242 +- conda: https://conda.anaconda.org/conda-forge/noarch/formulae-0.6.2-pyhd8ed1ab_0.conda + sha256: 7cde6877045cf03b6cfd39238ecdcd4072dfb45d743140237c21e4fa0c942fe2 + md5: 6a991241077b421e7cd632ddd0981cc2 + depends: + - numpy >=1.16 + - packaging + - pandas >=1.0.0 + - python >=3.10 + - scipy >=1.5.4 + license: MIT + license_family: MIT + size: 48655 + timestamp: 1770399957184 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda + sha256: 7ef7d477c43c12a5b4cddcf048a83277414512d1116aba62ebadfa7056a7d84f + md5: 9ccd736d31e0c6e41f54e704e5312811 + depends: + - libfreetype 2.13.3 ha770c72_1 + - libfreetype6 2.13.3 h48d6fc4_1 + arch: x86_64 + platform: linux + license: GPL-2.0-only OR FTL + size: 172450 + timestamp: 1745369996765 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 + sha256: 5d7b6c0ee7743ba41399e9e05a58ccc1cfc903942e49ff6f677f6e423ea7a627 + md5: ac7bc6a654f8f41b352b38f4051135f8 + depends: + - libgcc-ng >=7.5.0 + arch: x86_64 + platform: linux + license: LGPL-2.1 + size: 114383 + timestamp: 1604416621168 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-13.4.0-h0dff253_18.conda + sha256: 3eaad231033739335f2b0dfebd000b2203891f198082d774a6fe8f3cbef6a81c + md5: 39a519bbdc9c56d4790d7f15f2da4cd7 + depends: + - conda-gcc-specs + - gcc_impl_linux-64 13.4.0 he2fa53e_18 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 29388 + timestamp: 1771377704762 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + sha256: a72fc88869a522547c33aa80f8e9ab9a925636f074c3688be561b36a30504dd0 + md5: 1a034b3bff9d06e2858ad7afbc3089f4 + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=13.4.0 + - libgcc-devel_linux-64 13.4.0 hd1d28cc_118 + - libgomp >=13.4.0 + - libsanitizer 13.4.0 h2a15e64_18 + - libstdcxx >=13.4.0 + - libstdcxx-devel_linux-64 13.4.0 h6963c3b_118 + - sysroot_linux-64 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 70043430 + timestamp: 1771377466052 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda + sha256: 52679edb80e5dc0ad4eeedb55170fc39b2fb44850b613f18474ab69a7d5f1161 + md5: b3d6552b131695f0104a81e56f09af08 + depends: + - gcc_impl_linux-64 13.4.0.* + - binutils_linux-64 + - sysroot_linux-64 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 28950 + timestamp: 1770908248344 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda + sha256: d5283b95a8d49dcd88d29b360d8b38694aaa905d968d156d72ab71d32b38facb + md5: 201db6c2d9a3c5e46573ac4cb2e92f4f + depends: + - libgcc-ng >=12 + - libglib >=2.80.2,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + license_family: LGPL + size: 528149 + timestamp: 1715782983957 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.84.2-h4833e2c_0.conda + sha256: eee7655422577df78386513322ea2aa691e7638947584faa715a20488ef6cc4e + md5: f2ec1facec64147850b7674633978050 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libglib 2.84.2 h3618099_0 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 116819 + timestamp: 1747836718327 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-h5888daf_0.conda + sha256: cac69f3ff7756912bbed4c28363de94f545856b35033c0b86193366b95f5317d + md5: 951ff8d9e5536896408e89d63230b8d5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: LGPL-2.0-or-later + license_family: LGPL + size: 98419 + timestamp: 1750079957535 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-13.1.0-hcae58fd_0.conda + sha256: 692f544be3868c590b4db177d39c552e3eeb1631f66a10f5b27982a0e1b0c984 + md5: aa7e2fbfb1f5878d6cee930c43af2200 + depends: + - __glibc >=2.17,<3.0.a0 + - adwaita-icon-theme + - cairo >=1.18.4,<2.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.42.12,<3.0a0 + - gtk3 >=3.24.43,<4.0a0 + - gts >=0.7.6,<0.8.0a0 + - libexpat >=2.7.0,<3.0a0 + - libgcc >=13 + - libgd >=2.3.3,<2.4.0a0 + - libglib >=2.84.2,<3.0a0 + - librsvg >=2.58.4,<3.0a0 + - libstdcxx >=13 + - libwebp-base >=1.5.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.56.4,<2.0a0 + arch: x86_64 + platform: linux + license: EPL-1.0 + license_family: Other + size: 2426873 + timestamp: 1751389810326 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.43-h0c6a113_5.conda + sha256: d36263cbcbce34ec463ce92bd72efa198b55d987959eab6210cc256a0e79573b + md5: 67d00e9cfe751cfe581726c5eff7c184 + depends: + - __glibc >=2.17,<3.0.a0 + - at-spi2-atk >=2.38.0,<3.0a0 + - atk-1.0 >=2.38.0 + - cairo >=1.18.4,<2.0a0 + - epoxy >=1.5.10,<1.6.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.10,<2.0a0 + - gdk-pixbuf >=2.42.12,<3.0a0 + - glib-tools + - harfbuzz >=11.0.0,<12.0a0 + - hicolor-icon-theme + - libcups >=2.3.3,<2.4.0a0 + - libcups >=2.3.3,<3.0a0 + - libexpat >=2.6.4,<3.0a0 + - libgcc >=13 + - libglib >=2.84.0,<3.0a0 + - liblzma >=5.6.4,<6.0a0 + - libxkbcommon >=1.8.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.56.3,<2.0a0 + - wayland >=1.23.1,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxcomposite >=0.4.6,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxi >=1.8.2,<2.0a0 + - xorg-libxinerama >=1.1.5,<1.2.0a0 + - xorg-libxrandr >=1.5.4,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + arch: x86_64 + platform: linux + license: LGPL-2.0-or-later + license_family: LGPL + size: 5585389 + timestamp: 1743405684985 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda + sha256: b5cd16262fefb836f69dc26d879b6508d29f8a5c5948a966c47fe99e2e19c99b + md5: 4d8df0b0db060d33c9a702ada998a8fe + depends: + - libgcc-ng >=12 + - libglib >=2.76.3,<3.0a0 + - libstdcxx-ng >=12 + arch: x86_64 + platform: linux + license: LGPL-2.0-or-later + license_family: LGPL + size: 318312 + timestamp: 1686545244763 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-13.4.0-h76987e4_18.conda + sha256: 8c876de9409991e197eb6d723fc502a88012f60da38612166c403794392edc74 + md5: 7713811d62bfe17c9ba66136ce9abd01 + depends: + - gcc 13.4.0 h0dff253_18 + - gxx_impl_linux-64 13.4.0 h6a38259_18 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 28838 + timestamp: 1771377738188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + sha256: 95676e274926fe9081205661db1a87169d9cf487bdb17072a63c1d907dfe7f8f + md5: 39904d74f923c52a10700e5804920932 + depends: + - gcc_impl_linux-64 13.4.0 he2fa53e_18 + - libstdcxx-devel_linux-64 13.4.0 h6963c3b_118 + - sysroot_linux-64 + - tzdata + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 13997423 + timestamp: 1771377656949 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda + sha256: 39ba0fbe004490fe9efcfa360f092f272e4e89ff8246d04587d7c5218edc9e6e + md5: b3b53c1b7730cc5cb21994002fa6d768 + depends: + - gxx_impl_linux-64 13.4.0.* + - gcc_linux-64 ==13.4.0 h0a5b801_21 + - binutils_linux-64 + - sysroot_linux-64 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 27485 + timestamp: 1770908248348 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-11.2.1-h3beb420_0.conda + sha256: 5bd0f3674808862838d6e2efc0b3075e561c34309c5c2f4c976f7f1f57c91112 + md5: 0e6e192d4b3d95708ad192d957cf3163 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - freetype + - graphite2 + - icu >=75.1,<76.0a0 + - libexpat >=2.7.0,<3.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libglib >=2.84.1,<3.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 1730226 + timestamp: 1747091044218 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda + sha256: 6d7e6e1286cb521059fe69696705100a03b006efb914ffe82a2ae97ecbae66b7 + md5: 129e404c5b001f3ef5581316971e3ea0 + arch: x86_64 + platform: linux + license: GPL-2.0-or-later + license_family: GPL + size: 17625 + timestamp: 1771539597968 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 + md5: 080594bf4493e6bae2607e65390c520a + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + size: 34387 + timestamp: 1773931568510 +- conda: https://conda.anaconda.org/conda-forge/noarch/jax-0.6.0-pyhd8ed1ab_0.conda + sha256: 573a5582dfba84a8f67c351b6218cb9579cb8d0f6d4b4186a806852111d4a6f1 + md5: bd364feb12c744cf5c60e1e5b586171b + depends: + - importlib-metadata >=4.6 + - jaxlib >=0.6.0,<=0.6.0 + - ml_dtypes >=0.5.0 + - numpy >=1.25 + - opt_einsum + - python >=3.10 + - scipy >=1.11.1 + constrains: + - cudnn >=9.8,<10.0 + license: Apache-2.0 + license_family: APACHE + size: 1538293 + timestamp: 1748688029463 +- conda: https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.6.0-cpu_py313h8f0a827_0.conda + sha256: bd6abb44e16ef94bad40a554ab6c23becca05093250d58f62f90c72cddddf5d6 + md5: a581353603f02b9c5b07da446b01b4b3 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=13 + - libgrpc >=1.71.0,<1.72.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - ml_dtypes >=0.2.0 + - numpy >=1.21,<3 + - openssl >=3.5.0,<4.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - scipy >=1.9 + constrains: + - jax >=0.6.0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 60644089 + timestamp: 1748673286014 +- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda + sha256: a922841ad80bd7b222502e65c07ecb67e4176c4fa5b03678a005f39fcc98be4b + md5: ad8527bf134a90e1c9ed35fa0b64318c + constrains: + - sysroot_linux-64 ==2.17 + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 + license_family: GPL + size: 943486 + timestamp: 1729794504440 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.8-py313h33d0bda_1.conda + sha256: 59099e42c46c08b0a59e179cc845ae9fb181316cc018d0fc58560370467af419 + md5: 6d8d806d9db877ace75ca67aa572bf84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 72112 + timestamp: 1751494043915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 1370023 + timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda + sha256: d6a61830a354da022eae93fa896d0991385a875c6bba53c82263a289deda9db8 + md5: 000e85703f0fd9594c81710dd5066471 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 248046 + timestamp: 1739160907615 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda + sha256: 412381a43d5ff9bbed82cd52a0bbca5b90623f62e41007c9c42d3870c60945ff + md5: 9344155d33912347b37f0ae6c410a835 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 264243 + timestamp: 1745264221534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250127.1-cxx17_hbbce691_0.conda + sha256: 65d5ca837c3ee67b9d769125c21dc857194d7f6181bb0e7bd98ae58597b457d0 + md5: 00290e549c5c8a32cc271020acc9ec6b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - abseil-cpp =20250127.1 + - libabseil-static =20250127.1=cxx17* + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1325007 + timestamp: 1742369558286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-39_h91f140b_blis.conda + build_number: 39 + sha256: 2b4a385edd7a7b17f64ed8592076aa5d70e4ed41a2cb3ce5e5a4296113021724 + md5: 98ed9181bd96e524785d28c55654dc84 + depends: + - blis >=0.9.0,<0.9.1.0a0 + constrains: + - mkl <2026 + - libcblas 3.9.0 39*_blis + - blas 2.139 blis + arch: x86_64 + platform: linux + track_features: + - blas_blis + - blas_blis_2 + license: BSD-3-Clause + license_family: BSD + size: 17506 + timestamp: 1763189402494 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda + sha256: 462a8ed6a7bb9c5af829ec4b90aab322f8bcd9d8987f793e6986ea873bbd05cf + md5: cb98af5db26e3f482bebb80ce9d947d3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 69233 + timestamp: 1749230099545 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda + sha256: 3eb27c1a589cbfd83731be7c3f19d6d679c7a444c3ba19db6ad8bf49172f3d83 + md5: 1c6eecffad553bde44c5238770cfb7da + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.1.0 hb9d3cd8_3 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 33148 + timestamp: 1749230111397 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda + sha256: 76e8492b0b0a0d222bfd6081cae30612aa9915e4309396fdca936528ccf314b7 + md5: 3facafe58f3858eb95527c7d3a3fc578 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.1.0 hb9d3cd8_3 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 282657 + timestamp: 1749230124839 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-39_h3c44731_blis.conda + build_number: 39 + sha256: 61be251bf2a7e29c886346807d555949be4f14d651e726caccb44cc6aed569d9 + md5: 76f8aa56374c04b9c80f5b11276c1081 + depends: + - libblas 3.9.0 39_h91f140b_blis + constrains: + - blas 2.139 blis + arch: x86_64 + platform: linux + track_features: + - blas_blis + license: BSD-3-Clause + license_family: BSD + size: 17490 + timestamp: 1763189409817 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.7-default_h1df26ce_0.conda + sha256: 4194c75a91a9c790cbe96c3c33fc2f388274d1be85ec884ce7c88d7e8f9d96f2 + md5: f9ef7bce54a7673cdbc2fadd8bca1956 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libllvm20 >=20.1.7,<20.2.0a0 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 20925717 + timestamp: 1749876303353 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-20.1.7-default_he06ed0a_0.conda + sha256: 6541d19a1659062dbf8823d6a1206e28f788369bcf7af9171d7c9069c1d35932 + md5: 846875a174de6b6ff19e205a7d90eb74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libllvm20 >=20.1.7,<20.2.0a0 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 12116245 + timestamp: 1749876520951 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda + sha256: cb83980c57e311783ee831832eb2c20ecb41e7dee6e86e8b70b8cef0e43eab55 + md5: d4a250da4737ee127fb1fa6452a9002e + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 4523621 + timestamp: 1749905341688 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda + sha256: 8420748ea1cc5f18ecc5068b4f24c7a023cc9b20971c99c824ba10641fb95ddf + md5: 64f0c503da58ec25ebd359e4d990afa8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 72573 + timestamp: 1747040452262 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda + sha256: f53458db897b93b4a81a6dbfd7915ed8fa4a54951f97c698dde6faa028aadfd2 + md5: 4c0ab57463117fbb8df85268415082f5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libpciaccess >=0.18,<0.19.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 246161 + timestamp: 1749904704373 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + sha256: 7fd5408d359d05a969133e47af580183fbf38e2235b562193d427bb9dad79723 + md5: c151d5eb730e9b7480e6d48c0fc44048 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + arch: x86_64 + platform: linux + license: LicenseRef-libglvnd + size: 44840 + timestamp: 1731330973553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.0-h5888daf_0.conda + sha256: 33ab03438aee65d6aa667cf7d90c91e5e7d734c19a67aa4c7040742c0a13d505 + md5: db0bfbe7dd197b68ad5f30333bae6ce0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.7.0.* + license: MIT + license_family: MIT + size: 74427 + timestamp: 1743431794976 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab + md5: ede4673863426c0883c0063d853bbd85 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 57433 + timestamp: 1743434498161 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda + sha256: 7be9b3dac469fe3c6146ff24398b685804dfc7a1de37607b84abd076f57cc115 + md5: 51f5be229d83ecd401fb369ab96ae669 + depends: + - libfreetype6 >=2.13.3 + arch: x86_64 + platform: linux + license: GPL-2.0-only OR FTL + size: 7693 + timestamp: 1745369988361 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda + sha256: 7759bd5c31efe5fbc36a7a1f8ca5244c2eabdbeb8fc1bee4b99cf989f35c7d81 + md5: 3c255be50a506c50765a93a6644f32fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libpng >=1.6.47,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - freetype >=2.13.3 + arch: x86_64 + platform: linux + license: GPL-2.0-only OR FTL + size: 380134 + timestamp: 1745369987697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-13.4.0-he0feb66_18.conda + sha256: bcac86c9572eaeeadd195b581de8e6d80d0ad8ef3f93bd92b3bdbc749df7f7e7 + md5: d58c699e1f2f7c970993cb5fb55e1176 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==13.4.0=*_18 + - libgomp 13.4.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 963844 + timestamp: 1771377326189 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + sha256: 2f4150691400ec130ffebca96f375224ed47e062f3ab4adecec4acd79463357b + md5: 1012081c5cc2806ba38bf580ca5aa3f5 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 2844236 + timestamp: 1771377215473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.4.0-h69a702a_18.conda + sha256: d99f2ffcda58d102499a34f49abca4c4141af1664700ce080389d17f0b2b3470 + md5: d8af48019e5caafa6833d2407cdc6c23 + depends: + - libgcc 13.4.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 27595 + timestamp: 1771377337906 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h6f5c62b_11.conda + sha256: 19e5be91445db119152217e8e8eec4fd0499d854acc7d8062044fb55a70971cd + md5: 68fc66282364981589ef36868b1a7c78 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=75.1,<76.0a0 + - libexpat >=2.6.4,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libpng >=1.6.45,<1.7.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: GD + license_family: BSD + size: 177082 + timestamp: 1737548051015 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-13.4.0-h69a702a_18.conda + sha256: ca3b27235017f7f61780a238e65ee1a037f9a6620498373f5bdf91acae5036aa + md5: c8300f67c6e500482d5f307d5ad63565 + depends: + - libgfortran5 13.4.0 hd358419_18 + constrains: + - libgfortran-ng ==13.4.0=*_18 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 27550 + timestamp: 1771377381328 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.4.0-hd358419_18.conda + sha256: ef8f64676c1024215b3ef16c9ca465d82afb82f615cc4612db87ece8f079bd71 + md5: 0f406de88b4f504f251ce6db5e7bc6c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13.4.0 + constrains: + - libgfortran 13.4.0 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 2288147 + timestamp: 1771377353553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d + md5: 928b8be80851f5d8ffb016f9c81dae7a + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - libglx 1.7.0 ha4b6fd6_2 + arch: x86_64 + platform: linux + license: LicenseRef-libglvnd + size: 134712 + timestamp: 1731330998354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.84.2-h3618099_0.conda + sha256: a6b5cf4d443044bc9a0293dd12ca2015f0ebe5edfdc9c4abdde0b9947f9eb7bd + md5: 072ab14a02164b7c0c089055368ff776 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=13 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.45,<10.46.0a0 + constrains: + - glib 2.84.2 *_0 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 3955066 + timestamp: 1747836671118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 + md5: 434ca7e50e40f4918ab701e3facd59a0 + depends: + - __glibc >=2.17,<3.0.a0 + arch: x86_64 + platform: linux + license: LicenseRef-libglvnd + size: 132463 + timestamp: 1731330968309 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + sha256: 2d35a679624a93ce5b3e9dd301fff92343db609b79f0363e6d0ceb3a6478bfa7 + md5: c8013e438185f33b13814c5c488acd5c + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - xorg-libx11 >=1.8.10,<2.0a0 + arch: x86_64 + platform: linux + license: LicenseRef-libglvnd + size: 75504 + timestamp: 1731330988898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.4.0-he0feb66_18.conda + sha256: 286dedfdbd1485803dbcfc74375f577d2f20c82a79336d634558a1846c8d2b22 + md5: 6283a076677d95a7dae5bc16e9484e20 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 566914 + timestamp: 1771377233364 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.71.0-h8e591d7_1.conda + sha256: 37267300b25f292a6024d7fd9331085fe4943897940263c3a41d6493283b2a18 + md5: c3cfd72cbb14113abee7bbd86f44ad69 + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.5,<2.0a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=13 + - libprotobuf >=5.29.3,<5.29.4.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.71.0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 7920187 + timestamp: 1745229332239 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.2-default_h0d58e46_1001.conda + sha256: d14c016482e1409ae1c50109a9ff933460a50940d2682e745ab1c172b5282a69 + md5: 804ca9e91bcaea0824a341d55b1684f2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libxml2 >=2.13.4,<2.14.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 2423200 + timestamp: 1731374922090 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h4ce23a2_1.conda + sha256: 18a4afe14f731bfb9cf388659994263904d20111e42f841e9eea1bb6f91f4ab4 + md5: e796ff8ddc598affdf7c173d6145f087 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: LGPL-2.1-only + size: 713084 + timestamp: 1740128065462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda + sha256: 98b399287e27768bf79d48faba8a99a2289748c65cd342ca21033fab1860d4a4 + md5: 9fa334557db9f63da6c9285fd2a48638 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - jpeg <0.0.0a + arch: x86_64 + platform: linux + license: IJG AND BSD-3-Clause AND Zlib + size: 628947 + timestamp: 1745268527144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-12_hd37a5e2_netlib.conda + build_number: 12 + sha256: 31e122ada73c23cb2c3bb75b66b6810dc8d22abfa3650b66de2f78fe03322e07 + md5: 4b181b55915cefcd35c8398c9274e629 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas 3.9.0.* + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + constrains: + - mkl <2025 + arch: x86_64 + platform: linux + track_features: + - blas_netlib + - blas_netlib_2 + license: BSD-3-Clause + license_family: BSD + size: 2780544 + timestamp: 1745846571197 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-12_hce4cc19_netlib.conda + build_number: 12 + sha256: 835845c91862d0c81d958e89060723e57ba25809335277ae4e2dcf07d3a80659 + md5: bdcf65db13abdddba7af29592f93600b + depends: + - __glibc >=2.17,<3.0.a0 + - libblas 3.9.0.* + - libcblas 3.9.0.* + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - liblapack 3.9.0.* + constrains: + - mkl <2025 + arch: x86_64 + platform: linux + track_features: + - blas_netlib + - blas_netlib_2 + license: BSD-3-Clause + license_family: BSD + size: 495776 + timestamp: 1745846582522 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.7-he9d0ab4_0.conda + sha256: 5c51416c10e84ac6a73560c82e20f99788b1395ce431c450391966d07a444fa6 + md5: 63f1accca4913e6b66a2d546c30ff4db + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libxml2 >=2.13.8,<2.14.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 43026762 + timestamp: 1749836200754 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 + md5: 1a580f7796c7bf6393fddb8bbbde58dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - xz 5.8.1.* + license: 0BSD + size: 112894 + timestamp: 1749230047870 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + sha256: 3aa92d4074d4063f2a162cd8ecb45dccac93e543e565c01a787e16a43501f7ee + md5: c7e925f37e3b40d893459e625f6a53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: BSD-2-Clause + license_family: BSD + size: 91183 + timestamp: 1748393666725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 + md5: 7c7927b404672409d9917d49bff5f2d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 33418 + timestamp: 1734670021371 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda + sha256: 215086c108d80349e96051ad14131b751d17af3ed2cb5a34edd62fa89bfe8ead + md5: 7df50d44d4a14d6c31a2c54f2cd92157 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + arch: x86_64 + platform: linux + license: LicenseRef-libglvnd + size: 50757 + timestamp: 1731330993524 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + sha256: 0bd91de9b447a2991e666f284ae8c722ffb1d84acb594dbd0c031bd656fa32b2 + md5: 70e3400cbbfa03e96dcde7fc13e38c7b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 28424 + timestamp: 1749901812541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.50-h943b412_0.conda + sha256: c7b212bdd3f9d5450c4bae565ccb9385222bf9bb92458c2a23be36ff1b981389 + md5: 51de14db340a848869e69c632b43cca7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: zlib-acknowledgement + size: 289215 + timestamp: 1751559366724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda + sha256: 2dbcef0db82e0e7b6895b6c0dadd3d36c607044c40290c7ca10656f3fca3166f + md5: 6458be24f09e1b034902ab44fe9de908 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - openldap >=2.6.9,<2.7.0a0 + - openssl >=3.5.0,<4.0a0 + arch: x86_64 + platform: linux + license: PostgreSQL + size: 2680582 + timestamp: 1746743259857 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.29.3-h501fc15_1.conda + sha256: 691af28446345674c6b3fb864d0e1a1574b6cc2f788e0f036d73a6b05dcf81cf + md5: edb86556cf4a0c133e7932a1597ff236 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 3358788 + timestamp: 1745159546868 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.06.26-hba17884_0.conda + sha256: 89535af669f63e0dc4ae75a5fc9abb69b724b35e0f2ca0304c3d9744a55c8310 + md5: f6881c04e6617ebba22d237c36f1b88e + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20250127.1,<20250128.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - re2 2025.06.26.* + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 211720 + timestamp: 1751053073521 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-he92a37e_3.conda + sha256: a45ef03e6e700cc6ac6c375e27904531cf8ade27eb3857e080537ff283fb0507 + md5: d27665b20bc4d074b86e628b3ba5ab8b + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - freetype >=2.13.3,<3.0a0 + - gdk-pixbuf >=2.42.12,<3.0a0 + - harfbuzz >=11.0.0,<12.0a0 + - libgcc >=13 + - libglib >=2.84.0,<3.0a0 + - libpng >=1.6.47,<1.7.0a0 + - libxml2 >=2.13.7,<2.14.0a0 + - pango >=1.56.3,<2.0a0 + constrains: + - __glibc >=2.17 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 6543651 + timestamp: 1743368725313 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + sha256: 019d5635f8b546e70886740a255f0ad92f777a990d504d7bb945539b16dbaee1 + md5: d4cccd80dee79958aa4581987d8f375d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13.4.0 + - libstdcxx >=13.4.0 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 6591860 + timestamp: 1771377400521 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.2-h2f26a44_1.conda + sha256: 20bbeb64a1b427832d5f29be5b0506a91462028fc492fe9958d02b2c135714d8 + md5: 3d7a6ff85f94535f9c524afd4533424f + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 925117 + timestamp: 1752070211965 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-13.4.0-h934c35e_18.conda + sha256: e8ad7f3a9bd25f750d395a80a06bf5577af73cce0d6bb99e8d559b5fabc6395b + md5: 1bcbd853c7b666bd145a30b94361be21 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 13.4.0 he0feb66_18 + constrains: + - libstdcxx-ng ==13.4.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 5680170 + timestamp: 1771377375220 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + sha256: 29477fff696ba73c22dbb958835d0c9d6d78bac8df8fabe29b9508c4ada3e6b3 + md5: 2aa85201a0eed4ea8eb47aed81e2cbbe + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 19902036 + timestamp: 1771377254135 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.4.0-hdf11a46_18.conda + sha256: de00d6bb3d1f3801dfd2333320ac38aed51b4a33a9f72145176b0465156b72d5 + md5: 92f07706a19f30ad9caaa1cf65510980 + depends: + - libstdcxx 13.4.0 h934c35e_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 27634 + timestamp: 1771377422554 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hf01ce69_5.conda + sha256: 7fa6ddac72e0d803bb08e55090a8f2e71769f1eb7adbd5711bdd7789561601b1 + md5: e79a094918988bb1807462cd42c83962 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.24,<1.25.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=13 + - libwebp-base >=1.5.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + arch: x86_64 + platform: linux + license: HPND + size: 429575 + timestamp: 1747067001268 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 33601 + timestamp: 1680112270483 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf + md5: 63f790534398730f59e1b899c3644d4a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - libwebp 1.5.0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 429973 + timestamp: 1734777489810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.10.0-h65c71a3_0.conda + sha256: a8043a46157511b3ceb6573a99952b5c0232313283f2d6a066cec7c8dcaed7d0 + md5: fedf6bfe5d21d21d2b1785ec00a8889a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - libxcb >=1.17.0,<2.0a0 + - libxml2 >=2.13.8,<2.14.0a0 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + arch: x86_64 + platform: linux + license: MIT/X11 Derivative + license_family: MIT + size: 707156 + timestamp: 1747911059945 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.8-h4bc477f_0.conda + sha256: b0b3a96791fa8bb4ec030295e8c8bf2d3278f33c0f9ad540e73b5e538e6268e7 + md5: 14dbe05b929e329dbaa6f2d0aa19466d + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 690864 + timestamp: 1746634244154 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda + sha256: 35ddfc0335a18677dd70995fa99b8f594da3beb05c11289c87b6de5b930b47a3 + md5: 31059dc620fa57d787e3899ed0421e6d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxml2 >=2.13.8,<2.14.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 244399 + timestamp: 1753273455036 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + size: 63629 + timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.0-h4922eb0_0.conda + sha256: 543c9f17cf6ee6d7b635823fb9009df421d510c36739534df6ae43eadaf6ff4e + md5: 5e7da5333653c631d27732893b934351 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - intel-openmp <0.0a0 + - openmp 22.1.0|22.1.0.* + arch: x86_64 + platform: linux + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 6136884 + timestamp: 1772024545 +- conda: https://conda.anaconda.org/conda-forge/noarch/logical-unification-0.4.7-pyhd8ed1ab_0.conda + sha256: 5a3995f2b6c47d0b4842f3842490920e2dbf074854667d8649dd5abe81914a54 + md5: f2815c465aa44db830f0b31b7e6baaff + depends: + - multipledispatch + - python >=3.10 + - toolz + license: BSD-3-Clause + license_family: BSD + size: 18830 + timestamp: 1761054211310 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e + md5: 5b5203189eb668f042ac2b0826244964 + depends: + - mdurl >=0.1,<1 + - python >=3.10 + license: MIT + license_family: MIT + size: 64736 + timestamp: 1754951288511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.3-py313h78bf25f_0.conda + sha256: 384337a8553f9e5dec80e4d1c46460207d96b0e2b6e73aa1c0de04a52d90917b + md5: cc9324e614a297fdf23439d887d3513d + depends: + - matplotlib-base >=3.10.3,<3.10.4.0a0 + - pyside6 >=6.7.2 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - tornado >=5 + arch: x86_64 + platform: linux + license: PSF-2.0 + license_family: PSF + size: 17426 + timestamp: 1746820711137 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.3-py313h129903b_0.conda + sha256: eb23d6945d34836b62add0ca454f287cadb74b4b771cdd7196a1f51def425014 + md5: 4f8816d006b1c155ec416bcf7ff6cee2 + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.21,<3 + - numpy >=1.23 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.13,<3.14.0a0 + - python-dateutil >=2.7 + - python_abi 3.13.* *_cp313 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + arch: x86_64 + platform: linux + license: PSF-2.0 + license_family: PSF + size: 8479847 + timestamp: 1746820689093 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 14465 + timestamp: 1733255681319 +- conda: https://conda.anaconda.org/conda-forge/noarch/minikanren-1.0.5-pyhd8ed1ab_1.conda + sha256: aced546f3dbc7f8710182b1f1ec30d2aaec2f4f9b48513d7d95fb2004ee775f6 + md5: ef7868bd5e40d31a8a41312e91ec6a9c + depends: + - cons >=0.4.0 + - etuples >=0.3.1 + - logical-unification >=0.4.1 + - multipledispatch + - python >=3.10 + - toolz + - typing_extensions + license: BSD-3-Clause + license_family: BSD + size: 27317 + timestamp: 1755897118661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2024.2.2-ha770c72_17.conda + sha256: 1e59d0dc811f150d39c2ff2da930d69dcb91cb05966b7df5b7d85133006668ed + md5: e4ab075598123e783b788b995afbdad0 + depends: + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - llvm-openmp >=20.1.8 + - tbb 2021.* + arch: x86_64 + platform: linux + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + size: 124988693 + timestamp: 1753975818422 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-service-2.5.2-py313hae39701_0.conda + sha256: 632e5be381c8265bbdcf49f0470eea2e29e32228a74803b6f0a951a977a467a9 + md5: a2159ec3fd414fcda13e8d780393a1af + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - mkl >=2024.2.2,<2025.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 75165 + timestamp: 1751376181154 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.1-py313ha87cce1_0.conda + sha256: 99b0aed0c8c0f365ea35dded676fb19a106aac48b2a1ae5990de317f35dc8955 + md5: f30e252cdd2ecb7f2bb9a6e5f0c334de + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.21,<3 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: MPL-2.0 AND Apache-2.0 + size: 293551 + timestamp: 1736538997988 +- conda: https://conda.anaconda.org/conda-forge/noarch/multipledispatch-0.6.0-pyhd8ed1ab_1.conda + sha256: c6216a21154373b340c64f321f22fec51db4ee6156c2e642fa58368103ac5d09 + md5: 121a57fce7fff0857ec70fa03200962f + depends: + - python >=3.6 + - six + license: BSD-3-Clause + license_family: BSD + size: 17254 + timestamp: 1721907640382 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 + md5: 37293a85a0f4f77bbd9cf7aaefc62609 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 15851 + timestamp: 1749895533014 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + size: 891641 + timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.1-py313h17eae1a_0.conda + sha256: 96b2ad622ac6521bb58586e9e671e49efe84988bc34a14cbd113b98c67728d5d + md5: 3a155f4d1e110a7330c17ccdce55d315 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - numpy-base <0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 8553831 + timestamp: 1751342634355 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39 + md5: 9e5816bc95d285c115a3ebc2f8563564 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libpng >=1.6.44,<1.7.0a0 + - libstdcxx >=13 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 342988 + timestamp: 1733816638720 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda + sha256: cb0b07db15e303e6f0a19646807715d28f1264c6350309a559702f4f34f37892 + md5: 2e5bf4f1da39c0b32778561c3c4e5878 + depends: + - __glibc >=2.17,<3.0.a0 + - cyrus-sasl >=2.1.27,<3.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.5.0,<4.0a0 + arch: x86_64 + platform: linux + license: OLDAP-2.8 + license_family: BSD + size: 780253 + timestamp: 1748010165522 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.1-h7b32b05_0.conda + sha256: 942347492164190559e995930adcdf84e2fea05307ec8012c02a505f5be87462 + md5: c87df2ab1448ba69169652ab9547082d + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 3131002 + timestamp: 1751390382076 +- conda: https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.4.0-pyhd8ed1ab_1.conda + sha256: af71aabb2bfa4b2c89b7b06403e5cec23b418452cae9f9772bd7ac3f9ea1ff44 + md5: 52919815cd35c4e1a0298af658ccda04 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 62479 + timestamp: 1733688053334 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + size: 72010 + timestamp: 1769093650580 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.0-py313ha87cce1_0.conda + sha256: c4a6e9bc13454c5afd17600c2ee2b6b07fee8b2629cb1c193c22c048faa9bdcc + md5: 8664b4fa9b5b23b0d1cdc55c7195fcfe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.21,<3 + - numpy >=1.22.4 + - python >=3.13,<3.14.0a0 + - python-dateutil >=2.8.2 + - python-tzdata >=2022.7 + - python_abi 3.13.* *_cp313 + - pytz >=2020.1 + constrains: + - zstandard >=0.19.0 + - sqlalchemy >=2.0.0 + - pyqt5 >=5.15.9 + - pyxlsb >=1.0.10 + - qtpy >=2.3.0 + - odfpy >=1.4.1 + - python-calamine >=0.1.7 + - pytables >=3.8.0 + - numexpr >=2.8.4 + - s3fs >=2022.11.0 + - html5lib >=1.1 + - pyarrow >=10.0.1 + - xarray >=2022.12.0 + - lxml >=4.9.2 + - openpyxl >=3.1.0 + - fastparquet >=2022.12.0 + - fsspec >=2022.11.0 + - matplotlib >=3.6.3 + - scipy >=1.10.0 + - pandas-gbq >=0.19.0 + - xlsxwriter >=3.0.5 + - blosc >=1.21.3 + - xlrd >=2.0.1 + - bottleneck >=1.3.6 + - numba >=0.56.4 + - beautifulsoup4 >=4.11.2 + - pyreadstat >=1.2.0 + - tabulate >=0.9.0 + - tzdata >=2022.7 + - gcsfs >=2022.11.0 + - psycopg2 >=2.9.6 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 14991000 + timestamp: 1749100101435 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda + sha256: 3613774ad27e48503a3a6a9d72017087ea70f1426f6e5541dbdb59a3b626eaaf + md5: 79f71230c069a287efe3a8614069ddf1 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.10,<2.0a0 + - harfbuzz >=11.0.1 + - libexpat >=2.7.0,<3.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libglib >=2.84.2,<3.0a0 + - libpng >=1.6.49,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 455420 + timestamp: 1751292466873 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda + sha256: 27c4014f616326240dcce17b5f3baca3953b6bc5f245ceb49c3fa1e6320571eb + md5: b90bece58b4c2bf25969b70f3be42d25 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 1197308 + timestamp: 1745955064657 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.3.0-py313h8db990d_0.conda + sha256: 73067c9a1ea4857ce9fb6788d404cd7d931ba323ad26eddf083c5b12dc8d73c0 + md5: 114a74a6e184101112fdffd3a1cb5b8f + depends: + - __glibc >=2.17,<3.0.a0 + - lcms2 >=2.17,<3.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libjpeg-turbo >=3.1.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - tk >=8.6.13,<8.7.0a0 + arch: x86_64 + platform: linux + license: HPND + size: 42651243 + timestamp: 1751482117433 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.2-h29eaf8c_0.conda + sha256: 6cb261595b5f0ae7306599f2bb55ef6863534b6d4d1bc0dcfdfa5825b0e4e53d + md5: 39b4228a867772d610c02e06f939a5b8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 402222 + timestamp: 1749552884791 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a + md5: 6b6ece66ebcae2d5f326c77ef2c5a066 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + size: 889287 + timestamp: 1750615908735 +- conda: https://conda.anaconda.org/conda-forge/noarch/pymc-5.24.1-hd8ed1ab_0.conda + noarch: python + sha256: 9b8904d1bea8a0605dd36bd10bfd5623a52857835f7521b896bd2b8af43d09d6 + md5: 1f3e5cfa64520cc64825aa776d13ecad + depends: + - pymc-base 5.24.1 pyhd8ed1ab_0 + - pytensor + - python-graphviz + license: Apache-2.0 + license_family: Apache + size: 12180 + timestamp: 1753043544422 +- conda: https://conda.anaconda.org/conda-forge/noarch/pymc-base-5.24.1-pyhd8ed1ab_0.conda + sha256: 145d8b94dc25d422ebe94fe631d421e9b22f6e68ba9b274c86853e94cddb7ec5 + md5: 2df648a60dcc28ca879d5a2824918231 + depends: + - arviz >=0.13.0 + - cachetools >=4.2.1 + - cloudpickle + - numpy >=1.25.0 + - pandas >=0.24.0 + - pytensor-base >=2.31.2,<2.32 + - python >=3.10 + - rich >=13.7.1 + - scipy >=1.4.1 + - threadpoolctl >=3.1.0,<4.0.0 + - typing_extensions >=3.7.4 + license: Apache-2.0 + license_family: Apache + size: 349019 + timestamp: 1753043541292 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + sha256: 417fba4783e528ee732afa82999300859b065dc59927344b4859c64aae7182de + md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + size: 110893 + timestamp: 1769003998136 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.1-py313h7dabd7a_0.conda + sha256: fc91214da44dc2efef121ae79ba996b08c11e46b4d768fa10d7a6bd59a97d685 + md5: 42a24d0f4fe3a2e8307de3838e162452 + depends: + - __glibc >=2.17,<3.0.a0 + - libclang13 >=20.1.6 + - libegl >=1.7.0,<2.0a0 + - libgcc >=13 + - libgl >=1.7.0,<2.0a0 + - libopengl >=1.7.0,<2.0a0 + - libstdcxx >=13 + - libxml2 >=2.13.8,<2.14.0a0 + - libxslt >=1.1.39,<2.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - qt6-main 6.9.1.* + - qt6-main >=6.9.1,<6.10.0a0 + arch: x86_64 + platform: linux + license: LGPL-3.0-only + license_family: LGPL + size: 10098865 + timestamp: 1749047341823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-2.31.6-py313ha6381f5_0.conda + sha256: 115ad06a7db0f40e3363b662e0ef52d2e0e403d452a153613d9d5d88dfcd8089 + md5: 2a63259fbb786e57e4b98d729f0737d7 + depends: + - python + - pytensor-base ==2.31.6 np2py313hfea535a_0 + - gxx + - gcc_linux-64 13.* + - sysroot_linux-64 2.17.* + - gxx_linux-64 13.* + - mkl-service + - blas + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 10593 + timestamp: 1751640030925 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytensor-base-2.31.6-np2py313hfea535a_0.conda + sha256: f375b97d5bc123243f6aef4b80c1599c32f5a8577fb54a9022618287b41898a2 + md5: c11c29daac63980b7cbf38449d89b647 + depends: + - python + - setuptools >=59.0.0 + - scipy >=1,<2 + - numpy >=1.17.0 + - filelock >=3.15 + - etuples + - logical-unification + - minikanren + - cons + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=13 + - libgcc >=13 + - python_abi 3.13.* *_cp313 + - numpy >=1.23,<3 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 2729036 + timestamp: 1751640030925 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda + build_number: 102 + sha256: c2cdcc98ea3cbf78240624e4077e164dc9d5588eefb044b4097c3df54d24d504 + md5: 89e07d92cf50743886f41638d58c4328 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.0,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=13 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + size: 33273132 + timestamp: 1750064035176 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + size: 233310 + timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.21-pyhbacfb6d_0.conda + sha256: b0139f80dea17136451975e4c0fefb5c86893d8b7bc6360626e8b025b8d8003a + md5: 606d94da4566aa177df7615d68b29176 + depends: + - graphviz >=2.46.1 + - python >=3.9 + license: MIT + license_family: MIT + size: 38837 + timestamp: 1749998558249 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda + sha256: 467134ef39f0af2dbb57d78cb3e4821f01003488d331a8dd7119334f4f47bfbd + md5: 7ead57407430ba33f681738905278d03 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: APACHE + size: 143542 + timestamp: 1765719982349 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 7002 + timestamp: 1752805902938 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2026.1.post1-pyhcf101f3_0.conda + sha256: d35c15c861d5635db1ba847a2e0e7de4c01994999602db1f82e41b5935a9578a + md5: f8a489f43a1342219a3a4d69cecc6b25 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + size: 201725 + timestamp: 1773679724369 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + arch: x86_64 + platform: linux + license: LicenseRef-Qhull + size: 552937 + timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.1-h0384650_1.conda + sha256: 820338eadfdac82e0ec208e41a7f02cc3a7adb8fc0dcf107a57b2a1cdec9f89e + md5: 3610aa92d2de36047886f30e99342f21 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.14,<1.3.0a0 + - dbus >=1.16.2,<2.0a0 + - double-conversion >=3.3.1,<3.4.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=11.0.1 + - icu >=75.1,<76.0a0 + - krb5 >=1.21.3,<1.22.0a0 + - libclang-cpp20.1 >=20.1.7,<20.2.0a0 + - libclang13 >=20.1.7 + - libcups >=2.3.3,<2.4.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - libgcc >=13 + - libgl >=1.7.0,<2.0a0 + - libglib >=2.84.2,<3.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - libllvm20 >=20.1.7,<20.2.0a0 + - libpng >=1.6.49,<1.7.0a0 + - libpq >=17.5,<18.0a0 + - libsqlite >=3.50.1,<4.0a0 + - libstdcxx >=13 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxkbcommon >=1.10.0,<2.0a0 + - libxml2 >=2.13.8,<2.14.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + - pcre2 >=10.45,<10.46.0a0 + - wayland >=1.23.1,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xcb-util-cursor >=0.1.5,<0.2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxcomposite >=0.4.6,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrandr >=1.5.4,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libxxf86vm >=1.1.6,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - qt 6.9.1 + arch: x86_64 + platform: linux + license: LGPL-3.0-only + license_family: LGPL + size: 52006560 + timestamp: 1750920502800 +- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.06.26-h9925aae_0.conda + sha256: 7a0b82cb162229e905f500f18e32118ef581e1fd182036f3298510b8e8663134 + md5: 2b4249747a9091608dbff2bd22afde44 + depends: + - libre2-11 2025.06.26 hba17884_0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 27330 + timestamp: 1751053087063 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c + md5: 283b96675859b20a825f8fa30f311446 + depends: + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 282480 + timestamp: 1740379431762 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 + md5: 7a6289c50631d620652f5045a63eb573 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.10 + - typing_extensions >=4.0.0,<5.0.0 + - python + license: MIT + license_family: MIT + size: 208472 + timestamp: 1771572730357 +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.0-py313h86fcf2b_0.conda + sha256: 75bee2b5cb27616bcbd700d42dacc06577b90f1f9e31dc7682f4244867982a78 + md5: 8c60fe574a5abab59cd365d32e279872 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=13 + - numpy <2.6 + - numpy >=1.23,<3 + - numpy >=1.25.2 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16727241 + timestamp: 1751148531084 +- 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: 639697 + timestamp: 1773074868565 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + size: 18455 + timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda + sha256: 69ab5804bdd2e8e493d5709eebff382a72fab3e9af6adf93a237ccf8f7dbd624 + md5: 460eba7851277ec1fd80a1a24080787a + depends: + - kernel-headers_linux-64 3.10.0 he073ed8_18 + - tzdata + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 + license_family: GPL + size: 15166921 + timestamp: 1735290488259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.13.0-hceb3a55_1.conda + sha256: 65463732129899770d54b1fbf30e1bb82fdebda9d7553caf08d23db4590cd691 + md5: ba7726b8df7b9d34ea80e82b097a4893 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libhwloc >=2.11.2,<2.11.3.0a0 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 175954 + timestamp: 1732982638805 +- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda + sha256: 6016672e0e72c4cf23c0cf7b1986283bd86a9c17e8d319212d78d8e9ae42fdfd + md5: 9d64911b31d57ca443e9f1e36b04385f + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 23869 + timestamp: 1741878358548 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda + sha256: 1544760538a40bcd8ace2b1d8ebe3eb5807ac268641f8acdc18c69c5ebfeaf64 + md5: 86bc20552bf46075e3d92b67f089172d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + size: 3284905 + timestamp: 1763054914403 +- conda: https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda + sha256: 4e379e1c18befb134247f56021fdf18e112fb35e64dd1691858b0a0f3bea9a45 + md5: c07a6153f8306e45794774cf9b13bd32 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + size: 53978 + timestamp: 1760707830681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.1-py313h536fd9c_0.conda + sha256: 282c9c3380217119c779fc4c432b0e4e1e42e9a6265bfe36b6f17f6b5d4e6614 + md5: e9434a5155db25c38ade26f71a2f5a48 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 873269 + timestamp: 1748003477089 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + size: 119135 + timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda + sha256: ba673427dcd480cfa9bbc262fd04a9b1ad2ed59a159bd8f7e750d4c52282f34c + md5: 0f2ca7906bf166247d1d760c3422cb8a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.0,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 330474 + timestamp: 1751817998141 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-2026.2.0-pyhcf101f3_0.conda + sha256: 1d49f2c80c63913c5a9a525b64434a30cf1386502d0f24607db61bd46fa36a40 + md5: b1b3a2477c1b888f15bbef01d7a9615f + depends: + - python >=3.11 + - numpy >=1.26 + - packaging >=24.1 + - pandas >=2.2 + - python + constrains: + - bottleneck >=1.4 + - cartopy >=0.23 + - cftime >=1.6 + - dask-core >=2024.6 + - distributed >=2024.6 + - flox >=0.9 + - h5netcdf >=1.3 + - h5py >=3.11 + - hdf5 >=1.14 + - iris >=3.9 + - matplotlib-base >=3.8 + - nc-time-axis >=1.4 + - netcdf4 >=1.6.0 + - numba >=0.60 + - numbagg >=0.8 + - pint >=0.24 + - pydap >=3.5.0 + - scipy >=1.13 + - seaborn-base >=0.13 + - sparse >=0.15 + - toolz >=0.12 + - zarr >=2.18 + license: Apache-2.0 + license_family: APACHE + size: 1011911 + timestamp: 1771083999178 +- conda: https://conda.anaconda.org/conda-forge/noarch/xarray-einstats-0.10.0-pyhd8ed1ab_0.conda + sha256: 02943091700f860bc3fc117deabe5fd609ed7bae64fd97da2f70241167c2719d + md5: b82273c95432c78efe98f14cbc46be7d + depends: + - numpy >=2.0 + - python >=3.12 + - scipy >=1.13 + - xarray >=2024.02.0 + license: Apache-2.0 + license_family: APACHE + size: 38256 + timestamp: 1771933879255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d + md5: fdc27cb255a7a2cc73b7919a968b48f0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 20772 + timestamp: 1750436796633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda + sha256: c7b35db96f6e32a9e5346f97adc968ef2f33948e3d7084295baebc0e33abdd5b + md5: eb44b3b6deb1cab08d72cb61686fe64c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.13 + - libxcb >=1.16,<2.0.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 20296 + timestamp: 1726125844850 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 + md5: a0901183f08b6c7107aab109733a3c91 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 24551 + timestamp: 1718880534789 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 + md5: ad748ccca349aec3e91743e08b5e2b50 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 14314 + timestamp: 1718846569232 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df + md5: 0e0cbe0564d03a99afd5fd7b362feecd + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 16978 + timestamp: 1718848865819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a + md5: 608e0ef8256b81d04456e8d211eee3e8 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 51689 + timestamp: 1718844051451 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.45-hb9d3cd8_0.conda + sha256: a5d4af601f71805ec67403406e147c48d6bad7aaeae92b0622b7e2396842d3fe + md5: 397a013c2dc5145a70737871aaa87e98 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.12,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 392406 + timestamp: 1749375847832 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + md5: fb901ff28063514abb6046c9ec2c4a45 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 58628 + timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 + md5: 1c74ff8c35dcadf952a16f752ca5aa49 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 27590 + timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda + sha256: 51909270b1a6c5474ed3978628b341b4d4472cd22610e5f22b506855a5e20f67 + md5: db038ce880f100acc74dba10302b5630 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 835896 + timestamp: 1741901112627 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 + md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 14780 + timestamp: 1734229004433 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda + sha256: 753f73e990c33366a91fd42cc17a3d19bb9444b9ca5ff983605fa9e953baf57f + md5: d3c295b50f092ab525ffe3c2aa4b7413 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 13603 + timestamp: 1727884600744 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 19901 + timestamp: 1727794976192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + sha256: da5dc921c017c05f38a38bd75245017463104457b63a1ce633ed41f214159c14 + md5: febbab7d15033c913d53c7a2c102309d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 50060 + timestamp: 1727752228921 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda + sha256: 2fef37e660985794617716eb915865ce157004a4d567ed35ec16514960ae9271 + md5: 4bdb303603e9821baf5fe5fdff1dc8f8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 19575 + timestamp: 1727794961233 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a + md5: 17dcc85db3c7886650b8908b183d6876 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 47179 + timestamp: 1727799254088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.5-h5888daf_1.conda + sha256: 1b9141c027f9d84a9ee5eb642a0c19457c788182a5a73c5a9083860ac5c20a8c + md5: 5e2eb9bf77394fc2e5918beefec9f9ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 13891 + timestamp: 1727908521531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda + sha256: ac0f037e0791a620a69980914a77cb6bb40308e26db11698029d6708f5aa8e0d + md5: 2de7f99d6581a4a7adbff607b5c278ca + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 29599 + timestamp: 1727794874300 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 + md5: 96d57aba173e878a2089d5638016dc5e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 33005 + timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a + md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 32808 + timestamp: 1727964811275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.conda + sha256: 8a4e2ee642f884e6b78c20c0892b85dd9b2a6e64a6044e903297e616be6ca35b + md5: 5efa5fa6243a622445fdfd72aee15efa + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 17819 + timestamp: 1734214575628 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + size: 24194 + timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 601375 + timestamp: 1764777111296 diff --git a/scripts/Benchmarking/.CondaPkg/pixi.toml b/scripts/Benchmarking/.CondaPkg/pixi.toml new file mode 100644 index 0000000..6c36918 --- /dev/null +++ b/scripts/Benchmarking/.CondaPkg/pixi.toml @@ -0,0 +1,18 @@ +[dependencies] +pytensor = "*" +libstdcxx = ">=3.4,<14.0" +bambi = "*" +libstdcxx-ng = ">=3.4,<14.0" +jax = "*" + + [dependencies.python] + channel = "conda-forge" + build = "*cp*" + version = ">=3.10,!=3.14.0,!=3.14.1,<4" + +[project] +name = ".CondaPkg" +platforms = ["linux-64"] +channels = ["conda-forge"] +channel-priority = "strict" +description = "automatically generated by CondaPkg.jl" diff --git a/scripts/Benchmarking/CondaPkg.toml b/scripts/Benchmarking/CondaPkg.toml new file mode 100644 index 0000000..db6dd60 --- /dev/null +++ b/scripts/Benchmarking/CondaPkg.toml @@ -0,0 +1,4 @@ +[deps] +bambi = "" +jax = "" +pytensor = "" diff --git a/scripts/Benchmarking/Manifest.toml b/scripts/Benchmarking/Manifest.toml new file mode 100644 index 0000000..2605cad --- /dev/null +++ b/scripts/Benchmarking/Manifest.toml @@ -0,0 +1,2011 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.11" +manifest_format = "2.0" +project_hash = "9b232e3eeb1fa6a5bfa886bd13dad382f4ecae74" + +[[deps.ADTypes]] +git-tree-sha1 = "f7304359109c768cf32dc5fa2d371565bb63b68a" +uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +version = "1.21.0" +weakdeps = ["ChainRulesCore", "ConstructionBase", "EnzymeCore"] + + [deps.ADTypes.extensions] + ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesConstructionBaseExt = "ConstructionBase" + ADTypesEnzymeCoreExt = "EnzymeCore" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.AbstractMCMC]] +deps = ["BangBang", "ConsoleProgressMonitor", "Dates", "Distributed", "FillArrays", "LogDensityProblems", "Logging", "LoggingExtras", "ProgressLogging", "Random", "StatsBase", "TerminalLoggers", "Transducers", "UUIDs"] +git-tree-sha1 = "511d0d8cbf38045be05188ae26880afb57342a88" +uuid = "80f14c24-f653-4e6a-9b94-39d6b0f70001" +version = "5.14.0" + + [deps.AbstractMCMC.extensions] + AbstractMCMCOnlineStatsExt = "OnlineStats" + AbstractMCMCTensorBoardLoggerExt = "TensorBoardLogger" + + [deps.AbstractMCMC.weakdeps] + OnlineStats = "a15396b6-48d5-5d58-9928-6d29437db91e" + TensorBoardLogger = "899adc3e-224a-11e9-021f-63837185c80f" + +[[deps.AbstractPPL]] +deps = ["AbstractMCMC", "Accessors", "BangBang", "DensityInterface", "JSON", "LinearAlgebra", "MacroTools", "OrderedCollections", "Random", "StatsBase"] +git-tree-sha1 = "cc74854881ab9531bde1ecc624ef3f9821497717" +uuid = "7a57a42e-76ec-4ea3-a279-07e840d6d9cf" +version = "0.14.1" +weakdeps = ["Distributions"] + + [deps.AbstractPPL.extensions] + AbstractPPLDistributionsExt = ["Distributions", "LinearAlgebra"] + +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "856ecd7cebb68e5fc87abecd2326ad59f0f911f3" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.43" + + [deps.Accessors.extensions] + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "35ea197a51ce46fcd01c4a44befce0578a1aaeca" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.5.0" +weakdeps = ["SparseArrays", "StaticArrays"] + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AdvancedHMC]] +deps = ["AbstractMCMC", "ArgCheck", "DocStringExtensions", "LinearAlgebra", "LogDensityProblems", "LogDensityProblemsAD", "ProgressMeter", "Random", "Setfield", "Statistics", "StatsBase", "StatsFuns"] +git-tree-sha1 = "15e1bafe97eb0eeb77c8dae63cdcfa133986b254" +uuid = "0bf59076-c3b1-5ca4-86bd-e02cd72cde3d" +version = "0.8.3" + + [deps.AdvancedHMC.extensions] + AdvancedHMCADTypesExt = "ADTypes" + AdvancedHMCCUDAExt = "CUDA" + AdvancedHMCComponentArraysExt = "ComponentArrays" + AdvancedHMCMCMCChainsExt = "MCMCChains" + AdvancedHMCOrdinaryDiffEqExt = "OrdinaryDiffEq" + + [deps.AdvancedHMC.weakdeps] + ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ComponentArrays = "b0b7db55-cfe3-40fc-9ded-d10e2dbeff66" + MCMCChains = "c7f686f2-ff18-58e9-bc7b-31028e88f75d" + OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" + +[[deps.AdvancedMH]] +deps = ["AbstractMCMC", "Distributions", "DocStringExtensions", "FillArrays", "LinearAlgebra", "LogDensityProblems", "Random", "Requires"] +git-tree-sha1 = "62ddbccf0ce5c26f8ef3cebe4bedef6b1599d616" +uuid = "5b7e9947-ddc0-4b3f-9b55-0d8042f74170" +version = "0.8.10" +weakdeps = ["DiffResults", "ForwardDiff", "MCMCChains", "StructArrays"] + + [deps.AdvancedMH.extensions] + AdvancedMHForwardDiffExt = ["DiffResults", "ForwardDiff"] + AdvancedMHMCMCChainsExt = "MCMCChains" + AdvancedMHStructArraysExt = "StructArrays" + +[[deps.AdvancedPS]] +deps = ["AbstractMCMC", "Distributions", "Random", "Random123", "Requires", "SSMProblems", "StatsFuns"] +git-tree-sha1 = "d92dd3fb4cc2748860ae8d5dd1d324cf0715a53b" +uuid = "576499cb-2369-40b2-a588-c64705576edc" +version = "0.7.2" +weakdeps = ["Libtask"] + + [deps.AdvancedPS.extensions] + AdvancedPSLibtaskExt = "Libtask" + +[[deps.AdvancedVI]] +deps = ["ADTypes", "Accessors", "ChainRulesCore", "DiffResults", "DifferentiationInterface", "Distributions", "DocStringExtensions", "FillArrays", "Functors", "LinearAlgebra", "LogDensityProblems", "Optimisers", "ProgressMeter", "Random", "StatsBase"] +git-tree-sha1 = "d69d7d9e1756fff9dd5d3fd26add46ee5ac62be4" +uuid = "b5ca4192-6429-45e5-a2d9-87aec30a685c" +version = "0.6.2" + + [deps.AdvancedVI.extensions] + AdvancedVIBijectorsExt = ["Bijectors", "Optimisers"] + AdvancedVIEnzymeExt = ["Enzyme", "ChainRulesCore"] + AdvancedVIMooncakeExt = ["Mooncake", "ChainRulesCore"] + AdvancedVIReverseDiffExt = ["ReverseDiff", "ChainRulesCore"] + + [deps.AdvancedVI.weakdeps] + Bijectors = "76274a88-744f-5084-9051-94815aaf08c4" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.ArgCheck]] +git-tree-sha1 = "f9e9a66c9b7be1ad7372bbd9b062d9230c30c5ce" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.5.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.4.0" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "78b3a7a536b4b0a747a0f296ea77091ca0a9f9a3" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.23.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceAMDGPUExt = "AMDGPU" + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.1.0" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.8" + +[[deps.BangBang]] +deps = ["Accessors", "ConstructionBase", "InitialValues", "LinearAlgebra"] +git-tree-sha1 = "cceb62468025be98d42a5dc581b163c20896b040" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.4.9" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTablesExt = "Tables" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + +[[deps.Bijectors]] +deps = ["AbstractPPL", "ArgCheck", "ChainRulesCore", "ChangesOfVariables", "DifferentiationInterface", "Distributions", "DocStringExtensions", "EnzymeCore", "Functors", "InverseFunctions", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "MappedArrays", "Random", "Reexport", "Roots", "SparseArrays", "Statistics", "Test"] +git-tree-sha1 = "e876fd33fef2708270d8f72b4491af71fed12ec6" +uuid = "76274a88-744f-5084-9051-94815aaf08c4" +version = "0.15.18" + + [deps.Bijectors.extensions] + BijectorsDistributionsADExt = "DistributionsAD" + BijectorsForwardDiffExt = "ForwardDiff" + BijectorsLazyArraysExt = "LazyArrays" + BijectorsMooncakeExt = "Mooncake" + BijectorsReverseDiffChainRulesExt = ["ChainRules", "ReverseDiff"] + BijectorsReverseDiffExt = "ReverseDiff" + + [deps.Bijectors.weakdeps] + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + DistributionsAD = "ced4e74d-a319-5a8a-b0ac-84af2272839c" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + +[[deps.BridgeStan]] +deps = ["Downloads", "Inflate", "TOML", "Tar"] +git-tree-sha1 = "f8689ac4ce3245df7a436889988762a6c4a9da12" +uuid = "c88b6f0a-829e-4b0b-94b7-f06ab5908f5a" +version = "2.7.0" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.16" + +[[deps.CategoricalArrays]] +deps = ["Compat", "DataAPI", "Future", "Missings", "Printf", "Requires", "Statistics", "Unicode"] +git-tree-sha1 = "a6f644eb7bbc0171286f0f3ad1ffde8f04be7b83" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "1.1.0" + + [deps.CategoricalArrays.extensions] + CategoricalArraysArrowExt = "Arrow" + CategoricalArraysJSONExt = "JSON" + CategoricalArraysRecipesBaseExt = "RecipesBase" + CategoricalArraysSentinelArraysExt = "SentinelArrays" + CategoricalArraysStatsBaseExt = "StatsBase" + CategoricalArraysStructTypesExt = "StructTypes" + + [deps.CategoricalArrays.weakdeps] + Arrow = "69666777-d1a9-59fb-9406-91d4454c9d45" + JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SentinelArrays = "91c51154-3ec4-41a3-a24f-3f23e20d615c" + StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" + StructTypes = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" + +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "SparseInverseSubset", "Statistics", "StructArrays", "SuiteSparse"] +git-tree-sha1 = "3c190c570fb3108c09f838607386d10c71701789" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.73.0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.26.0" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.Chairmarks]] +deps = ["Printf", "Random"] +git-tree-sha1 = "9a49491e67e7a4d6f885c43d00bb101e6e5a434b" +uuid = "0ca39b1e-fe0b-4e98-acfc-b1656634c4de" +version = "1.3.1" +weakdeps = ["Statistics"] + + [deps.Chairmarks.extensions] + StatisticsChairmarksExt = ["Statistics"] + +[[deps.ChangesOfVariables]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "3aa4bf1532aa2e14e0374c4fd72bed9a9d0d0f6c" +uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" +version = "0.1.10" +weakdeps = ["InverseFunctions", "Test"] + + [deps.ChangesOfVariables.extensions] + ChangesOfVariablesInverseFunctionsExt = "InverseFunctions" + ChangesOfVariablesTestExt = "Test" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.8" + +[[deps.CommonSolve]] +git-tree-sha1 = "78ea4ddbcf9c241827e7035c3a03e2e456711470" +uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" +version = "0.2.6" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.1" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.Conda]] +deps = ["Downloads", "JSON", "VersionParsing"] +git-tree-sha1 = "8f06b0cfa4c514c7b9546756dbae91fcfbc92dc9" +uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" +version = "1.10.3" + +[[deps.CondaPkg]] +deps = ["JSON", "Markdown", "MicroMamba", "Pidfile", "Pkg", "Preferences", "Scratch", "TOML", "pixi_jll"] +git-tree-sha1 = "0300af904a8c8d41ff715a60a6959136d22b8572" +uuid = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" +version = "0.2.34" + +[[deps.ConsoleProgressMonitor]] +deps = ["Logging", "ProgressMeter"] +git-tree-sha1 = "3ab7b2136722890b9af903859afcf457fa3059e8" +uuid = "88cd18e8-d9cc-4ea6-8889-5259c0d15c8b" +version = "0.1.2" + +[[deps.ConstructionBase]] +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.6.0" +weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.8.1" + +[[deps.DataStructures]] +deps = ["OrderedCollections"] +git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.19.3" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + +[[deps.DensityInterface]] +deps = ["InverseFunctions", "Test"] +git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" +uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" +version = "0.4.0" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.DifferentiationInterface]] +deps = ["ADTypes", "LinearAlgebra"] +git-tree-sha1 = "7ae99144ea44715402c6c882bfef2adbeadbc4ce" +uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +version = "0.7.16" + + [deps.DifferentiationInterface.extensions] + DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" + DifferentiationInterfaceDiffractorExt = "Diffractor" + DifferentiationInterfaceEnzymeExt = ["EnzymeCore", "Enzyme"] + DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" + DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" + DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" + DifferentiationInterfaceForwardDiffExt = ["ForwardDiff", "DiffResults"] + DifferentiationInterfaceGPUArraysCoreExt = "GPUArraysCore" + DifferentiationInterfaceGTPSAExt = "GTPSA" + DifferentiationInterfaceMooncakeExt = "Mooncake" + DifferentiationInterfacePolyesterForwardDiffExt = ["PolyesterForwardDiff", "ForwardDiff", "DiffResults"] + DifferentiationInterfaceReverseDiffExt = ["ReverseDiff", "DiffResults"] + DifferentiationInterfaceSparseArraysExt = "SparseArrays" + DifferentiationInterfaceSparseConnectivityTracerExt = "SparseConnectivityTracer" + DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" + DifferentiationInterfaceStaticArraysExt = "StaticArrays" + DifferentiationInterfaceSymbolicsExt = "Symbolics" + DifferentiationInterfaceTrackerExt = "Tracker" + DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] + + [deps.DifferentiationInterface.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DiffResults = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" + Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.DispatchDoctor]] +deps = ["MacroTools", "Preferences"] +git-tree-sha1 = "42cd00edaac86f941815fe557c1d01e11913e07c" +uuid = "8d63f2c5-f18a-4cf2-ba9d-b3f60fc568c8" +version = "0.4.28" +weakdeps = ["ChainRulesCore", "EnzymeCore"] + + [deps.DispatchDoctor.extensions] + DispatchDoctorChainRulesCoreExt = "ChainRulesCore" + DispatchDoctorEnzymeCoreExt = "EnzymeCore" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "fbcc7610f6d8348428f722ecbe0e6cfe22e672c6" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.123" +weakdeps = ["ChainRulesCore", "DensityInterface", "Test"] + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + +[[deps.DocStringExtensions]] +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.5" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DynamicPPL]] +deps = ["ADTypes", "AbstractMCMC", "AbstractPPL", "Accessors", "BangBang", "Bijectors", "Chairmarks", "Compat", "ConstructionBase", "DifferentiationInterface", "Distributions", "DocStringExtensions", "FillArrays", "InteractiveUtils", "LinearAlgebra", "LogDensityProblems", "MacroTools", "OrderedCollections", "PrecompileTools", "Printf", "Random", "Statistics", "Test"] +git-tree-sha1 = "14ded43f8a62568b17efc62d9f04491a2d4d8c9b" +uuid = "366bfd00-2699-11ea-058f-f148b4cae6d8" +version = "0.40.14" + + [deps.DynamicPPL.extensions] + DynamicPPLEnzymeCoreExt = ["EnzymeCore"] + DynamicPPLForwardDiffExt = ["ForwardDiff"] + DynamicPPLMCMCChainsExt = ["MCMCChains"] + DynamicPPLMarginalLogDensitiesExt = ["MarginalLogDensities"] + DynamicPPLMooncakeExt = ["Mooncake", "DifferentiationInterface"] + DynamicPPLReverseDiffExt = ["ReverseDiff"] + + [deps.DynamicPPL.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + MCMCChains = "c7f686f2-ff18-58e9-bc7b-31028e88f75d" + MarginalLogDensities = "f0c3360a-fb8d-11e9-1194-5521fd7ee392" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + +[[deps.EllipticalSliceSampling]] +deps = ["AbstractMCMC", "ArrayInterface", "Distributions", "Random", "Statistics"] +git-tree-sha1 = "e611b7fdfbfb5b18d5e98776c30daede41b44542" +uuid = "cad2338a-1db2-11e9-3401-43bc07c9ede2" +version = "2.0.0" + +[[deps.EnumX]] +git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.7" + +[[deps.Enzyme]] +deps = ["CEnum", "EnzymeCore", "Enzyme_jll", "GPUCompiler", "InteractiveUtils", "LLVM", "Libdl", "LinearAlgebra", "ObjectFile", "PrecompileTools", "Preferences", "Printf", "Random", "SparseArrays"] +git-tree-sha1 = "ea65d3121f09b5f31102542db9445163b7c99182" +uuid = "7da242da-08ed-463a-9acd-ee780be4f1d9" +version = "0.13.129" + + [deps.Enzyme.extensions] + EnzymeBFloat16sExt = "BFloat16s" + EnzymeChainRulesCoreExt = "ChainRulesCore" + EnzymeGPUArraysCoreExt = "GPUArraysCore" + EnzymeLogExpFunctionsExt = "LogExpFunctions" + EnzymeSpecialFunctionsExt = "SpecialFunctions" + EnzymeStaticArraysExt = "StaticArrays" + + [deps.Enzyme.weakdeps] + ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.EnzymeCore]] +git-tree-sha1 = "990991b8aa76d17693a98e3a915ac7aa49f08d1a" +uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" +version = "0.8.18" +weakdeps = ["Adapt", "ChainRulesCore"] + + [deps.EnzymeCore.extensions] + AdaptExt = "Adapt" + EnzymeCoreChainRulesCoreExt = "ChainRulesCore" + +[[deps.Enzyme_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "fea21cfc452db42e3878aab62a76896e76d54d12" +uuid = "7cc45869-7501-5eee-bdea-0790c847d4ef" +version = "0.0.249+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.ExproniconLite]] +git-tree-sha1 = "c13f0b150373771b0fdc1713c97860f8df12e6c2" +uuid = "55351af7-c7e9-48d6-89ff-24e801d99491" +version = "0.10.14" + +[[deps.FFTA]] +deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"] +git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a" +uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e" +version = "0.3.1" + +[[deps.FastClosures]] +git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" +uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" +version = "0.3.2" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates"] +git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.24" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] +git-tree-sha1 = "9340ca07ca27093ff68418b7558ca37b05f8aeb1" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.29.0" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffSparseArraysExt = "SparseArrays" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "eef4c86803f47dcb61e9b8790ecaa96956fdd8ae" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "1.3.2" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FunctionWrappers]] +git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" +uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" +version = "1.1.3" + +[[deps.FunctionWrappersWrappers]] +deps = ["FunctionWrappers"] +git-tree-sha1 = "b104d487b34566608f8b4e1c39fb0b10aa279ff8" +uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" +version = "0.1.3" + +[[deps.Functors]] +deps = ["Compat", "ConstructionBase", "LinearAlgebra", "Random"] +git-tree-sha1 = "60a0339f28a233601cb74468032b5c302d5067de" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.5.2" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.2.0" + +[[deps.GPUCompiler]] +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "Tracy", "UUIDs"] +git-tree-sha1 = "966946d226e8b676ca6409454718accb18c34c54" +uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" +version = "1.8.2" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "DataStructures", "Inflate", "LinearAlgebra", "Random", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "7eb45fe833a5b7c51cf6d89c5a841d5967e44be3" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.14.0" +weakdeps = ["Distributed", "SharedArrays"] + + [deps.Graphs.extensions] + GraphsSharedArraysExt = "SharedArrays" + +[[deps.HypergeometricFunctions]] +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.28" + +[[deps.Inflate]] +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.5" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.InlineStrings]] +git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.5" + + [deps.InlineStrings.extensions] + ArrowTypesExt = "ArrowTypes" + ParsersExt = "Parsers" + + [deps.InlineStrings.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "65d505fa4c0d7072990d659ef3fc086eb6da8208" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.16.2" + + [deps.Interpolations.extensions] + InterpolationsForwardDiffExt = "ForwardDiff" + InterpolationsUnitfulExt = "Unitful" + + [deps.Interpolations.weakdeps] + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.IntervalSets]] +git-tree-sha1 = "d966f85b3b7a8e49d034d27a189e9a4874b4391a" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.13" +weakdeps = ["Random", "RecipesBase", "Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + +[[deps.InverseFunctions]] +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" + +[[deps.InvertedIndices]] +git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.1" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.6" + +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.1" + +[[deps.JSON]] +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "b3ad4a0255688dcb895a52fafbaae3023b588a90" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "1.4.0" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.Jieko]] +deps = ["ExproniconLite"] +git-tree-sha1 = "2f05ed29618da60c06a87e9c033982d4f71d0b6c" +uuid = "ae98c720-c025-4a4a-838c-29b094483192" +version = "0.2.1" + +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"] +git-tree-sha1 = "4260cfc991b8885bf747801fb60dd4503250e478" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.11" + +[[deps.LLVM]] +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Unicode"] +git-tree-sha1 = "69e4739502b7ab5176117e97e1664ed181c35036" +uuid = "929cbde3-209d-540e-8aea-75f648917ca0" +version = "9.4.6" + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" + + [deps.LLVM.weakdeps] + BFloat16s = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" + +[[deps.LLVMExtra_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] +git-tree-sha1 = "8e76807afb59ebb833e9b131ebf1a8c006510f33" +uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" +version = "0.0.38+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.4.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LeftChildRightSiblingTrees]] +deps = ["AbstractTrees"] +git-tree-sha1 = "95ba48564903b43b2462318aa243ee79d81135ff" +uuid = "1d6d02ad-be62-4b6b-8a6d-2f90e265016e" +version = "0.2.1" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.LibTracyClient_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d4e20500d210247322901841d4eafc7a0c52642d" +uuid = "ad6e5548-8b26-5c9f-8ef3-ef0ad883f3a5" +version = "0.13.1+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libtask]] +deps = ["MistyClosures", "Test"] +git-tree-sha1 = "c54cab5deb43c7efaad9140adb7419f4c34bf380" +uuid = "6f1fad26-d15e-5dc8-ae53-837a1d7b8c9f" +version = "0.9.15" + +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Printf"] +git-tree-sha1 = "738bdcacfef25b3a9e4a39c28613717a6b23751e" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.6.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogDensityProblems]] +deps = ["ArgCheck", "DocStringExtensions", "Random"] +git-tree-sha1 = "d9625f27ded4ad726ceca7819394a4cc77ed25b3" +uuid = "6fdf6af0-433a-55f7-b3ed-c6c6e0b8df7c" +version = "2.2.0" + +[[deps.LogDensityProblemsAD]] +deps = ["DocStringExtensions", "LogDensityProblems"] +git-tree-sha1 = "7b83f3ad0a8105f79a067cafbfd124827bb398d0" +uuid = "996a588d-648d-4e1f-a8f0-a84b347e47b1" +version = "1.13.1" + + [deps.LogDensityProblemsAD.extensions] + LogDensityProblemsADADTypesExt = "ADTypes" + LogDensityProblemsADDifferentiationInterfaceExt = ["ADTypes", "DifferentiationInterface"] + LogDensityProblemsADEnzymeExt = "Enzyme" + LogDensityProblemsADFiniteDifferencesExt = "FiniteDifferences" + LogDensityProblemsADForwardDiffBenchmarkToolsExt = ["BenchmarkTools", "ForwardDiff"] + LogDensityProblemsADForwardDiffExt = "ForwardDiff" + LogDensityProblemsADReverseDiffExt = "ReverseDiff" + LogDensityProblemsADTrackerExt = "Tracker" + LogDensityProblemsADZygoteExt = "Zygote" + + [deps.LogDensityProblemsAD.weakdeps] + ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" + BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.29" +weakdeps = ["ChainRulesCore", "ChangesOfVariables", "InverseFunctions"] + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.2.0" + +[[deps.MCMCChains]] +deps = ["AbstractMCMC", "AxisArrays", "DataAPI", "Dates", "Distributions", "IteratorInterfaceExtensions", "KernelDensity", "LinearAlgebra", "MCMCDiagnosticTools", "MLJModelInterface", "NaturalSort", "OrderedCollections", "PrettyTables", "Random", "RecipesBase", "Statistics", "StatsBase", "StatsFuns", "TableTraits", "Tables"] +git-tree-sha1 = "060d6bc7cf60e621dfd056ed2c1a2db1e68db0fe" +uuid = "c7f686f2-ff18-58e9-bc7b-31028e88f75d" +version = "7.7.0" + +[[deps.MCMCDiagnosticTools]] +deps = ["AbstractFFTs", "DataAPI", "DataStructures", "Distributions", "LinearAlgebra", "MLJModelInterface", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Tables"] +git-tree-sha1 = "f90494689e927268dec7bbd1ece64f134ad251f4" +uuid = "be115224-59cd-429b-ad48-344e309966f0" +version = "0.3.16" + +[[deps.MLJModelInterface]] +deps = ["InteractiveUtils", "REPL", "Random", "ScientificTypesBase", "StatisticalTraits"] +git-tree-sha1 = "c275fae2e693206b4527dd9d2382aa15359ef3ed" +uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +version = "1.12.1" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.MappedArrays]] +git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.3" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.1010+0" + +[[deps.MicroCollections]] +deps = ["Accessors", "BangBang", "InitialValues"] +git-tree-sha1 = "44d32db644e84c75dab479f1bc15ee76a1a3618f" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.2.0" + +[[deps.MicroMamba]] +deps = ["Pkg", "Scratch", "micromamba_jll"] +git-tree-sha1 = "535656ce55266bfed0575cd051acc4f36dc869a0" +uuid = "0b3b1443-0f03-428d-bdfb-f27f9c1191ea" +version = "0.1.15" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.MistyClosures]] +git-tree-sha1 = "d1a692e293c2a0dc8fda79c04cad60582f3d4de3" +uuid = "dbe65cb8-6be2-42dd-bbc5-4196aaced4f4" +version = "2.1.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mooncake]] +deps = ["ADTypes", "ChainRules", "ChainRulesCore", "DispatchDoctor", "ExprTools", "Graphs", "LinearAlgebra", "MistyClosures", "PrecompileTools", "Random", "Test"] +git-tree-sha1 = "8a790060135e8740badf9a3c52c9a9853ccd3706" +uuid = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" +version = "0.5.19" + + [deps.Mooncake.extensions] + MooncakeAllocCheckExt = "AllocCheck" + MooncakeCUDAExt = "CUDA" + MooncakeDistributionsExt = "Distributions" + MooncakeDynamicExpressionsExt = "DynamicExpressions" + MooncakeFluxExt = "Flux" + MooncakeFunctionWrappersExt = "FunctionWrappers" + MooncakeJETExt = "JET" + MooncakeLogExpFunctionsExt = "LogExpFunctions" + MooncakeLuxLibExt = ["LuxLib", "MLDataDevices", "Static"] + MooncakeLuxLibSLEEFPiratesExtension = ["LuxLib", "SLEEFPirates"] + MooncakeNNlibExt = ["NNlib", "GPUArraysCore"] + MooncakeSpecialFunctionsExt = "SpecialFunctions" + + [deps.Mooncake.weakdeps] + AllocCheck = "9b6a8646-10ed-4001-bbdc-1d2f46dfbb1a" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + DynamicExpressions = "a40a106e-89c9-4ca8-8020-a735e8728b6b" + Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" + FunctionWrappers = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + LuxLib = "82251201-b29d-42c6-8e01-566dec8acb11" + MLDataDevices = "7e8f7934-dd98-4c1a-8fe8-92b47a384d40" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + SLEEFPirates = "476501e8-09a2-5ece-8869-fb82de89a1fa" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" + +[[deps.Moshi]] +deps = ["ExproniconLite", "Jieko"] +git-tree-sha1 = "53f817d3e84537d84545e0ad749e483412dd6b2a" +uuid = "2e0e35c7-a2e4-4343-998d-7ef72827ed2d" +version = "0.3.7" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2025.12.2" + +[[deps.MuladdMacro]] +git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.4" + +[[deps.NLSolversBase]] +deps = ["ADTypes", "DifferentiationInterface", "FiniteDiff", "LinearAlgebra"] +git-tree-sha1 = "b3f76b463c7998473062992b246045e6961a074e" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "8.0.0" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.1.3" + +[[deps.NaturalSort]] +git-tree-sha1 = "eda490d06b9f7c00752ee81cfa451efe55521e21" +uuid = "c020b1a1-e9b0-503a-9c33-f039bfc54a85" +version = "1.0.0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.ObjectFile]] +deps = ["Reexport", "StructIO"] +git-tree-sha1 = "22faba70c22d2f03e60fbc61da99c4ebfc3eb9ba" +uuid = "d8793406-e978-5875-9003-1fc021f44a92" +version = "0.5.0" + +[[deps.OffsetArrays]] +git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.17.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+5" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.5+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.Optim]] +deps = ["ADTypes", "EnumX", "FillArrays", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PositiveFactorizations", "Printf", "SparseArrays", "Statistics"] +git-tree-sha1 = "7957b66b4e80f1031417197099f35273f7dd93dd" +uuid = "429524aa-4258-5aef-a3af-852621145aeb" +version = "2.0.1" + + [deps.Optim.extensions] + OptimMOIExt = "MathOptInterface" + + [deps.Optim.weakdeps] + MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" + +[[deps.Optimisers]] +deps = ["ChainRulesCore", "ConstructionBase", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "36b5d2b9dd06290cd65fcf5bdbc3a551ed133af5" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.4.7" + + [deps.Optimisers.extensions] + OptimisersAdaptExt = ["Adapt"] + OptimisersEnzymeCoreExt = "EnzymeCore" + OptimisersReactantExt = "Reactant" + + [deps.Optimisers.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" + +[[deps.Optimization]] +deps = ["ADTypes", "ArrayInterface", "ConsoleProgressMonitor", "DocStringExtensions", "LinearAlgebra", "Logging", "LoggingExtras", "OptimizationBase", "Printf", "Reexport", "SciMLBase", "SparseArrays", "TerminalLoggers"] +git-tree-sha1 = "2c409c814c2d745620fdd55391a66ee514561146" +uuid = "7f7a1694-90dd-40f0-9382-eb1efda571ba" +version = "5.5.0" + +[[deps.OptimizationBase]] +deps = ["ADTypes", "ArrayInterface", "DifferentiationInterface", "DocStringExtensions", "FastClosures", "LinearAlgebra", "PDMats", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings", "SymbolicIndexingInterface"] +git-tree-sha1 = "a3d7837832e515111c95a02df7dc55edbdf17d8a" +uuid = "bca83a33-5cc9-4baa-983d-23429ab6bcbb" +version = "5.1.0" + + [deps.OptimizationBase.extensions] + OptimizationChainRulesCoreExt = "ChainRulesCore" + OptimizationEnzymeExt = ["ChainRulesCore", "Enzyme"] + OptimizationFiniteDiffExt = "FiniteDiff" + OptimizationForwardDiffExt = "ForwardDiff" + OptimizationMLDataDevicesExt = "MLDataDevices" + OptimizationMLUtilsExt = "MLUtils" + OptimizationMooncakeExt = "Mooncake" + OptimizationReverseDiffExt = "ReverseDiff" + OptimizationSymbolicAnalysisExt = "SymbolicAnalysis" + OptimizationZygoteExt = "Zygote" + + [deps.OptimizationBase.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + MLDataDevices = "7e8f7934-dd98-4c1a-8fe8-92b47a384d40" + MLUtils = "f1d291b0-491e-4a28-83b9-f70985020b54" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SymbolicAnalysis = "4297ee4d-0239-47d8-ba5d-195ecdf594fe" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.OptimizationOptimJL]] +deps = ["Optim", "OptimizationBase", "Reexport", "SciMLBase", "SparseArrays"] +git-tree-sha1 = "eb89577770d4a956010745f182ebea9d8ea714f8" +uuid = "36348300-93cb-4f02-beb5-3c3902f8871e" +version = "0.4.11" + +[[deps.OrderedCollections]] +git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.37" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "7d2f8f21da5db6a806faf7b9b292296da42b2810" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.3" + +[[deps.Pidfile]] +deps = ["FileWatching", "Test"] +git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" +uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" +version = "1.3.0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PositiveFactorizations]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" +uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" +version = "0.2.4" + +[[deps.PreallocationTools]] +deps = ["Adapt", "ArrayInterface", "PrecompileTools"] +git-tree-sha1 = "dc8d6bde5005a0eac05ae8faf1eceaaca166cfa4" +uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" +version = "1.1.2" + + [deps.PreallocationTools.extensions] + PreallocationToolsForwardDiffExt = "ForwardDiff" + PreallocationToolsReverseDiffExt = "ReverseDiff" + PreallocationToolsSparseConnectivityTracerExt = "SparseConnectivityTracer" + + [deps.PreallocationTools.weakdeps] + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "211530a7dc76ab59087f4d4d1fc3f086fbe87594" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "3.2.3" + + [deps.PrettyTables.extensions] + PrettyTablesTypstryExt = "Typstry" + + [deps.PrettyTables.weakdeps] + Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "f0803bc1171e455a04124affa9c21bba5ac4db32" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.6" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.11.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.4.0" + +[[deps.PythonCall]] +deps = ["CondaPkg", "Dates", "Libdl", "MacroTools", "Markdown", "Pkg", "Serialization", "Tables", "UnsafePointers"] +git-tree-sha1 = "982f3f017f08d31202574ef6bdcf8b3466430bea" +uuid = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" +version = "0.9.31" + + [deps.PythonCall.extensions] + CategoricalArraysExt = "CategoricalArrays" + PyCallExt = "PyCall" + + [deps.PythonCall.weakdeps] + CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" + PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.2" +weakdeps = ["Enzyme"] + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + +[[deps.RCall]] +deps = ["CategoricalArrays", "Conda", "DataFrames", "DataStructures", "Dates", "Libdl", "Preferences", "REPL", "Random", "StatsModels", "WinReg"] +git-tree-sha1 = "0ea46f30de5b17d7bd8eaaadb431b0a9ae494a48" +uuid = "6f49c342-dc21-5d91-9882-a32aef131414" +version = "0.14.12" +weakdeps = ["AxisArrays"] + + [deps.RCall.extensions] + RCallAxisArraysExt = ["AxisArrays"] + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.Random123]] +deps = ["Random", "RandomNumbers"] +git-tree-sha1 = "dbe5fd0b334694e905cb9fda73cd8554333c46e2" +uuid = "74087812-796a-5b5d-8853-05524746bad3" +version = "1.7.1" + +[[deps.RandomNumbers]] +deps = ["Random"] +git-tree-sha1 = "c6ec94d2aaba1ab2ff983052cf6a606ca5985902" +uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143" +version = "1.6.0" + +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +deps = ["Requires"] +git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.5" + + [deps.Ratios.extensions] + RatiosFixedPointNumbersExt = "FixedPointNumbers" + + [deps.Ratios.weakdeps] + FixedPointNumbers = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" + +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecursiveArrayTools]] +deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "LinearAlgebra", "PrecompileTools", "RecipesBase", "StaticArraysCore", "SymbolicIndexingInterface"] +git-tree-sha1 = "18d2a6fd1ea9a8205cadb3a5704f8e51abdd748b" +uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" +version = "3.48.0" + + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" + RecursiveArrayToolsForwardDiffExt = "ForwardDiff" + RecursiveArrayToolsKernelAbstractionsExt = "KernelAbstractions" + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" + RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] + RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] + RecursiveArrayToolsStatisticsExt = "Statistics" + RecursiveArrayToolsStructArraysExt = "StructArrays" + RecursiveArrayToolsTablesExt = ["Tables"] + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.9.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.Roots]] +deps = ["Accessors", "CommonSolve", "Printf"] +git-tree-sha1 = "10a488dbecb88a9679c8f357d383d7d83dcc748d" +uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" +version = "2.2.13" + + [deps.Roots.extensions] + RootsChainRulesCoreExt = "ChainRulesCore" + RootsForwardDiffExt = "ForwardDiff" + RootsIntervalRootFindingExt = "IntervalRootFinding" + RootsSymPyExt = "SymPy" + RootsSymPyPythonCallExt = "SymPyPythonCall" + RootsUnitfulExt = "Unitful" + + [deps.Roots.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" + SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" + SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.RuntimeGeneratedFunctions]] +deps = ["ExprTools", "SHA", "Serialization"] +git-tree-sha1 = "7257165d5477fd1025f7cb656019dcb6b0512c38" +uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" +version = "0.5.17" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SSMProblems]] +deps = ["AbstractMCMC", "Distributions", "Random"] +git-tree-sha1 = "cbf723e4c486375cf91236db53a7beefe8291951" +uuid = "26aad666-b158-4e64-9d35-0e672562fa48" +version = "0.6.1" + +[[deps.SciMLBase]] +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Moshi", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLLogging", "SciMLOperators", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] +git-tree-sha1 = "0be0208add9b6836a701e0ac3ad30bda72fee51d" +uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" +version = "2.150.0" + + [deps.SciMLBase.extensions] + SciMLBaseChainRulesCoreExt = "ChainRulesCore" + SciMLBaseDifferentiationInterfaceExt = "DifferentiationInterface" + SciMLBaseDistributionsExt = "Distributions" + SciMLBaseEnzymeExt = "Enzyme" + SciMLBaseForwardDiffExt = "ForwardDiff" + SciMLBaseMLStyleExt = "MLStyle" + SciMLBaseMakieExt = "Makie" + SciMLBaseMeasurementsExt = "Measurements" + SciMLBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + SciMLBaseMooncakeExt = "Mooncake" + SciMLBasePartialFunctionsExt = "PartialFunctions" + SciMLBasePyCallExt = "PyCall" + SciMLBasePythonCallExt = "PythonCall" + SciMLBaseRCallExt = "RCall" + SciMLBaseReverseDiffExt = "ReverseDiff" + SciMLBaseTrackerExt = "Tracker" + SciMLBaseZygoteExt = ["Zygote", "ChainRulesCore"] + + [deps.SciMLBase.weakdeps] + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078" + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PartialFunctions = "570af359-4316-4cb7-8c74-252c00c2016b" + PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" + PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" + RCall = "6f49c342-dc21-5d91-9882-a32aef131414" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.SciMLLogging]] +deps = ["Logging", "LoggingExtras", "Preferences"] +git-tree-sha1 = "0161be062570af4042cf6f69e3d5d0b0555b6927" +uuid = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1" +version = "1.9.1" +weakdeps = ["Tracy"] + + [deps.SciMLLogging.extensions] + SciMLLoggingTracyExt = "Tracy" + +[[deps.SciMLOperators]] +deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra"] +git-tree-sha1 = "794c760e6aafe9f40dcd7dd30526ea33f0adc8b7" +uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" +version = "1.15.1" +weakdeps = ["SparseArrays", "StaticArraysCore"] + + [deps.SciMLOperators.extensions] + SciMLOperatorsSparseArraysExt = "SparseArrays" + SciMLOperatorsStaticArraysCoreExt = "StaticArraysCore" + +[[deps.SciMLPublic]] +git-tree-sha1 = "0ba076dbdce87ba230fff48ca9bca62e1f345c9b" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.0.1" + +[[deps.SciMLStructures]] +deps = ["ArrayInterface", "PrecompileTools"] +git-tree-sha1 = "607f6867d0b0553e98fc7f725c9f9f13b4d01a32" +uuid = "53ae85a6-f571-4167-b2af-e1d143709226" +version = "1.10.0" + +[[deps.ScientificTypesBase]] +deps = ["InteractiveUtils"] +git-tree-sha1 = "e785eaa35a0f5518a388f9010e66fda64ea95ede" +uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161" +version = "3.1.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.3.0" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "ebe7e59b37c400f694f52b58c93d26201387da70" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.9" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.2" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.ShiftedArrays]] +git-tree-sha1 = "503688b59397b3307443af35cd953a13e8005c16" +uuid = "1277b4bf-5013-50f5-be3d-901d8477a67a" +version = "2.0.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "be8eeac05ec97d379347584fa9fe2f5f76795bcb" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.5" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.2" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SparseConnectivityTracer]] +deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "590b72143436e443888124aaf4026a636049e3f5" +uuid = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" +version = "1.2.1" + + [deps.SparseConnectivityTracer.extensions] + SparseConnectivityTracerChainRulesCoreExt = "ChainRulesCore" + SparseConnectivityTracerLogExpFunctionsExt = "LogExpFunctions" + SparseConnectivityTracerNNlibExt = "NNlib" + SparseConnectivityTracerNaNMathExt = "NaNMath" + SparseConnectivityTracerSpecialFunctionsExt = "SpecialFunctions" + + [deps.SparseConnectivityTracer.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.SparseInverseSubset]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "52962839426b75b3021296f7df242e40ecfc0852" +uuid = "dc90abb0-5640-4711-901d-7e5b23a2fada" +version = "0.1.2" + +[[deps.SparseMatrixColorings]] +deps = ["ADTypes", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "Random", "SparseArrays"] +git-tree-sha1 = "fa43a02c01e3e3cb065c89bf9b648b89e3c06f18" +uuid = "0a514795-09f3-496d-8182-132a7b665d35" +version = "0.4.25" + + [deps.SparseMatrixColorings.extensions] + SparseMatrixColoringsCUDAExt = "CUDA" + SparseMatrixColoringsCliqueTreesExt = "CliqueTrees" + SparseMatrixColoringsColorsExt = "Colors" + SparseMatrixColoringsJuMPExt = ["JuMP", "MathOptInterface"] + + [deps.SparseMatrixColorings.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + JuMP = "4076af6c-e467-56ae-b986-b466b2749572" + MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "5acc6a41b3082920f79ca3c759acbcecf18a8d78" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.7.1" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "0f529006004a8be48f1be25f3451186579392d47" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.17" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.StatisticalTraits]] +deps = ["ScientificTypesBase"] +git-tree-sha1 = "89f86d9376acd18a1a4fbef66a56335a3a7633b8" +uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9" +version = "3.5.0" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.8.0" + +[[deps.StatsBase]] +deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.10" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.5.2" +weakdeps = ["ChainRulesCore", "InverseFunctions"] + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + +[[deps.StatsModels]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Printf", "REPL", "ShiftedArrays", "SparseArrays", "StatsAPI", "StatsBase", "StatsFuns", "Tables"] +git-tree-sha1 = "08786db4a1346d17d0a8d952d2e66fd00fa18192" +uuid = "3eaba693-59b7-5ba5-a881-562e759f1c8d" +version = "0.7.9" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.4.4" + +[[deps.StructArrays]] +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.7.2" + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] + StructArraysLinearAlgebraExt = "LinearAlgebra" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" + + [deps.StructArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.StructIO]] +git-tree-sha1 = "c581be48ae1cbf83e899b14c07a807e1787512cc" +uuid = "53d494c1-5632-5724-8f4c-31dff12d585f" +version = "0.3.1" + +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "fa95b3b097bcef5845c142ea2e085f1b2591e92c" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.7.1" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + +[[deps.SymbolicIndexingInterface]] +deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "94c58884e013efff548002e8dc2fdd1cb74dfce5" +uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" +version = "0.3.46" +weakdeps = ["PrettyTables"] + + [deps.SymbolicIndexingInterface.extensions] + SymbolicIndexingInterfacePrettyTablesExt = "PrettyTables" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.12.1" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TerminalLoggers]] +deps = ["LeftChildRightSiblingTrees", "Logging", "Markdown", "Printf", "ProgressLogging", "UUIDs"] +git-tree-sha1 = "f133fab380933d042f6796eda4e130272ba520ca" +uuid = "5d786b92-1e48-4d6f-9151-6b4477ca9bed" +version = "0.1.7" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.Tracy]] +deps = ["ExprTools", "LibTracyClient_jll", "Libdl"] +git-tree-sha1 = "73e3ff50fd3990874c59fef0f35d10644a1487bc" +uuid = "e689c965-62c8-4b79-b2c5-8359227902fd" +version = "0.1.6" + + [deps.Tracy.extensions] + TracyProfilerExt = "TracyProfiler_jll" + + [deps.Tracy.weakdeps] + TracyProfiler_jll = "0c351ed6-8a68-550e-8b79-de6f926da83c" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.11.3" + +[[deps.Transducers]] +deps = ["Accessors", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "ConstructionBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "SplittablesBase", "Tables"] +git-tree-sha1 = "4aa1fdf6c1da74661f6f5d3edfd96648321dade9" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.85" + + [deps.Transducers.extensions] + TransducersAdaptExt = "Adapt" + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + +[[deps.Turing]] +deps = ["ADTypes", "AbstractMCMC", "AbstractPPL", "Accessors", "AdvancedHMC", "AdvancedMH", "AdvancedPS", "AdvancedVI", "BangBang", "Bijectors", "Compat", "DataStructures", "DifferentiationInterface", "Distributions", "DocStringExtensions", "DynamicPPL", "EllipticalSliceSampling", "ForwardDiff", "Libtask", "LinearAlgebra", "LogDensityProblems", "MCMCChains", "Optimization", "OptimizationOptimJL", "OrderedCollections", "Printf", "Random", "Reexport", "SciMLBase", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "05e4dd6cfcaaa38e423c054a82aa3a43abd9a5b3" +uuid = "fce5fe82-541a-59a6-adf8-730c64b5f9a0" +version = "0.43.2" + + [deps.Turing.extensions] + TuringDynamicHMCExt = "DynamicHMC" + + [deps.Turing.weakdeps] + DynamicHMC = "bbc10e6e-7c05-544b-b16e-64fede858acb" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnsafePointers]] +git-tree-sha1 = "c81331b3b2e60a982be57c046ec91f599ede674a" +uuid = "e17b2a0c-0bdf-430a-bd0c-3a23cae4ff39" +version = "1.0.0" + +[[deps.VersionParsing]] +git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" +uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" +version = "1.3.0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WinReg]] +git-tree-sha1 = "cd910906b099402bcc50b3eafa9634244e5ec83b" +uuid = "1b915085-20d7-51cf-bf83-8f477d6f5128" +version = "1.0.0" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "1.1.0" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.11.0+0" + +[[deps.micromamba_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "717df6f6892af4ee13279a73aa58474e58a88667" +uuid = "f8abcde7-e9b7-5caa-b8af-a437887ae8e4" +version = "2.3.1+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.6.1+0" + +[[deps.pixi_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "f349584316617063160a947a82638f7611a8ef0f" +uuid = "4d7b5844-a134-5dcd-ac86-c8f19cd51bed" +version = "0.41.3+0" diff --git a/scripts/Benchmarking/Project.toml b/scripts/Benchmarking/Project.toml new file mode 100644 index 0000000..639d29a --- /dev/null +++ b/scripts/Benchmarking/Project.toml @@ -0,0 +1,19 @@ +[deps] +ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +BridgeStan = "c88b6f0a-829e-4b0b-94b7-f06ab5908f5a" +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +Chairmarks = "0ca39b1e-fe0b-4e98-acfc-b1656634c4de" +CondaPkg = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +Downloads = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +DynamicPPL = "366bfd00-2699-11ea-058f-f148b4cae6d8" +Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" +LogDensityProblems = "6fdf6af0-433a-55f7-b3ed-c6c6e0b8df7c" +Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" +PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" +RCall = "6f49c342-dc21-5d91-9882-a32aef131414" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +Turing = "fce5fe82-541a-59a6-adf8-730c64b5f9a0" diff --git a/scripts/Benchmarking/README.md b/scripts/Benchmarking/README.md new file mode 100644 index 0000000..a7aae7b --- /dev/null +++ b/scripts/Benchmarking/README.md @@ -0,0 +1,119 @@ +# Bayesian Regression Model Benchmarks + +Benchmarking log-density and gradient evaluation for a Bayesian linear regression across multiple backends and AD systems. + +**Problem**: `drugs ~ o + c + e + a + n` (ESCS dataset, N=604, K=5, 7 unconstrained parameters). + +## Running + +```bash +cd scripts/Benchmarking +julia run_benchmark.jl +``` + +Gradient correctness is verified against brms/Stan as the reference. + +## Results + +### Primal (log-density evaluation) + +| Variant | Time | Allocs | vs Stan | +|---|---|---|---| +| julia3 (BLAS mul!) | 823 ns | 0 | 3.0x faster | +| julia5 (5-arg mul!) | 930 ns | 0 | 2.7x faster | +| julia6 (manual gemv) | 943 ns | 0 | 2.6x faster | +| julia7 (split, BLAS mul!) | 1.0 μs | 0 | 2.5x faster | +| julia1 (allocating Xc*b) | 1.8 μs | 2 | 1.4x faster | +| **brms/Stan (glm fused)** | **2.5 μs** | **1** | **1.0x** | +| stan (matvec + vec normal) | 2.9 μs | 1 | 0.86x | +| stan (loop + vec normal) | 3.1 μs | 1 | 0.81x | +| turing2 (@addlogprob!) | 6.7 μs | 24 | 0.37x | +| julia2 (broadcasted row-dot) | 6.7 μs | 0 | 0.37x | +| turing (loop ~) | 13.5 μs | 20 | 0.19x | +| bambi/PyMC (pytensor) | 34 μs | 9 | 0.07x | + +### Gradient (log-density + gradient, correct results only) + +| Variant | Time | Allocs | vs Stan | +|---|---|---|---| +| **brms/Stan** | **4.2 μs** | **1** | **1.0x** | +| julia7 Enzyme split rev | 4.6 μs | 0 | 0.91x | +| julia3 Enzyme Dup rev | 4.8 μs | 0 | 0.88x | +| julia5 Enzyme Dup rev | 5.1 μs | 0 | 0.82x | +| julia7 Enzyme split fwd | 8.6 μs | 0 | 0.49x | +| julia6 Enzyme Dup rev | 13.4 μs | 0 | 0.31x | +| julia3 Mooncake rev | 15.7 μs | 1 | 0.27x | +| julia7 Mooncake rev | 16.2 μs | 1 | 0.26x | +| julia6 Mooncake rev | 91.4 μs | 0 | 0.05x | + +## Implementations + +### Hand-written Julia variants + +All implement the same log-density as the brms-generated Stan model: centered predictors, student-t priors, half-student-t on sigma. + +- **julia1**: `Xc * b` allocating, `dot(r, r)` for sum of squares +- **julia2**: Lazy `Base.broadcasted` with per-row dot products, custom `mysum` with `preprocess`/`instantiate` +- **julia3**: Pre-allocated buffer + `mul!` (BLAS gemv) + SIMD residual loop +- **julia4**: Broadcasted `.=` into pre-allocated buffer (same speed as lazy) +- **julia5**: 5-arg `mul!` (`r = Y - Xc*b` in one BLAS call) + SIMD loop +- **julia6**: Manual gemv (column-by-column axpy, no BLAS) + fused residual +- **julia7**: Same as julia3 but with split `ℓ_inner(mu, q)` for fine-grained Enzyme annotations + +### Stan variants + +- **brms (glm fused)**: Uses `normal_id_glm_lpdf` — hand-optimized fused likelihood with custom adjoint +- **stan (matvec + vec)**: Separate `Xc * b` + vectorized `normal_lpdf` +- **stan (loop + vec)**: Precomputed `mu` + vectorized `normal_lpdf` + +### Turing/DynamicPPL variants + +- **turing**: Standard `@model` with per-observation `Y[i] ~ Normal(mu[i], sigma)` loop +- **turing2**: Same priors but likelihood via `Turing.@addlogprob!`, bypassing tilde processing + +## AD Backend Notes + +### Enzyme + +- **`function_annotation=Enzyme.Const`**: Produces **wrong gradients** on julia3/5/6/7. `Const` prevents shadow memory allocation for captured mutable buffers (`mu`, `r_buf`), so adjoints can't propagate through `mul!`. +- **`function_annotation=Enzyme.Duplicated`**: Correct gradients but creates shadows for ALL captured variables including constant data arrays (Y: 4.8KB, Xc: 24KB), adding ~1 μs overhead from zeroing ~30KB per call. +- **Fine-grained split (julia7)**: `ℓ_inner(mu, q)` takes the buffer as an explicit argument. Called with `Const(ℓ_inner)` + `Duplicated(mu, dmu)` + `Duplicated(q, grad)`. Only ~5KB shadow for the buffer. **Matches Stan performance.** + +### Mooncake + +- **Reverse mode**: Correct gradients, ~15–16 μs on julia3/5/7. Automatically determines constness (uses `NoRData` for Y/Xc) but has higher per-call overhead than Enzyme's LLVM-level codegen. +- **Forward mode**: Correct but extremely slow (milliseconds, 60k–500k allocs). +- The split approach doesn't help Mooncake — it traces through the full closure graph regardless. + +### ForwardDiff + +Fails on julia3/5/6/7 because `mul!` writes into pre-allocated `Float64` buffers that can't hold `Dual` numbers. Works on julia1 (allocating version). + +## Key Insights + +### Why hand-written Julia primals beat Stan + +Stan evaluates with autodiff-ready `var` types even for primal-only calls (`propto=false`). Julia operates on plain `Float64` with zero-allocation BLAS + SIMD loops. + +### Why Stan's gradient is hard to beat + +Stan's `normal_id_glm_lpdf` has a hand-written adjoint that fuses primal and gradient into one pass, reusing intermediates. Gradient/primal ratio is 1.7x. Julia + Enzyme achieves 5.8x (whole-closure `Duplicated`) and comes close at 4.6x with fine-grained `Const`/`Duplicated` annotations. + +### Why broadcasted row-dots are slow + +`eachrow(Xc)` + per-row `dot`: 604 dot products of length 5, each too short for SIMD. BLAS `gemv` processes column-by-column — each axpy touches 604 contiguous elements, perfect for vectorization. + +### DynamicPPL overhead breakdown + +| Component | Time | Allocs | +|---|---|---| +| Empty model | 0 μs | 0 | +| Parameter management + transforms + priors | 1.0 μs | 18 | +| + manual likelihood (`@addlogprob!`) | 6.7 μs | 24 | +| + loop with 604 `~` tilde statements | 13.5 μs | 20 | + +DynamicPPL v0.40 is already type-stable (`@code_warntype` shows concrete types). The overhead is inherent to its generality: parameter unpacking, bijector transforms, accumulator bookkeeping. + +### DynamicPPL main branch + +The main branch of DynamicPPL adds an `adtype` keyword to `LogDensityFunction` for integrated gradient computation. This passes model internals as `DI.Constant` contexts — conceptually similar to our manual Enzyme `Const`/`Duplicated` split. However, the gradient path doesn't work yet with current Mooncake/DI versions (fails at `prepare_gradient` with multi-argument `Constant` contexts). diff --git a/scripts/Benchmarking/benchmark.jl b/scripts/Benchmarking/benchmark.jl new file mode 100644 index 0000000..a26db38 --- /dev/null +++ b/scripts/Benchmarking/benchmark.jl @@ -0,0 +1,1085 @@ +using DataFrames, Chairmarks +using LogDensityProblems: LogDensityProblems, logdensity, logdensity_and_gradient, dimension, capabilities +using PythonCall, RCall, BridgeStan + +import ForwardDiff, Enzyme, Mooncake +using LinearAlgebra: dot, mul! +using Statistics: mean +import DifferentiationInterface as DI +using ADTypes: AutoForwardDiff, AutoEnzyme, AutoMooncake +using Turing +import DynamicPPL +using Distributions: TDist, Normal, logpdf + +# ── Shared helpers ──────────────────────────────────────────────────────────── + +function _parse_formula(formula::String) + lhs, rhs = strip.(split(formula, "~")) + return Symbol(lhs), Symbol.(strip.(split(rhs, "+"))) +end + +function _center_predictors(data::DataFrame, predictors) + raw = hcat([Vector{Float64}(data[!, p]) for p in predictors]...) + col_means = vec(mean(raw, dims=1)) + return raw .- col_means', col_means +end + +# ── PyMC (bambi) problem ─────────────────────────────────────────────────────── +# +# bambi builds a PyMC model under the hood. We compile a single pytensor +# function that returns (logp, flat_gradient) in one forward+backward pass, +# then wrap it in a Julia struct that implements the LogDensityProblems interface. +# +# Construction note: bambi's formula parser (formulae) captures the Python +# calling frame to resolve variable names. When called directly from Julia +# there is no Python frame, so we define a thin Python wrapper function and +# call that instead. + +# Cached numpy module — lazily initialized to avoid errors when Python is not available +const _NP = Ref{Py}() +function get_np() + if !isassigned(_NP) + _NP[] = pyimport("numpy") + end + return _NP[] +end + +# Python helper — lazily initialized +const _PYMC_HELPERS = Ref{Py}() +function get_pymc_helpers() + isassigned(_PYMC_HELPERS) && return _PYMC_HELPERS[] + g = pydict() + pyexec(""" +import numpy as np +import pytensor +import pytensor.tensor as pt + +def build_bambi(formula, data): + \"\"\"Build a bambi model inside a Python frame so formulae can capture it.\"\"\" + import bambi as bmb + return bmb.Model(formula, data) + +def make_logp_dlogp(pm_model, pytensor_mode=None): + \"\"\" + Compile two pytensor functions for a PyMC model that accept a single flat + np.ndarray of unconstrained parameters directly (no dict conversion per call). + + Builds the symbolic graph by replacing each value_var with a slice of a single + flat input vector, then differentiates w.r.t. that vector. This eliminates + the Python-level to_dict() call that would otherwise run on every evaluation. + + Returns (logp_fn, logp_dlogp_fn, q0_flat). + Pass pytensor_mode=\"JAX\" to compile with the JAX backend. + \"\"\" + compile_kwargs = {"mode": pytensor_mode} if pytensor_mode is not None else {} + + q0_dict = pm_model.initial_point() + keys = list(q0_dict.keys()) + shapes = {k: np.shape(q0_dict[k]) for k in keys} + sizes = {k: int(np.prod(shapes[k])) if shapes[k] else 1 for k in keys} + q0_flat = np.concatenate( + [np.atleast_1d(np.asarray(q0_dict[k])).ravel() for k in keys] + ) + + # Single symbolic flat-vector input + q_sym = pt.vector("q", dtype=pytensor.config.floatX) + + # Map each value_var to its corresponding slice of q_sym + replacements = {} + i = 0 + for vv, k in zip(pm_model.value_vars, keys): + s = sizes[k] + replacements[vv] = q_sym[i:i+s].reshape(shapes[k]) if shapes[k] else q_sym[i] + i += s + + logp_expr = pm_model.logp(jacobian=True) + logp_sub = pytensor.clone_replace(logp_expr, replacements) + grad_sym = pytensor.gradient.grad(logp_sub, q_sym) + + compiled_logp = pytensor.function([q_sym], logp_sub, **compile_kwargs) + compiled_fn = pytensor.function([q_sym], [logp_sub, grad_sym], **compile_kwargs) + + def call_logp(q_flat): + return float(compiled_logp(q_flat)) + + def call_logp_dlogp(q_flat): + lp, grad = compiled_fn(q_flat) + return float(lp), np.asarray(grad) + + return call_logp, call_logp_dlogp, q0_flat +""", g) + _PYMC_HELPERS[] = g + return g +end + +struct PyMCProblem + _logp_fn::Py # (np.ndarray) -> float + _fn::Py # (np.ndarray) -> (float, np.ndarray) + _q0::Vector{Float64} # initial unconstrained parameter vector +end + +""" + PyMCProblem(formula, data; compiler=:pytensor) -> PyMCProblem + +Build a bambi/PyMC model from `formula` and `data`, compile a combined +logp+gradient pytensor function, and return a `PyMCProblem` that implements +the `LogDensityProblems` interface. + +`compiler` controls the pytensor backend: +- `:pytensor` (default) — standard C-compiled pytensor +- `:jax` — JAX backend (requires `jax` installed); faster after JIT warmup +""" +function PyMCProblem(formula::String, data::DataFrame; compiler::Symbol = :pytensor) + helpers = get_pymc_helpers() + build_bambi = helpers["build_bambi"] + make_logp_dlogp = helpers["make_logp_dlogp"] + + bm_model = build_bambi(formula, pytable(data)) + bm_model.build() + pm_model = bm_model.backend.model + + pytensor_mode = compiler === :jax ? "JAX" : pybuiltins.None + py_logp_fn, py_fn, py_q0 = make_logp_dlogp(pm_model, pytensor_mode) + q0 = pyconvert(Vector{Float64}, py_q0) + p = PyMCProblem(py_logp_fn, py_fn, q0) + + # JAX functions are JIT-compiled on first call — run one warmup so benchmark + # times reflect steady-state performance, not compilation. + if compiler === :jax + q0_np = get_np().asarray(q0) + py_logp_fn(q0_np) + py_fn(q0_np) + end + + return p +end + +LogDensityProblems.dimension(p::PyMCProblem) = length(p._q0) +LogDensityProblems.capabilities(::Type{PyMCProblem}) = LogDensityProblems.LogDensityOrder{1}() + +function LogDensityProblems.logdensity(p::PyMCProblem, q::AbstractVector{<:Real}) + np = pyimport("numpy") + return pyconvert(Float64, p._logp_fn(np.asarray(q))) +end + +function LogDensityProblems.logdensity_and_gradient(p::PyMCProblem, q::AbstractVector{<:Real}) + np = pyimport("numpy") + result = p._fn(np.asarray(q)) + lp = pyconvert(Float64, result[0]) + grad = pyconvert(Vector{Float64}, result[1]) + return lp, grad +end + +# ── Stan (brms) problem ─────────────────────────────────────────────────────── +# +# brms generates Stan code and data; BridgeStan compiles it to a shared library +# that exposes log_density_gradient with a flat unconstrained parameter vector. +# BridgeStan.StanModel already supports log_density_gradient, so we wrap it in +# a thin struct to keep a symmetric interface with PyMCProblem. + +# Sanitize a formula string for use as a directory name: +# "drugs ~ o + c + e + a + n" → "drugs_o_c_e_a_n" +function _formula_to_path(formula::String) + s = replace(formula, r"[^a-zA-Z0-9]+" => "_") + return strip(s, '_') +end + +struct StanProblem + _model::BridgeStan.StanModel + _q0::Vector{Float64} +end + +""" + StanProblem(formula, data; source, key, models_dir) -> StanProblem + +Generate Stan code and data via `brms`, compile with BridgeStan, and return a +`StanProblem` that implements the `LogDensityProblems` interface. + +Stan source and data files are written to a persistent directory: + `{models_dir}/{source}/{key}/{sanitized_formula}/` +and reused on subsequent calls if they already exist. +""" +function StanProblem( + formula::String, + data::DataFrame; + source::Union{Symbol,Nothing} = nothing, + key::Union{Symbol,Nothing} = nothing, + models_dir::String = joinpath(@__DIR__, "models"), +) + formula_dir = _formula_to_path(formula) + stan_dir = if source !== nothing && key !== nothing + joinpath(models_dir, string(source), string(key), formula_dir) + else + joinpath(models_dir, formula_dir) + end + mkpath(stan_dir) + + stan_file = joinpath(stan_dir, "model.stan") + data_file = joinpath(stan_dir, "data.json") + + if !isfile(stan_file) || !isfile(data_file) + @rput data formula + stan_code = rcopy(String, R"brms::make_stancode(as.formula(formula), data=data)") + stan_data_json = rcopy(String, R""" + jsonlite::toJSON( + brms::make_standata(as.formula(formula), data=data), + auto_unbox=TRUE + ) + """) + write(stan_file, stan_code) + write(data_file, stan_data_json) + end + + sm = BridgeStan.StanModel(stan_file, data_file; warn=false) + q0 = zeros(BridgeStan.param_unc_num(sm)) + return StanProblem(sm, q0) +end + +""" + StanProblem(stan_file, data_file) -> StanProblem + +Compile a pre-written Stan model with BridgeStan. Unlike the `(formula, data)` +constructor this skips brms code generation entirely. +""" +function StanProblem(stan_file::String, data_file::String) + sm = BridgeStan.StanModel(stan_file, data_file; warn=false) + q0 = zeros(BridgeStan.param_unc_num(sm)) + return StanProblem(sm, q0) +end + +LogDensityProblems.dimension(p::StanProblem) = length(p._q0) +LogDensityProblems.capabilities(::Type{StanProblem}) = LogDensityProblems.LogDensityOrder{1}() + +function LogDensityProblems.logdensity(p::StanProblem, q::AbstractVector{<:Real}) + # propto=false avoids autodiff-type overhead that propto=true incurs even + # when no gradient is being computed (see BridgeStan internals docs). + return BridgeStan.log_density(p._model, q; propto=false, jacobian=true) +end + +function LogDensityProblems.logdensity_and_gradient(p::StanProblem, q::AbstractVector{<:Real}) + return BridgeStan.log_density_gradient(p._model, q) +end + +# ── Hand-written Julia problem ──────────────────────────────────────────────── +# +# A pure Julia implementation of the same linear regression model that brms +# generates. The log-density is hand-coded; gradients are computed via +# DifferentiationInterface with a user-selected AD backend. + +struct JuliaProblem{F} + _logdensity::F + _q0::Vector{Float64} +end + +""" + JuliaProblem(formula, data; intercept_prior, sigma_prior) -> JuliaProblem + +Build a hand-written Julia log-density function matching the brms-generated +Stan model (centered predictors, student-t priors). + +`intercept_prior` and `sigma_prior` are `(df, loc, scale)` tuples matching the +`student_t_lpdf` calls in the generated Stan code. +""" +function JuliaProblem( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + + # Pre-compute constants + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + function ℓ(q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + # Likelihood: Normal(Y | Xc*b + α, σ) + r = Y .- (Xc * b .+ α) + lp = -half_N_log2π - N * log_σ - dot(r, r) / (2 * σ^2) + + # student_t prior on Intercept + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + + # half-student_t prior on sigma + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + + # Jacobian for exp transform + lp += log_σ + + return lp + end + + return JuliaProblem(ℓ, q0) +end + +struct JuliaProblem2{F} + _logdensity::F + _q0::Vector{Float64} +end + +""" + JuliaProblem2(formula, data; intercept_prior, sigma_prior) -> JuliaProblem2 + +Build a hand-written Julia log-density function matching the brms-generated +Stan model (centered predictors, student-t priors). + +`intercept_prior` and `sigma_prior` are `(df, loc, scale)` tuples matching the +`student_t_lpdf` calls in the generated Stan code. +""" +function JuliaProblem2( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + XcT = Matrix(Xc')' + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + + # Pre-compute constants + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + function ℓ(q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + # Likelihood: Normal(Y | Xc*b + α, σ) + r = Base.broadcasted(-,Y, Base.broadcasted(+, α, Base.broadcasted(dot, eachrow(XcT), Ref(b)))) + # Y .- (Xc * b .+ α) + # ) + lp = -half_N_log2π - N * log_σ - mysum(abs2, r) / (2 * σ^2) + + # student_t prior on Intercept + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + + # half-student_t prior on sigma + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + + # Jacobian for exp transform + lp += log_σ + + return lp + end + + return JuliaProblem2(ℓ, q0) +end + +struct JuliaProblem3{F} + _logdensity::F + _q0::Vector{Float64} +end + +""" + JuliaProblem3(formula, data; intercept_prior, sigma_prior) -> JuliaProblem3 + +Like JuliaProblem but pre-allocates a buffer for `Xc * b` to avoid allocation +in the hot loop. +""" +function JuliaProblem3( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + mu = Vector{Float64}(undef, N) # pre-allocated buffer + + # Pre-compute constants + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + function ℓ(q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + # Likelihood: Normal(Y | Xc*b + α, σ) + mul!(mu, Xc, b) # mu = Xc * b (no allocation) + ss = zero(eltype(q)) + @inbounds @simd for i in eachindex(Y) + r = Y[i] - (mu[i] + α) + ss += r * r + end + lp = -half_N_log2π - N * log_σ - ss / (2 * σ^2) + + # student_t prior on Intercept + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + + # half-student_t prior on sigma + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + + # Jacobian for exp transform + lp += log_σ + + return lp + end + + return JuliaProblem3(ℓ, q0) +end + +struct JuliaProblem5{F} + _logdensity::F + _q0::Vector{Float64} +end + +""" + JuliaProblem5(formula, data; ...) -> JuliaProblem5 + +Like JuliaProblem3 but uses 5-arg `mul!` to fuse `r = Y - Xc*b` into one +BLAS call, then handles the intercept shift in the sum-of-squares loop. +""" +function JuliaProblem5( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + r_buf = Vector{Float64}(undef, N) # pre-allocated residual buffer + + # Pre-compute constants + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + function ℓ(q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + # r_buf = Y - Xc*b (one BLAS call via 5-arg mul!) + copyto!(r_buf, Y) + mul!(r_buf, Xc, b, -1.0, 1.0) + + # Subtract intercept and accumulate sum of squares + ss = zero(eltype(q)) + @inbounds @simd for i in eachindex(r_buf) + ri = r_buf[i] - α + ss += ri * ri + end + lp = -half_N_log2π - N * log_σ - ss / (2 * σ^2) + + # student_t prior on Intercept + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + + # half-student_t prior on sigma + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + + # Jacobian for exp transform + lp += log_σ + + return lp + end + + return JuliaProblem5(ℓ, q0) +end + +struct JuliaProblem6{F} + _logdensity::F + _q0::Vector{Float64} +end + +""" + JuliaProblem6(formula, data; ...) -> JuliaProblem6 + +Manual gemv: computes `mu = Xc * b` column-by-column with explicit loops +instead of calling BLAS, then fuses the residual + sum-of-squares in one pass. +""" +function JuliaProblem6( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + r_buf = Vector{Float64}(undef, N) + + # Pre-compute constants + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + function ℓ(q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + # Manual gemv: r_buf = Y - α - Xc * b (column-by-column axpy) + @inbounds @simd for i in 1:N + r_buf[i] = Y[i] - α + end + @inbounds for j in 1:Kc + bj = b[j] + @simd for i in 1:N + r_buf[i] -= Xc[i, j] * bj + end + end + + # Sum of squares + ss = zero(eltype(q)) + @inbounds @simd for i in 1:N + ss += r_buf[i] * r_buf[i] + end + lp = -half_N_log2π - N * log_σ - ss / (2 * σ^2) + + # student_t prior on Intercept + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + + # half-student_t prior on sigma + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + + # Jacobian for exp transform + lp += log_σ + + return lp + end + + return JuliaProblem6(ℓ, q0) +end + +struct JuliaProblem4{F} + _logdensity::F + _q0::Vector{Float64} +end + +""" + JuliaProblem4(formula, data; ...) -> JuliaProblem4 + +Like JuliaProblem2 (broadcasted row-dot) but materializes the broadcasted +residual into a pre-allocated vector before computing the sum of squares. +""" +function JuliaProblem4( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + XcT = Matrix(Xc')' + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + r_buf = Vector{Float64}(undef, N) # pre-allocated residual buffer + + # Pre-compute constants + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + function ℓ(q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + # Materialize broadcasted residual into pre-allocated buffer + r_buf .= Base.broadcasted(-, Y, Base.broadcasted(+, α, Base.broadcasted(dot, eachrow(XcT), Ref(b)))) + lp = -half_N_log2π - N * log_σ - dot(r_buf, r_buf) / (2 * σ^2) + + # student_t prior on Intercept + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + + # half-student_t prior on sigma + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + + # Jacobian for exp transform + lp += log_σ + + return lp + end + + return JuliaProblem4(ℓ, q0) +end + +@inline function mysum(f, bc::Base.Broadcast.Broadcasted) + bc′ = Base.Broadcast.preprocess(nothing, Base.Broadcast.instantiate(bc)) + rv = zero(Float64) + @simd for I in eachindex(bc′) + @inbounds rv += f(bc′[I]) + end + rv +end +@inline function mysum(f, x) + rv = zero(Float64) + @simd for xi in x + @inbounds rv += f(xi) + end + rv +end + +# ── Split-argument version for fine-grained Enzyme annotations ─────────────── +# +# The closure only captures constant data (Y, Xc, priors). The mutable buffer +# is a separate argument so it can be annotated Duplicated while the closure +# stays Const. This avoids shadow allocation for the large data arrays. + +struct JuliaProblem7{F,G} + _logdensity::F # ℓ(q) — for primal / non-Enzyme AD + _logdensity_split::G # ℓ_inner(mu, q) — for Enzyme with split annotations + _q0::Vector{Float64} + _mu::Vector{Float64} # pre-allocated buffer (passed as arg, not captured) +end + +function JuliaProblem7( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + N = length(Y) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + int_df, int_loc, int_scale = intercept_prior + sig_df, sig_loc, sig_scale = sigma_prior + + q0 = zeros(Kc + 2) + mu = Vector{Float64}(undef, N) + + half_N_log2π = N / 2 * log(2π) + log_half = log(0.5) + int_dist = TDist(int_df) + sig_dist = TDist(sig_df) + inv_int_scale = inv(int_scale) + log_int_scale = log(int_scale) + inv_sig_scale = inv(sig_scale) + log_sig_scale = log(sig_scale) + + # Split version: mu is an argument, closure captures only const data + function ℓ_inner(mu, q) + b = @view q[1:Kc] + α = q[Kc + 1] + log_σ = q[Kc + 2] + σ = exp(log_σ) + + mul!(mu, Xc, b) + ss = zero(eltype(q)) + @inbounds @simd for i in eachindex(Y) + r = Y[i] - (mu[i] + α) + ss += r * r + end + lp = -half_N_log2π - N * log_σ - ss / (2 * σ^2) + + lp += logpdf(int_dist, (α - int_loc) * inv_int_scale) - log_int_scale + lp += logpdf(sig_dist, (σ - sig_loc) * inv_sig_scale) - log_sig_scale - log_half + lp += log_σ + + return lp + end + + # Wrapper for primal / non-Enzyme use + ℓ(q) = ℓ_inner(mu, q) + + return JuliaProblem7(ℓ, ℓ_inner, q0, mu) +end + +function _benchmark_enzyme_split(p::JuliaProblem7, mode::Symbol; enzyme_mode=Enzyme.Reverse) + q0 = p._q0 + mu = p._mu + dmu = zeros(length(mu)) + ℓ_inner = p._logdensity_split + if mode === :primal + return @be $(p._logdensity)($q0) + elseif mode === :gradient + grad = zeros(length(q0)) + if enzyme_mode === Enzyme.Reverse || enzyme_mode isa Enzyme.ReverseMode + return @be begin + fill!($dmu, 0.0) + fill!($grad, 0.0) + Enzyme.autodiff( + $enzyme_mode, + Enzyme.Const($ℓ_inner), + Enzyme.Active, + Enzyme.Duplicated($mu, $dmu), + Enzyme.Duplicated($q0, $grad), + ) + end + else + # Forward mode: use Duplicated return, batch over parameters + Kc = length(q0) + seeds = [zeros(Kc) for _ in 1:Kc] + for i in 1:Kc; seeds[i][i] = 1.0; end + dmus = [zeros(length(mu)) for _ in 1:Kc] + batch_seeds = Enzyme.BatchDuplicated(q0, ntuple(i -> seeds[i], Kc)) + batch_dmus = Enzyme.BatchDuplicated(mu, ntuple(i -> dmus[i], Kc)) + return @be begin + for s in $seeds; fill!(s, 0.0); end + for i in 1:$Kc; $(seeds)[i][i] = 1.0; end + for d in $dmus; fill!(d, 0.0); end + Enzyme.autodiff( + $enzyme_mode, + Enzyme.Const($ℓ_inner), + Enzyme.BatchDuplicated($mu, $(ntuple(i -> dmus[i], Kc))), + Enzyme.BatchDuplicated($q0, $(ntuple(i -> seeds[i], Kc))), + ) + end + end + else + throw(ArgumentError("Unknown mode :$mode.")) + end +end + +const AnyJuliaProblem = Union{JuliaProblem, JuliaProblem2, JuliaProblem3, JuliaProblem4, JuliaProblem5, JuliaProblem6, JuliaProblem7} + +LogDensityProblems.dimension(p::AnyJuliaProblem) = length(p._q0) +LogDensityProblems.capabilities(::Type{<:AnyJuliaProblem}) = LogDensityProblems.LogDensityOrder{1}() +LogDensityProblems.logdensity(p::AnyJuliaProblem, q::AbstractVector{<:Real}) = p._logdensity(q) + +function LogDensityProblems.logdensity_and_gradient(p::AnyJuliaProblem, q::AbstractVector{<:Real}) + grad = similar(q, Float64) + prep = DI.prepare_gradient(p._logdensity, AutoForwardDiff(), q) + val, _ = DI.value_and_gradient!(p._logdensity, grad, prep, AutoForwardDiff(), q) + return val, grad +end + +function _benchmark(p::AnyJuliaProblem, mode::Symbol; ad=AutoForwardDiff()) + q0 = p._q0 + ℓ = p._logdensity + if mode === :primal + return @be $ℓ($q0) + elseif mode === :gradient + prep = DI.prepare_gradient(ℓ, ad, q0) + grad = similar(q0) + return @be DI.value_and_gradient!($ℓ, $grad, $prep, $ad, $q0) + else + throw(ArgumentError("Unknown mode :$mode. Choose :primal or :gradient.")) + end +end + +# ── Turing (DynamicPPL) problem ────────────────────────────────────────────── +# +# Uses DynamicPPL's @model macro to define the same regression model. +# Gradients are computed via DifferentiationInterface with a user-selected +# AD backend. + +@model function _turing_brms_linear(Y, Xc, Kc, int_prior, sig_prior) + # Flat prior on regression coefficients (matches brms default) + b ~ filldist(Flat(), Kc) + + # student_t prior on Intercept + Intercept ~ int_prior[2] + int_prior[3] * TDist(int_prior[1]) + + # half-student_t prior on sigma + sigma ~ truncated(sig_prior[2] + sig_prior[3] * TDist(sig_prior[1]), lower=0.0) + + # Likelihood + mu = Xc * b .+ Intercept + for i in eachindex(Y) + Y[i] ~ Normal(mu[i], sigma) + end +end + +@model function _turing_brms_linear_addlogprob(Y, Xc, Kc, int_prior, sig_prior) + N = length(Y) + + # Flat prior on regression coefficients (matches brms default) + b ~ filldist(Flat(), Kc) + + # student_t prior on Intercept + Intercept ~ int_prior[2] + int_prior[3] * TDist(int_prior[1]) + + # half-student_t prior on sigma + sigma ~ truncated(sig_prior[2] + sig_prior[3] * TDist(sig_prior[1]), lower=0.0) + + # Likelihood via @addlogprob! — bypasses per-observation tilde processing + dmu = Y .- (Xc * b .+ Intercept) + Turing.@addlogprob! -N/2 * log(2π) - N * log(sigma) - sum(abs2, dmu) / (2 * sigma^2) +end + +struct TuringProblem{L} + _logdensity::L # DynamicPPL.LogDensityFunction + _q0::Vector{Float64} +end + +""" + TuringProblem(formula, data; intercept_prior, sigma_prior) -> TuringProblem + +Build a DynamicPPL model matching the brms-generated Stan model and wrap it +in a `LogDensityFunction` that implements the `LogDensityProblems` interface. +""" +function TuringProblem( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + model = _turing_brms_linear(Y, Xc, Kc, intercept_prior, sigma_prior) + ℓ = DynamicPPL.LogDensityFunction(model, DynamicPPL.getlogjoint_internal, DynamicPPL.LinkAll()) + + q0 = zeros(LogDensityProblems.dimension(ℓ)) + return TuringProblem(ℓ, q0) +end + +""" + TuringProblem with `@addlogprob!` — uses `:turing2` backend. + +Same priors as the standard Turing model, but the likelihood is computed +manually and added via `Turing.@addlogprob!`, bypassing per-observation +tilde processing. +""" +function TuringProblem2( + formula::String, data::DataFrame; + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), + kwargs..., +) + response, predictors = _parse_formula(formula) + Y = Vector{Float64}(data[!, response]) + Kc = length(predictors) + Xc, _ = _center_predictors(data, predictors) + + model = _turing_brms_linear_addlogprob(Y, Xc, Kc, intercept_prior, sigma_prior) + ℓ = DynamicPPL.LogDensityFunction(model, DynamicPPL.getlogjoint_internal, DynamicPPL.LinkAll()) + + q0 = zeros(LogDensityProblems.dimension(ℓ)) + return TuringProblem(ℓ, q0) +end + +LogDensityProblems.dimension(p::TuringProblem) = length(p._q0) +LogDensityProblems.capabilities(::Type{<:TuringProblem}) = LogDensityProblems.LogDensityOrder{1}() +LogDensityProblems.logdensity(p::TuringProblem, q::AbstractVector{<:Real}) = + LogDensityProblems.logdensity(p._logdensity, q) + +function LogDensityProblems.logdensity_and_gradient(p::TuringProblem, q::AbstractVector{<:Real}) + f = Base.Fix1(LogDensityProblems.logdensity, p._logdensity) + grad = similar(q, Float64) + prep = DI.prepare_gradient(f, AutoForwardDiff(), q) + val, _ = DI.value_and_gradient!(f, grad, prep, AutoForwardDiff(), q) + return val, grad +end + +function _benchmark(p::TuringProblem, mode::Symbol; ad=AutoForwardDiff()) + q0 = p._q0 + ℓ_dppl = p._logdensity + f = Base.Fix1(LogDensityProblems.logdensity, ℓ_dppl) + if mode === :primal + return @be $f($q0) + elseif mode === :gradient + prep = DI.prepare_gradient(f, ad, q0) + grad = similar(q0) + return @be DI.value_and_gradient!($f, $grad, $prep, $ad, $q0) + else + throw(ArgumentError("Unknown mode :$mode. Choose :primal or :gradient.")) + end +end + +# ── Public API ──────────────────────────────────────────────────────────────── + +""" + make_problem(formula, data, backend) -> PyMCProblem | StanProblem | JuliaProblem | TuringProblem + +Build a log-density problem for `backend` (`:bambi`, `:brms`, `:julia`, or `:turing`). +The returned object implements the `LogDensityProblems` interface: +`logdensity_and_gradient(problem, q)` takes a flat `Vector{Float64}` of +unconstrained parameters and returns `(logp::Float64, grad::Vector{Float64})`. +""" +function make_problem( + formula::String, + data::DataFrame, + backend::Symbol; + compiler::Symbol = :pytensor, + source::Union{Symbol,Nothing} = nothing, + key::Union{Symbol,Nothing} = nothing, + models_dir::String = joinpath(@__DIR__, "models"), + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), +) + if backend === :bambi + return PyMCProblem(formula, data; compiler) + elseif backend === :brms + return StanProblem(formula, data; source, key, models_dir) + elseif backend === :julia + return JuliaProblem(formula, data; intercept_prior, sigma_prior) + elseif backend === :julia2 + return JuliaProblem2(formula, data; intercept_prior, sigma_prior) + elseif backend === :julia3 + return JuliaProblem3(formula, data; intercept_prior, sigma_prior) + elseif backend === :julia4 + return JuliaProblem4(formula, data; intercept_prior, sigma_prior) + elseif backend === :julia5 + return JuliaProblem5(formula, data; intercept_prior, sigma_prior) + elseif backend === :julia6 + return JuliaProblem6(formula, data; intercept_prior, sigma_prior) + elseif backend === :julia7 + return JuliaProblem7(formula, data; intercept_prior, sigma_prior) + elseif backend === :turing + return TuringProblem(formula, data; intercept_prior, sigma_prior) + elseif backend === :turing2 + return TuringProblem2(formula, data; intercept_prior, sigma_prior) + else + throw(ArgumentError("Unknown backend :$backend. Choose :bambi, :brms, :julia, or :turing.")) + end +end + +# ── Low-overhead benchmark helpers ─────────────────────────────────────────── +# +# These bypass the LogDensityProblems interface to eliminate interop overhead: +# +# PyMCProblem: pre-converts q0 to a numpy array with $ interpolation, so each +# timed call is purely the pytensor computation (no Julia→Python conversion). +# +# StanProblem: pre-allocates the gradient buffer (log_density_gradient!) and +# uses $ interpolation for the model and q0, so each timed call is the C +# computation only (no alloc for the gradient vector). +# For the primal, uses propto=false (avoids autodiff-type overhead when no +# gradient is needed; see BridgeStan internals docs). + +function _benchmark(p::PyMCProblem, mode::Symbol; kwargs...) + q0_np = get_np().asarray(p._q0) + if mode === :primal + fn = p._logp_fn + return @be $fn($q0_np) + elseif mode === :gradient + fn = p._fn + return @be $fn($q0_np) + else + throw(ArgumentError("Unknown mode :$mode. Choose :primal or :gradient.")) + end +end + +function _benchmark(p::StanProblem, mode::Symbol; kwargs...) + q0 = p._q0 + if mode === :primal + return @be BridgeStan.log_density($p._model, $q0; propto=false, jacobian=true) + elseif mode === :gradient + grad = zeros(length(q0)) + return @be BridgeStan.log_density_gradient!($p._model, $q0, $grad) + else + throw(ArgumentError("Unknown mode :$mode. Choose :primal or :gradient.")) + end +end + +""" + benchmark_model(formula, data, backend; mode, ad) -> Chairmarks.Sample + +Build a log-density problem for the given backend, then use Chairmarks.@be to +benchmark a single evaluation at the initial unconstrained parameter vector. + +`mode` controls what is benchmarked: +- `:gradient` (default) — logp + gradient +- `:primal` — logp only, without gradient + +`ad` selects the AD backend for gradient computation (`:julia` / `:turing` only): +- `AutoForwardDiff()` (default), `AutoEnzyme()`, or `AutoMooncake()` + +Model compilation / pytensor tracing is excluded from the timing. +Interop overhead (Julia↔Python array conversion, gradient allocation) is +eliminated via \$ interpolation and pre-allocated buffers. +""" +function benchmark_model( + formula::String, + data::DataFrame, + backend::Symbol; + mode::Symbol = :gradient, + ad = AutoForwardDiff(), + compiler::Symbol = :pytensor, + source::Union{Symbol,Nothing} = nothing, + key::Union{Symbol,Nothing} = nothing, + models_dir::String = joinpath(@__DIR__, "models"), + intercept_prior::NTuple{3,Float64} = (3.0, 2.1, 2.5), + sigma_prior::NTuple{3,Float64} = (3.0, 0.0, 2.5), +) + problem = make_problem(formula, data, backend; compiler, source, key, models_dir, intercept_prior, sigma_prior) + return _benchmark(problem, mode; ad) +end diff --git a/scripts/Benchmarking/main.jl b/scripts/Benchmarking/main.jl new file mode 100644 index 0000000..ef892d1 --- /dev/null +++ b/scripts/Benchmarking/main.jl @@ -0,0 +1,90 @@ +# Gemini claims you can do this! +using Pkg +Pkg.activate(@__DIR__) +insert!(LOAD_PATH, 2, joinpath(@__DIR__, "..")) + +include("../macro.jl") +include("../vimpl.jl") +include("../examples/database.jl") + +using Chairmarks, Random + +db = Database() +df = db.dataset(:bambi, :escs) +fdf = map(Vector{Float64}, (;df.drugs, df.o, df.c, df.e, df.a, df.n)) +# Using fdf is considerably faster than using df +tmp = @brm fdf """ + loc ~ o + c + e + a + n + log(err_scale) ~ 1 + drugs ~ Normal(loc, err_scale) +""" +display(@brm """ + loc ~ o + c + e + a + n + log(err_scale) ~ 1 + drugs ~ Normal(loc, err_scale) +""") +vtmp = VBRMI(tmp) +display(vtmp) +display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity($vtmp, _)) + +# import Reactant + +# rx = Reactant.to_rarray(randn(LogDensityProblems.dimension(vtmp))) +# errors: NoFieldMatchError(...) +# _rtmp = Reactant.to_rarray(vtmp) +# errors: MethodError: no method matching _copyto!(::SubArray{…}, ::Base.Broadcast.Broadcasted{…}) +# rtmp = Reactant.@compile LogDensityProblems.logdensity(vtmp, rx) +# display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity($rtmp, _)) +# error() + +using LogDensityProblemsAD, Mooncake, Enzyme, DifferentiationInterface +struct ADLogDensity{F, B, E} + f::F + backend::B + extras::E +end + +ADLogDensity(f, backend) = ADLogDensity( + f, + backend, + DifferentiationInterface.prepare_gradient( + Base.Fix1(LogDensityProblems.logdensity, f), + backend, + zeros(LogDensityProblems.dimension(f)) + ) +) + +LogDensityProblems.capabilities(::ADLogDensity) = LogDensityProblems.LogDensityOrder{1}() +LogDensityProblems.dimension(p::ADLogDensity) = LogDensityProblems.dimension(p.f) +LogDensityProblems.logdensity(p::ADLogDensity, x) = LogDensityProblems.logdensity(p.f, x) +LogDensityProblems.logdensity_and_gradient( + p::ADLogDensity, x +) = DifferentiationInterface.value_and_gradient( + Base.Fix1(LogDensityProblems.logdensity, p.f), p.extras, p.backend, x +) + + + +mvtmp1 = ADgradient(AutoMooncake(), vtmp) +mvtmp2 = ADLogDensity(vtmp, AutoMooncake()) +evtmp1 = ADgradient(AutoEnzyme(; mode = Enzyme.set_runtime_activity(Enzyme.Reverse)), vtmp) +evtmp2 = ADLogDensity(vtmp, AutoEnzyme(; + mode=Enzyme.set_runtime_activity(Enzyme.Reverse), + function_annotation=Enzyme.Duplicated +)) + +x = randn(LogDensityProblems.dimension(vtmp)) +display(mapreduce(hcat, (mvtmp1, mvtmp2, evtmp1, evtmp2)) do b + LogDensityProblems.logdensity_and_gradient(b, copy(x))[2] +end) + +@info "Primal" +display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity($vtmp, _)) +@info "Inefficient Mooncake skipped..." +# display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity_and_gradient($mvtmp1, _)) +@info "Mooncake" +display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity_and_gradient($mvtmp2, _)) +@warn "wrong Enzyme skipped..." +# display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity_and_gradient($evtmp1, _)) +@info "correct Enzyme" +display(@be randn(LogDensityProblems.dimension(vtmp)) LogDensityProblems.logdensity_and_gradient($evtmp2, _)) \ No newline at end of file diff --git a/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/data.json b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/data.json new file mode 100644 index 0000000..e37c48a --- /dev/null +++ b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/data.json @@ -0,0 +1 @@ +{"N":604,"Y":[1.8571,3.0714,1.5714,2.2143,1.0714,1.4286,1.1429,2.1429,2.1429,1.0714,1.8571,2.5,1.8571,2.7143,1.4286,1.7143,1.7143,3.1429,2.7143,1.9286,2.7143,2.2857,2.3571,1.7143,2,2.9286,2.5,2.9286,2.6429,2.2143,2.7857,2.7143,3.0714,2,3,1.9286,3.0714,2.5714,2.7143,3.0714,1.7857,1.7857,3.5714,2.2857,2.7857,2.1429,2.7143,2.7143,2.3571,2.2857,1.8571,2.5714,2.1429,3.0714,2.0714,3.5,1.7143,2.5,2.1429,1.1429,3.5,1.8571,3.2857,2.6429,2,1.8571,2.3571,2.2143,3.1429,2.6429,1.2857,1.6429,2.6429,2.0714,2.2143,3.0714,2.4286,3.2143,2.7143,2.0714,2.4286,2.0714,2.9286,3.4286,1.9286,2.5714,1,2.4286,2.1429,1.7143,1.7857,3.3571,1.7143,1.8571,2.0714,2.7143,1.5,1.5714,1.1429,1,2.8571,3.0714,2.1429,3.3571,3.2143,2.7857,2.3571,1.6429,2.2857,2.4286,2.4286,1.2857,1.5714,2.2143,1.9286,1.6429,2,3.0714,2.5,2.9286,2.5714,2,2.2143,1.2857,1.0714,3,2.6429,1.5,2.0714,4.2857,2.6429,3.1429,1,2.5714,2.8571,2,2.4286,1.7857,1.5714,2.4286,2.5714,2.5,2.0714,2.5,1.6429,2.3571,2.2143,1.3571,3.2143,1.8571,2.7143,1.5714,1.3571,2.1429,1.6429,3.6429,2.5714,2.3571,2.2143,2.1429,1.5,1.1429,2,1.8571,2.9286,2.7143,3.2143,1.5,2.2143,2.5,1.7143,2.1429,1.0714,2.4286,2.5,2.1429,1.8571,1.8571,2.9286,1.0714,1.7143,3.6429,2.7857,1.8571,2,2.4286,2.6429,2.5714,1.8571,3.2857,1.0714,2.2143,2.2857,1.7857,2.7857,2.2857,1.7143,1,1.6429,2.3571,2.5714,2.2857,1.2857,1.4286,1.6429,3.0714,1.8571,1.8571,3.4286,3.2857,2.5,2.6429,3.0714,2.5714,2.6429,3.3571,2.2857,1.4286,2.2143,2.4286,2.9286,1.7857,2.4286,2.1429,2.0714,3.2857,2.2143,1.1429,2.1429,2.0714,2.1429,2.6429,1.0714,1.9286,2.1429,2,3.2143,3.2857,1.2143,2.1429,3.5,1.5714,1.2143,1.7857,1.2857,1.5714,2,2.6429,2,3,3.2143,1.7143,2.3571,2.1429,3.2143,2.2143,1.2143,1.8571,1.9286,2.1429,1.2143,2.6429,2.5,1.5714,2.2857,1.9286,2.1429,1,2.2143,3,2.1429,1.8571,1.9286,3.2143,2.2857,2.4286,1,1.3571,1.7857,1.7857,3.1429,3.3571,2.4286,2.3571,1.9286,1.5714,1.3571,3.7143,3.2143,3.8571,2.0714,3.7857,2.2857,1,2.3571,2.7143,1.2857,2.5,2.2143,2.7143,1,3.5,2.8571,3.2857,2.1429,1.9286,3.1429,1.2143,2.1429,3.3571,2,2.3571,1.7857,2.1429,2.3571,3.4286,2,1.2857,2.2143,3.3571,1.3571,2.3571,3.0714,2.0714,2.5,2.7857,2.2857,3.5,2.5,1.8571,3.0714,2.2143,1.1429,2.7143,3.1429,2.1429,1.2857,2,1.7143,3,3.1429,2.9286,3.4286,2.7857,2.5,1.1429,2.5,1.3571,3.0714,2.9286,2,2.7857,2.3571,1,2.5714,2.1429,1,2.5714,1.6429,2.2143,2.4286,2.7857,2.7857,3.2143,1.4286,2.4286,2.4286,2.2857,3.0714,1,2.0714,2.6429,1.7143,1.9286,1.4286,1.0714,2.2143,3.2857,1.7143,2.2143,3.4286,1.1429,2.4286,2.4286,2.1429,1.7857,2.6429,1.7143,2.1429,2.6429,2.4286,2.5714,1.6429,2.2143,2.2857,1.2857,1.7143,2.6429,2,1.5,2.2857,1.5714,3,1.6429,3.0714,1.5,2.2857,2.2857,2.0714,2.7143,1.8571,2.2143,2,2.4286,2.2143,1.8571,3.2857,2.4286,1,2.9286,2.3571,2.4286,1.6429,2.4286,2.7143,2,2.4286,1.2857,1.0714,2.5714,2.4286,3.2857,2.2857,1.5714,2,2.6429,1.2143,3.2143,1.3571,1.7143,3.1429,3,2,2.0714,2.2143,3.1429,2.0714,1.1429,1.7857,1.7857,1.7857,1.8571,1.7857,2.5,2.0714,2,2.8571,2.7857,2.4286,2.8571,2.9286,1.7857,1.2143,3.1429,1.9286,3.0714,2.1429,1.6429,2.5714,1.5,3.2143,1.5714,2.5714,1.5714,1.2857,2.2857,1.0714,2.7857,2.3571,2.4286,2.0714,3,1.9286,2.1429,1.8571,2.3571,2.9286,2.2857,1.5,1.8571,1.4286,2.4286,3.5,2.5,1.4286,2.9286,1.6429,2.2857,1.9286,1.7143,2.1429,1.5,1.2143,1.9286,1.6429,1.3571,3.0714,1.4286,2.6429,1.3571,2.0714,3,1.3571,1.8571,1.4286,1.7857,2,2.4286,1.4286,2,3.0714,1.5,2,2.4286,2,2.6429,3.9286,2.4286,2,1.7143,1.4286,2,1.7857,1.8571,2.7857,1.1429,1.4286,2.2143,2.0714,1.4286,1.8571,2.6429,3.5,2,2,2.9286,1.7143,2.5714,2.2857,1.2143,2.6429,1.2143,1.9286,1.8571,1.5,1.5,1,1.8571,2.2857,2.2857,2,2.8571,1.2143,2.1429,1.7143,1.4286,2.6429,1.6429,1.5714,1.6429,1.5714,1.0714,2.0714,1.4286,2.3571,2.4286,2.4286,2.2857,1.8571,1.4286,1.7857,1.6429,1.6429,1.0714,3.7143,3.0714,2.2143,2.1429,1.7857,2,2.1429,3.8571,1.6429,3,2.6429,1.7143,2.7857,1.8571,3.1429,2.4286,1.5714,1.5,2.5,3.3571],"K":6,"Kc":5,"X":[[1,122,89,102,115,117],[1,142,132,92,140,69],[1,117,173,101,148,69],[1,130,134,99,135,87],[1,100,130,116,117,50],[1,150,145,130,97,62],[1,105,129,121,128,69],[1,92,125,99,134,82],[1,129,137,123,124,65],[1,85,108,103,145,80],[1,111,84,103,97,122],[1,92,112,99,132,75],[1,111,125,106,108,111],[1,152,97,122,115,93],[1,82,154,101,138,44],[1,120,101,107,109,126],[1,73,127,82,125,85],[1,115,117,93,126,123],[1,114,114,132,124,59],[1,116,111,135,119,50],[1,98,128,99,131,73],[1,107,139,117,98,59],[1,102,154,138,106,59],[1,115,129,99,137,70],[1,101,120,149,127,112],[1,107,111,93,122,71],[1,127,91,87,124,70],[1,108,112,77,122,53],[1,90,137,92,132,82],[1,123,152,123,95,55],[1,106,133,103,138,70],[1,92,108,95,121,90],[1,131,122,105,80,84],[1,96,130,94,118,73],[1,83,141,117,93,64],[1,122,137,90,123,69],[1,128,121,123,106,66],[1,114,109,98,119,83],[1,114,116,65,119,103],[1,140,131,136,69,97],[1,65,146,83,127,63],[1,109,145,119,134,70],[1,138,112,123,121,82],[1,84,123,88,101,93],[1,142,106,88,132,96],[1,100,155,123,129,58],[1,127,103,78,107,80],[1,124,123,110,90,83],[1,121,149,129,141,54],[1,131,96,101,138,105],[1,103,151,124,134,49],[1,89,126,105,99,85],[1,82,126,86,98,76],[1,174,133,143,92,142],[1,110,131,110,103,103],[1,131,114,102,97,68],[1,111,122,103,143,91],[1,111,129,86,118,51],[1,115,144,126,122,52],[1,129,101,83,133,109],[1,146,141,144,116,51],[1,124,127,106,119,74],[1,117,144,111,126,69],[1,86,120,61,112,124],[1,112,123,107,116,94],[1,110,124,110,127,75],[1,129,145,121,145,64],[1,107,151,103,100,54],[1,142,130,115,133,100],[1,124,129,124,110,78],[1,99,143,109,133,66],[1,122,145,122,123,76],[1,141,128,101,100,73],[1,107,108,93,113,71],[1,140,114,104,112,107],[1,144,129,115,101,80],[1,108,110,88,124,93],[1,126,105,90,129,77],[1,122,135,113,110,78],[1,127,91,138,146,104],[1,116,136,125,113,70],[1,121,113,90,125,68],[1,137,128,132,117,102],[1,125,125,117,129,72],[1,106,124,94,149,72],[1,137,91,62,124,114],[1,100,125,120,142,57],[1,84,143,77,136,53],[1,110,123,65,131,146],[1,138,163,150,136,82],[1,114,124,117,114,67],[1,107,121,99,111,100],[1,124,124,112,120,98],[1,92,112,79,126,85],[1,78,119,93,122,62],[1,124,122,112,125,54],[1,103,134,124,129,61],[1,123,115,97,122,59],[1,78,155,82,138,90],[1,90,140,103,147,71],[1,103,130,109,118,56],[1,122,155,75,74,56],[1,92,149,111,106,91],[1,127,122,108,115,132],[1,137,114,105,114,84],[1,97,119,71,85,103],[1,109,127,110,142,90],[1,108,145,109,129,67],[1,103,158,125,134,34],[1,89,111,86,120,84],[1,144,127,133,132,61],[1,136,160,103,148,63],[1,161,136,63,141,50],[1,111,118,96,111,62],[1,109,129,109,112,74],[1,119,127,91,141,64],[1,80,154,109,130,50],[1,102,115,133,111,72],[1,115,109,57,115,69],[1,119,116,127,97,92],[1,119,141,92,127,83],[1,131,128,92,126,79],[1,74,123,76,117,70],[1,112,126,114,153,108],[1,78,135,96,96,61],[1,104,157,140,105,39],[1,115,126,90,118,96],[1,82,128,82,123,73],[1,166,118,111,108,107],[1,138,97,125,107,88],[1,106,136,79,126,47],[1,106,104,96,95,98],[1,118,130,144,149,26],[1,111,137,109,84,90],[1,113,141,94,122,77],[1,88,131,80,132,91],[1,117,121,114,93,67],[1,157,97,116,139,163],[1,130,133,100,144,49],[1,108,67,84,111,149],[1,114,112,70,109,69],[1,104,91,91,97,94],[1,110,128,111,130,84],[1,123,140,125,119,66],[1,120,135,136,162,61],[1,102,93,102,122,68],[1,105,119,136,125,49],[1,107,130,103,122,75],[1,106,139,108,121,65],[1,137,112,94,143,61],[1,124,157,101,143,34],[1,131,138,118,134,57],[1,103,125,122,128,67],[1,77,103,89,136,119],[1,139,138,134,125,84],[1,122,125,103,94,100],[1,87,135,62,130,87],[1,111,136,136,128,59],[1,111,111,102,157,45],[1,95,111,109,103,114],[1,105,146,106,136,80],[1,114,119,104,125,65],[1,137,130,126,117,63],[1,131,111,93,137,50],[1,146,143,112,147,66],[1,142,123,129,110,94],[1,130,141,99,107,67],[1,90,91,52,140,141],[1,108,160,108,125,61],[1,114,153,105,93,62],[1,109,97,96,132,98],[1,105,130,119,144,82],[1,109,126,107,136,77],[1,139,117,133,145,75],[1,136,99,104,100,84],[1,92,116,124,93,77],[1,140,125,109,100,66],[1,101,130,105,139,76],[1,145,118,96,85,70],[1,98,139,128,131,142],[1,132,113,125,123,71],[1,114,102,113,133,80],[1,136,132,113,129,84],[1,76,133,87,127,51],[1,118,102,81,121,91],[1,114,140,126,133,44],[1,120,107,107,120,68],[1,122,120,121,121,90],[1,112,139,143,107,82],[1,157,158,134,124,57],[1,113,127,119,117,55],[1,132,130,123,99,45],[1,96,121,92,124,71],[1,95,104,79,111,95],[1,130,125,127,109,66],[1,120,130,100,131,81],[1,103,89,72,127,116],[1,105,132,92,131,110],[1,84,97,114,99,126],[1,101,110,96,115,74],[1,107,124,95,130,84],[1,106,97,108,138,105],[1,102,140,96,130,62],[1,96,106,115,121,83],[1,117,122,113,119,95],[1,108,140,130,127,69],[1,138,132,138,133,60],[1,101,97,121,121,75],[1,54,121,116,137,57],[1,104,109,119,89,85],[1,92,158,87,101,64],[1,132,109,79,106,117],[1,159,98,109,124,79],[1,97,127,122,130,62],[1,99,151,133,105,75],[1,141,104,118,140,80],[1,116,120,126,149,64],[1,110,117,120,122,78],[1,101,126,105,128,72],[1,119,161,126,144,34],[1,128,137,123,108,82],[1,115,122,94,146,69],[1,125,155,117,151,23],[1,143,108,130,134,63],[1,121,131,105,119,95],[1,115,115,129,112,87],[1,137,133,104,127,75],[1,117,159,120,92,65],[1,125,118,107,118,73],[1,97,120,102,124,116],[1,114,131,90,115,39],[1,114,148,90,87,91],[1,105,127,84,143,107],[1,95,152,135,119,80],[1,104,133,97,125,78],[1,92,115,113,143,108],[1,100,108,116,112,86],[1,91,123,130,112,84],[1,105,123,80,140,67],[1,136,109,94,126,81],[1,64,78,62,101,148],[1,79,92,158,110,41],[1,96,156,94,147,31],[1,83,123,91,155,79],[1,120,137,108,147,93],[1,110,104,106,143,65],[1,98,131,114,106,89],[1,80,156,104,96,57],[1,64,135,76,144,60],[1,108,143,114,115,62],[1,131,96,93,140,138],[1,141,127,135,106,82],[1,51,136,105,103,67],[1,103,99,70,139,105],[1,98,127,102,123,61],[1,100,130,104,134,83],[1,109,126,125,134,66],[1,129,142,93,123,68],[1,52,155,128,125,62],[1,88,117,90,128,57],[1,107,103,112,156,83],[1,112,127,128,125,47],[1,111,127,129,133,67],[1,99,98,118,130,125],[1,124,113,105,131,71],[1,77,113,82,125,94],[1,79,123,86,126,54],[1,80,156,103,146,51],[1,112,138,110,135,57],[1,77,140,122,103,68],[1,111,114,111,113,89],[1,94,121,97,106,57],[1,138,116,136,138,61],[1,102,133,81,138,73],[1,112,134,123,148,95],[1,89,103,123,117,93],[1,89,136,94,112,112],[1,101,100,110,107,79],[1,91,96,85,127,93],[1,100,136,99,141,69],[1,147,121,143,112,88],[1,102,151,149,118,82],[1,116,116,107,100,111],[1,112,145,118,112,76],[1,91,149,87,115,44],[1,133,133,107,149,72],[1,142,123,136,138,76],[1,77,91,102,73,97],[1,121,110,155,118,50],[1,118,102,109,78,125],[1,96,157,115,139,75],[1,111,141,144,124,119],[1,115,144,99,122,60],[1,90,117,102,138,75],[1,111,107,112,123,65],[1,133,140,136,128,74],[1,124,159,130,136,75],[1,123,129,133,132,72],[1,94,123,100,89,93],[1,139,132,141,119,30],[1,64,127,72,153,126],[1,131,111,92,121,98],[1,137,126,119,110,98],[1,128,124,124,93,117],[1,108,141,121,124,74],[1,97,135,91,117,92],[1,130,131,103,103,86],[1,82,141,117,123,67],[1,131,113,138,99,126],[1,86,118,117,122,82],[1,129,116,109,135,55],[1,91,89,72,105,122],[1,73,134,59,143,94],[1,111,127,103,139,72],[1,109,122,115,145,94],[1,161,96,137,126,76],[1,76,140,100,139,60],[1,98,147,103,136,53],[1,105,131,97,113,70],[1,149,89,133,123,83],[1,80,157,62,106,150],[1,131,131,81,104,74],[1,97,129,114,115,64],[1,102,150,90,137,127],[1,110,133,111,113,69],[1,141,99,115,129,71],[1,124,91,112,112,89],[1,126,127,124,117,66],[1,114,130,118,103,65],[1,122,127,110,129,79],[1,111,120,98,120,114],[1,109,138,121,153,87],[1,86,134,125,128,75],[1,93,133,91,134,69],[1,152,98,122,137,71],[1,70,130,70,122,114],[1,110,105,109,123,89],[1,138,119,110,127,73],[1,101,91,96,96,102],[1,130,131,99,99,94],[1,112,118,74,123,69],[1,130,89,96,111,125],[1,111,95,94,88,116],[1,128,114,115,130,51],[1,58,155,129,143,45],[1,126,123,92,127,50],[1,121,150,130,126,66],[1,112,110,110,96,113],[1,112,140,122,109,90],[1,144,110,104,141,76],[1,74,123,87,127,68],[1,114,119,79,130,103],[1,142,164,155,124,59],[1,103,108,94,116,129],[1,125,125,129,122,78],[1,108,113,134,121,76],[1,81,163,118,147,27],[1,103,151,92,127,61],[1,91,127,107,119,66],[1,101,121,103,86,142],[1,128,100,108,129,127],[1,88,122,141,152,58],[1,137,101,76,119,94],[1,111,117,129,127,74],[1,159,101,105,153,84],[1,112,125,130,133,66],[1,105,127,100,123,92],[1,159,180,100,143,63],[1,134,140,89,133,111],[1,73,155,92,137,85],[1,110,146,105,129,103],[1,132,107,114,129,45],[1,106,125,105,145,91],[1,140,125,116,131,63],[1,78,136,91,171,118],[1,89,126,52,139,100],[1,120,121,123,124,82],[1,110,117,106,143,73],[1,115,140,113,145,105],[1,91,129,97,137,66],[1,127,124,118,113,106],[1,145,119,74,135,73],[1,133,145,121,133,38],[1,127,132,130,134,70],[1,97,129,117,150,75],[1,99,136,86,147,71],[1,135,113,113,125,72],[1,135,120,129,139,73],[1,146,95,95,122,90],[1,94,144,128,135,74],[1,157,115,115,128,78],[1,123,123,92,90,103],[1,95,158,143,140,46],[1,159,126,134,130,128],[1,129,133,126,121,80],[1,108,119,111,124,70],[1,129,121,113,132,73],[1,131,129,119,135,89],[1,121,44,135,131,102],[1,116,133,119,137,77],[1,126,128,113,121,124],[1,107,113,99,136,85],[1,135,93,70,113,83],[1,135,81,92,139,101],[1,120,121,119,118,56],[1,117,156,79,121,27],[1,109,116,120,132,74],[1,135,132,102,147,45],[1,111,111,115,151,90],[1,116,159,128,136,66],[1,127,127,116,108,115],[1,137,145,120,160,55],[1,124,119,97,90,121],[1,127,142,92,143,87],[1,117,141,94,122,115],[1,72,131,105,153,102],[1,139,136,100,106,67],[1,112,134,105,115,64],[1,117,118,111,132,75],[1,131,94,109,124,75],[1,99,99,91,120,71],[1,138,114,70,128,89],[1,80,147,50,143,75],[1,132,76,120,96,89],[1,103,130,82,122,67],[1,98,149,84,147,102],[1,129,153,121,145,24],[1,93,126,123,123,82],[1,73,141,87,95,82],[1,165,137,98,132,57],[1,135,115,115,138,80],[1,105,168,116,107,34],[1,122,133,114,131,54],[1,120,115,109,135,96],[1,133,103,102,96,112],[1,110,131,122,129,40],[1,107,122,98,125,84],[1,132,132,120,115,54],[1,124,119,119,128,73],[1,138,108,126,145,96],[1,91,117,83,140,89],[1,156,124,141,130,117],[1,113,112,105,127,83],[1,111,122,78,92,130],[1,134,136,92,126,62],[1,108,129,114,119,81],[1,104,85,114,130,94],[1,74,156,109,132,49],[1,126,142,115,126,60],[1,116,118,122,128,84],[1,125,123,134,138,71],[1,116,131,122,117,115],[1,91,114,107,117,90],[1,99,122,84,81,70],[1,94,141,108,127,59],[1,84,130,78,155,36],[1,70,125,82,134,75],[1,109,122,113,112,66],[1,93,107,87,142,92],[1,90,131,120,130,74],[1,146,107,135,148,70],[1,131,120,126,141,96],[1,132,129,140,135,77],[1,139,121,79,155,89],[1,104,128,102,114,71],[1,120,105,74,130,74],[1,124,119,116,134,68],[1,108,107,99,115,95],[1,126,100,129,169,61],[1,108,127,92,127,140],[1,151,132,117,129,84],[1,75,127,92,118,107],[1,102,112,79,99,87],[1,110,150,98,130,74],[1,115,132,114,127,58],[1,131,146,101,126,68],[1,59,154,93,118,66],[1,106,139,83,105,62],[1,141,120,127,133,67],[1,110,130,123,133,68],[1,118,102,85,130,76],[1,107,105,117,122,84],[1,123,144,101,111,103],[1,154,111,101,155,73],[1,98,132,109,117,90],[1,93,146,138,109,116],[1,107,136,105,121,74],[1,135,109,89,116,124],[1,118,148,119,147,45],[1,131,103,134,128,103],[1,131,121,124,154,64],[1,122,118,139,119,65],[1,137,128,115,112,68],[1,128,95,91,127,83],[1,77,148,110,130,56],[1,126,134,99,140,81],[1,78,120,86,125,111],[1,95,118,79,106,56],[1,100,106,109,77,141],[1,106,119,48,126,112],[1,138,136,134,154,44],[1,131,75,42,131,125],[1,109,124,76,148,93],[1,122,100,150,118,84],[1,150,131,137,149,45],[1,111,86,92,148,75],[1,162,122,123,125,103],[1,154,113,111,110,98],[1,93,115,69,63,63],[1,97,129,106,147,58],[1,122,114,101,124,108],[1,111,115,78,103,110],[1,73,151,88,138,101],[1,133,140,95,138,41],[1,112,143,75,134,71],[1,119,136,128,142,52],[1,119,152,98,96,81],[1,124,102,98,101,77],[1,92,116,83,113,123],[1,156,112,130,131,71],[1,126,133,116,112,70],[1,106,131,112,138,68],[1,145,107,104,106,105],[1,133,86,107,141,82],[1,104,93,63,117,93],[1,88,129,77,138,78],[1,101,73,104,113,78],[1,91,115,103,134,101],[1,134,148,126,119,71],[1,117,152,112,135,68],[1,161,114,106,123,68],[1,123,81,94,113,134],[1,102,83,59,147,115],[1,122,134,117,139,90],[1,99,137,98,144,75],[1,126,130,109,130,71],[1,109,136,114,128,75],[1,132,137,148,133,68],[1,114,148,134,137,73],[1,87,129,114,133,92],[1,106,155,107,123,43],[1,132,118,106,126,64],[1,151,97,120,116,101],[1,104,134,61,157,87],[1,89,104,93,115,108],[1,94,125,96,131,114],[1,110,132,98,146,58],[1,137,109,110,89,88],[1,114,126,105,133,79],[1,104,134,107,148,72],[1,105,120,89,104,96],[1,108,123,75,130,67],[1,146,130,120,137,68],[1,106,125,89,114,105],[1,113,117,84,133,86],[1,147,136,96,128,44],[1,104,142,119,147,101],[1,142,136,87,128,60],[1,152,73,98,142,74],[1,111,129,102,135,108],[1,119,119,92,112,90],[1,108,106,127,144,67],[1,105,141,98,130,55],[1,133,135,114,140,49],[1,100,131,112,132,75],[1,94,145,75,141,37],[1,113,120,113,141,67],[1,102,119,80,131,90],[1,112,121,102,137,70],[1,104,108,92,137,103],[1,101,107,86,122,81],[1,94,100,63,138,91],[1,96,98,94,98,96],[1,129,149,94,128,88],[1,129,172,129,155,55],[1,130,136,114,129,63],[1,142,101,90,135,76],[1,84,109,70,107,110],[1,140,51,100,131,117],[1,93,144,89,136,58],[1,134,113,94,136,94],[1,81,129,80,138,87],[1,91,92,81,120,132],[1,100,90,96,127,104],[1,152,123,150,139,80],[1,143,116,120,115,98],[1,127,150,114,147,92],[1,112,125,114,103,106],[1,122,113,114,124,88],[1,128,122,121,140,56],[1,135,110,120,139,90],[1,123,124,148,108,105],[1,86,92,88,133,109],[1,104,70,109,125,98],[1,161,136,145,105,53],[1,125,131,114,141,62],[1,129,103,121,137,89],[1,163,145,128,126,67],[1,151,132,153,124,100],[1,95,130,132,149,93],[1,134,136,128,159,69],[1,97,110,112,132,133],[1,174,124,158,155,33],[1,105,102,98,126,121]],"prior_only":0} \ No newline at end of file diff --git a/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model.stan b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model.stan new file mode 100644 index 0000000..52e38ee --- /dev/null +++ b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model.stan @@ -0,0 +1,43 @@ +// generated with brms 2.23.1 +functions { +} +data { + int N; // total number of observations + vector[N] Y; // response variable + int K; // number of population-level effects + matrix[N, K] X; // population-level design matrix + int Kc; // number of population-level effects after centering + int prior_only; // should the likelihood be ignored? +} +transformed data { + matrix[N, Kc] Xc; // centered version of X without an intercept + vector[Kc] means_X; // column means of X before centering + for (i in 2:K) { + means_X[i - 1] = mean(X[, i]); + Xc[, i - 1] = X[, i] - means_X[i - 1]; + } +} +parameters { + vector[Kc] b; // regression coefficients + real Intercept; // temporary intercept for centered predictors + real sigma; // dispersion parameter +} +transformed parameters { + // prior contributions to the log posterior + real lprior = 0; + lprior += student_t_lpdf(Intercept | 3, 2.1, 2.5); + lprior += student_t_lpdf(sigma | 3, 0, 2.5) + - 1 * student_t_lccdf(0 | 3, 0, 2.5); +} +model { + // likelihood including constants + if (!prior_only) { + target += normal_id_glm_lpdf(Y | Xc, Intercept, b, sigma); + } + // priors including constants + target += lprior; +} +generated quantities { + // actual population-level intercept + real b_Intercept = Intercept - dot_product(means_X, b); +} diff --git a/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_loop_inline.stan b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_loop_inline.stan new file mode 100644 index 0000000..65dbc26 --- /dev/null +++ b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_loop_inline.stan @@ -0,0 +1,39 @@ +// Variant: vectorized normal_lpdf with matrix-vector product Xc * b. +// Unlike normal_id_glm_lpdf, the linear predictor is computed separately +// (not fused into the likelihood), but still uses Eigen's matrix-vector multiply. +data { + int N; + vector[N] Y; + int K; + matrix[N, K] X; + int Kc; + int prior_only; +} +transformed data { + matrix[N, Kc] Xc; + vector[Kc] means_X; + for (i in 2:K) { + means_X[i - 1] = mean(X[, i]); + Xc[, i - 1] = X[, i] - means_X[i - 1]; + } +} +parameters { + vector[Kc] b; + real Intercept; + real sigma; +} +transformed parameters { + real lprior = 0; + lprior += student_t_lpdf(Intercept | 3, 2.1, 2.5); + lprior += student_t_lpdf(sigma | 3, 0, 2.5) + - 1 * student_t_lccdf(0 | 3, 0, 2.5); +} +model { + if (!prior_only) { + target += normal_lpdf(Y | Intercept + Xc * b, sigma); + } + target += lprior; +} +generated quantities { + real b_Intercept = Intercept - dot_product(means_X, b); +} diff --git a/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_loop_precompute.stan b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_loop_precompute.stan new file mode 100644 index 0000000..f3e89e7 --- /dev/null +++ b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_loop_precompute.stan @@ -0,0 +1,39 @@ +// Variant: precompute mu in a loop, then pass to vectorized normal_lpdf. +// Separates the dot-product loop from the likelihood evaluation. +data { + int N; + vector[N] Y; + int K; + matrix[N, K] X; + int Kc; + int prior_only; +} +transformed data { + matrix[N, Kc] Xc; + vector[Kc] means_X; + for (i in 2:K) { + means_X[i - 1] = mean(X[, i]); + Xc[, i - 1] = X[, i] - means_X[i - 1]; + } +} +parameters { + vector[Kc] b; + real Intercept; + real sigma; +} +transformed parameters { + real lprior = 0; + lprior += student_t_lpdf(Intercept | 3, 2.1, 2.5); + lprior += student_t_lpdf(sigma | 3, 0, 2.5) + - 1 * student_t_lccdf(0 | 3, 0, 2.5); +} +model { + if (!prior_only) { + vector[N] mu= Intercept + Xc * b; + target += normal_lpdf(Y | mu, sigma); + } + target += lprior; +} +generated quantities { + real b_Intercept = Intercept - dot_product(means_X, b); +} diff --git a/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_model.so b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_model.so new file mode 100755 index 0000000..ca120d9 Binary files /dev/null and b/scripts/Benchmarking/models/bambi/escs/drugs_o_c_e_a_n/model_model.so differ diff --git a/scripts/Benchmarking/run_benchmark.jl b/scripts/Benchmarking/run_benchmark.jl new file mode 100644 index 0000000..8ab7f5a --- /dev/null +++ b/scripts/Benchmarking/run_benchmark.jl @@ -0,0 +1,189 @@ +using Pkg; Pkg.activate(@__DIR__) +using Printf +include("benchmark.jl") +include("../examples/all.jl") + +formula, data = get_examples(:bambi, :escs) + +println("Formula : ", formula) +println("N : ", nrow(data)) +println("Dim : ", dimension(make_problem(formula, data, :brms; source=:bambi, key=:escs))) +println() + +function fmt_time(seconds::Float64) + if seconds < 1e-6 + return @sprintf("%.1f ns", seconds * 1e9) + elseif seconds < 1e-3 + return @sprintf("%.1f μs", seconds * 1e6) + else + return @sprintf("%.1f ms", seconds * 1e3) + end +end + +function print_result(label, b) + r = minimum(b) + @printf(" %-40s %s (%d allocs)\n", label, fmt_time(r.time), r.allocs) +end + +# ── Gradient correctness ───────────────────────────────────────────────────── + +function compute_gradient(problem::AnyJuliaProblem, ad, q) + prep = DI.prepare_gradient(problem._logdensity, ad, q) + grad = similar(q) + DI.value_and_gradient!(problem._logdensity, grad, prep, ad, q) + return grad +end + +function try_benchmark(label, problem, ad, ref_grad, q; rtol=1e-6) + # Check correctness against reference gradient + local grad + try + grad = compute_gradient(problem, ad, q) + catch e + @printf(" %-40s FAILED\n", label) + return (label=label, error=sprint(showerror, e, catch_backtrace())) + end + + maxdiff = maximum(abs.(grad .- ref_grad)) + scale = max(maximum(abs.(ref_grad)), 1.0) + reldiff = maxdiff / scale + if reldiff > rtol + msg = @sprintf("max|Δ|=%.2e, rel=%.2e", maxdiff, reldiff) + @printf(" %-40s WRONG (%s)\n", label, msg) + return (label=label, error=msg) + end + + # Benchmark + try + print_result(label, _benchmark(problem, :gradient; ad)) + return nothing + catch e + @printf(" %-40s FAILED\n", label) + return (label=label, error=sprint(showerror, e, catch_backtrace())) + end +end + +enzyme_rev = AutoEnzyme(; mode=Enzyme.Reverse, function_annotation=Enzyme.Duplicated) +enzyme_fwd = AutoEnzyme(; mode=Enzyme.Forward, function_annotation=Enzyme.Duplicated) +errors = [] + +# ── Reference gradient from brms (Stan) ────────────────────────────────────── +brms_problem = make_problem(formula, data, :brms; source=:bambi, key=:escs) +q_test = randn(dimension(brms_problem)) +_, ref_grad = logdensity_and_gradient(brms_problem, q_test) + +println("Reference: brms/Stan gradient at random q") +@printf(" max|grad| = %.4f\n\n", maximum(abs.(ref_grad))) + +# ── brms (Stan) ────────────────────────────────────────────────────────────── +println("brms (Stan):") +print_result(" primal", _benchmark(brms_problem, :primal)) +print_result(" gradient", _benchmark(brms_problem, :gradient)) +println() + +# ── Julia hand-written variants ────────────────────────────────────────────── +ad_backends = [ + (enzyme_fwd, "Enzyme fwd"), + (enzyme_rev, "Enzyme rev"), + (DI.AutoMooncakeForward(), "Mooncake fwd"), + (AutoMooncake(), "Mooncake rev"), +] + +for (backend, desc) in [ + (:julia3, "julia3 (BLAS mul!)"), + (:julia5, "julia5 (5-arg mul!)"), + (:julia6, "julia6 (manual gemv)"), +] + println("$desc:") + problem = make_problem(formula, data, backend) + print_result(" primal", _benchmark(problem, :primal)) + + for (ad, ad_name) in ad_backends + err = try_benchmark(" gradient ($ad_name)", problem, ad, ref_grad, q_test) + err !== nothing && push!(errors, err) + end + println() +end + +# ── julia7: fine-grained Enzyme annotations ────────────────────────────────── +println("julia7 (split Enzyme: Const closure + Duplicated buffer):") +jp7 = make_problem(formula, data, :julia7) +print_result(" primal", _benchmark(jp7, :primal)) + +# Enzyme split: Const(ℓ_inner) + Duplicated(mu) + Duplicated(q) +# Enzyme split reverse +let mode_name = "Enzyme split rev" + dmu = zeros(length(jp7._mu)); grad = zeros(dimension(jp7)) + try + Enzyme.autodiff(Enzyme.Reverse, Enzyme.Const(jp7._logdensity_split), Enzyme.Active, + Enzyme.Duplicated(jp7._mu, dmu), Enzyme.Duplicated(copy(q_test), grad)) + maxdiff = maximum(abs.(grad .- ref_grad)) + reldiff = maxdiff / max(maximum(abs.(ref_grad)), 1.0) + if reldiff > 1e-6 + msg = @sprintf("max|Δ|=%.2e, rel=%.2e", maxdiff, reldiff) + @printf(" %-40s WRONG (%s)\n", "gradient ($mode_name)", msg) + push!(errors, (label="gradient ($mode_name)", error=msg)) + else + print_result(" gradient ($mode_name)", _benchmark_enzyme_split(jp7, :gradient; enzyme_mode=Enzyme.Reverse)) + end + catch e + @printf(" %-40s FAILED\n", "gradient ($mode_name)") + push!(errors, (label="gradient ($mode_name)", error=sprint(showerror, e, catch_backtrace()))) + end +end + +# Enzyme split forward +let mode_name = "Enzyme split fwd" + Kc = dimension(jp7) + seeds = [zeros(Kc) for _ in 1:Kc] + for i in 1:Kc; seeds[i][i] = 1.0; end + dmus = [zeros(length(jp7._mu)) for _ in 1:Kc] + try + result = Enzyme.autodiff( + Enzyme.Forward, + Enzyme.Const(jp7._logdensity_split), + Enzyme.BatchDuplicated(jp7._mu, ntuple(i -> dmus[i], Kc)), + Enzyme.BatchDuplicated(copy(q_test), ntuple(i -> seeds[i], Kc)), + ) + grad = collect(values(result[1])) + maxdiff = maximum(abs.(grad .- ref_grad)) + reldiff = maxdiff / max(maximum(abs.(ref_grad)), 1.0) + if reldiff > 1e-6 + msg = @sprintf("max|Δ|=%.2e, rel=%.2e", maxdiff, reldiff) + @printf(" %-40s WRONG (%s)\n", "gradient ($mode_name)", msg) + push!(errors, (label="gradient ($mode_name)", error=msg)) + else + print_result(" gradient ($mode_name)", _benchmark_enzyme_split(jp7, :gradient; enzyme_mode=Enzyme.Forward)) + end + catch e + @printf(" %-40s FAILED\n", "gradient ($mode_name)") + push!(errors, (label="gradient ($mode_name)", error=sprint(showerror, e, catch_backtrace()))) + end +end + +# Also test Mooncake on julia7 for comparison +for (ad, ad_name) in [(AutoMooncake(), "Mooncake rev")] + err = try_benchmark(" gradient ($ad_name)", jp7, ad, ref_grad, q_test) + err !== nothing && push!(errors, err) +end +println() + +# ── Turing (DynamicPPL) ─────────────────────────────────────────────────────── +println("turing (DynamicPPL):") +tp = make_problem(formula, data, :turing) +print_result(" primal (loop ~)", _benchmark(tp, :primal)) +tp2 = make_problem(formula, data, :turing2) +print_result(" primal (@addlogprob!)", _benchmark(tp2, :primal)) +println() + +# ── Error report ───────────────────────────────────────────────────────────── +if !isempty(errors) + println("=" ^ 72) + println("ERRORS ($(length(errors))):") + println("=" ^ 72) + for e in errors + println() + println("── $(e.label) ──") + println(first(e.error, 500)) + end +end diff --git a/scripts/Project.toml b/scripts/Project.toml index 4a3f7db..d5ac59f 100644 --- a/scripts/Project.toml +++ b/scripts/Project.toml @@ -1,9 +1,16 @@ [deps] BayesianRegressionModels = "cdd3e328-398d-47a6-a87b-6047aaf4b4bc" -CatalogServer = "a1b2c3d4-0000-0000-0000-000000000001" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +Chairmarks = "0ca39b1e-fe0b-4e98-acfc-b1656634c4de" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +DynamicObjects = "23d02862-63fe-4c6e-8fdb-1d52cbbd39d5" +ElasticArrays = "fdbdab4c-e67f-52f5-8c3f-e7b388dad3d4" FlexiChains = "4a37a8b9-6e57-4b92-8664-298d46e639f7" +InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" +LogDensityProblems = "6fdf6af0-433a-55f7-b3ed-c6c6e0b8df7c" +LogDensityProblemsAD = "996a588d-648d-4e1f-a8f0-a84b347e47b1" +LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" Oxygen = "df9a0d86-3283-4920-82dc-4555fc0d1d8b" -YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" diff --git a/scripts/examples/database.jl b/scripts/examples/database.jl new file mode 100644 index 0000000..a98f505 --- /dev/null +++ b/scripts/examples/database.jl @@ -0,0 +1,12 @@ +include("all.jl") +using DynamicObjects + +@dynamicstruct "" serial struct Database + mod(m::Symbol) = _SOURCE_MODULES[m] + @cached dataset(m::Symbol, name::Symbol) = getproperty(mod(m), :load)(Val(name)) + # formula(m::Symbol, name::Symbol) = getproperty(mod(m), :examples)(Val(name))[1] + # example(m::Symbol, name::Symbol) = begin + # _formula, datakey = getproperty(mod(m), :examples)(Val(name)) + # brm(dataset(m, datakey), _formula) + # end +end \ No newline at end of file diff --git a/scripts/macro.jl b/scripts/macro.jl new file mode 100644 index 0000000..d6baf3c --- /dev/null +++ b/scripts/macro.jl @@ -0,0 +1,223 @@ +using OrderedCollections +macro brm(x) + esc(_brm(x)) +end +macro brm(df, x) + esc(Expr(:call, _brm(x), df)) +end +macro n(x) + esc(_n(x)) +end +macro x(x) + esc(_x(x)) +end +macro getproperty(x) + esc(_getproperty(x)) +end +_getproperty(x::Expr) = begin + @assert x.head == :(.) + @assert length(x.args) == 2 + lhs, qrhs = x.args + :(hasproperty($lhs, $qrhs) ? $x : $(qrhs.value)) +end +begin +isxcall(x, f) = Meta.isexpr(x, :call) && x.args[1] == f +fixcall(x) = x +fixcall(x::Expr) = if Meta.isexpr(x, :call) + f = x.args[1] + pargs = [] + args = [] + for arg in fixcall.(x.args[2:end]) + if Meta.isexpr(arg, :parameters) + append!(pargs, arg.args) + else + push!(args, arg) + end + end + if length(pargs) > 0 + Expr(x.head, f, Expr(:parameters, pargs...), args...) + else + Expr(x.head, f, args...) + end +else + Expr(x.head, fixcall.(x.args)...) +end +function assign end +function doublepipe end +function gr end +_brm(x::AbstractString; kwargs...) = _brm(Meta.parse(""" +begin + $x +end +"""); kwargs...) +_brm(x::Expr; df=nothing) = begin + lhs, x = x.head == :(=) ? x.args : (:($(gensym("model"))(__df__)), x) + alllocals = OrderedDict{Symbol,Symbol}() + info = (;alllocals) + x = parse!(x; info) + nonlocals = [key for (key, value) in pairs(alllocals) if value == :nonlocal] + maybelocals = [key for (key, value) in pairs(alllocals) if value == :maybelocal] + init = quote + (;$(nonlocals...)) = data(__df__) + (;$(maybelocals...)) = maybedata(__df__) + end + finalize = quote + $BRMI(;$(keys(alllocals)...)) + end + if isnothing(df) + Expr(:(=), lhs, Expr(:block, init, x, finalize)) + else + Expr(:let, + Expr(:block, :(__df__ = $df), :(__ddf__ = $data(__df__)), [:($nonlocal = @getproperty __ddf__.$nonlocal) for nonlocal in nonlocals]...), + Expr(:block, :((;$(maybelocals...)) = maybedata(__df__)), x, finalize) + ) + end +end +brm(df, formula::AbstractString) = eval(_brm(formula; df)) +parse!(x; info) = x +parse!(x::Expr; info) = if x.head == :block + Expr(:block, parse!.(x.args; info)...) +elseif x.head == :(=) + lhs, rhs = x.args + parselocals!(rhs; info, val=:nonlocal) + parselocals!(lhs; info, val=:local) + :(@n $lhs = @x $assign($(xname(lhs)), $rhs)) +elseif isxcall(x, :~) + _, lhs, rhs = x.args + parselocals!(rhs; info, val=:nonlocal) + parselocals!(lhs; info, val=:maybelocal) + :(@n $lhs = @x $x) +else + dump(x) + error("Don't know how to handle parse!($x)!") +end +parselocals!(x; kwargs...) = x +parselocals!(x::Symbol; info, val) = get!(info.alllocals, x, val) +parselocals!(x::Expr; info, val) = if Meta.isexpr(x, (:call, :kw)) + parselocals!.(x.args[2:end]; info, val) +else + parselocals!.(x.args; info, val) +end +_n(x::Expr) = begin + @assert x.head == :(=) + lhs, rhs = x.args + alhs = xassignable(lhs) + nlhs = xname(alhs) + :($alhs = $NamedColumn($nlhs, $rhs)) +end +xassignable(x::Symbol) = x +xassignable(x::Expr) = if Meta.isexpr(x, (:tuple, :vect)) + Expr(x.head, xassignable.(x.args)...) +elseif x.head == :call + if length(x.args) == 2 + xassignable(x.args[2]) + else + @warn "Don't know how to handle xassignable($x)!" + Symbol(x) + end +else + dump(x) + error("Don't know how to handle xassignable($x)!") +end +xname(x::Symbol) = Meta.quot(x) +xname(x::Expr) = if Meta.isexpr(x, (:tuple, :vect)) + Expr(x.head, xname.(x.args)...) +else + @warn "Don't know how to handle xassignable($x)!" + Symbol(x) + # dump(x) + # error("Don't know how to handle xname($x)!") +end +_x(x) = x +_x(x::Symbol) = x +_x(x::Expr) = if x.head == :call + Expr(:call, ExprColumn, _x.(x.args)...) |> fixcall +elseif x.head == :|| + Expr(:call, ExprColumn, doublepipe, _x.(x.args)...) +else + Expr(x.head, _x.(x.args)...) +end +struct Data{P} + parent::P +end +Base.parent(d::Data) = getfield(d, :parent) +Base.hasproperty(d::Data, x::Symbol) = hasproperty(parent(d), x) +Base.getproperty(d::Data, x::Symbol) = NamedColumn(x, DataColumn(getproperty(parent(d), x))) +data(x) = Data(x) +struct MaybeData{P} + parent::P +end +Base.parent(d::MaybeData) = getfield(d, :parent) +Base.hasproperty(d::MaybeData, x::Symbol) = hasproperty(parent(d), x) +Base.getproperty(d::MaybeData, x::Symbol) = NamedColumn(x, hasproperty(d, x) ? DataColumn(getproperty(parent(d), x)) : MissingColumn()) +maybedata(x) = MaybeData(x) +abstract type AbstractColumn end +struct MissingColumn <: AbstractColumn end +struct DataColumn{P} <: AbstractColumn + parent::P +end +Base.parent(d::DataColumn) = getfield(d, :parent) +struct NamedColumn{N,P} <: AbstractColumn + name::N + parent::P +end +name(x::NamedColumn) = getfield(x, :name) +Base.parent(x::NamedColumn) = getfield(x, :parent) + +struct ExprColumn{F,A<:Tuple,K<:NamedTuple} <: AbstractColumn + f::F + args::A + kwargs::K + ExprColumn(f, args...; kwargs...) = new{typeof(f),typeof(args),typeof((;kwargs...))}(f,args,(;kwargs...)) + ExprColumn(f::Type, args...; kwargs...) = new{Type{f},typeof(args),typeof((;kwargs...))}(f,args,(;kwargs...)) +end +getf(x::ExprColumn) = getfield(x, :f) +getargs(x::ExprColumn) = getfield(x, :args) +getargs(x::ExprColumn, n) = (rv = getargs(x); @assert length(rv) == n; rv) +getargs(::typeof(+), x::ExprColumn{typeof(+)}) = getargs(x) +getargs(::typeof(+), x::ExprColumn) = (x,) +getargs(::typeof(+), x) = (x,) +getkwargs(x::ExprColumn) = getfield(x, :kwargs) +getop(x) = getf(x) +getop(::ExprColumn{typeof(doublepipe)}) = :|| +getop(::ExprColumn{typeof(assign)}) = :(=) + +struct LikelihoodColumn{P,R} <: AbstractColumn + parent::P + rhs::R +end +Base.parent(d::LikelihoodColumn) = getfield(d, :parent) +rhs(d::LikelihoodColumn) = getfield(d, :rhs) +maybedists(lhs::AbstractColumn, x::AbstractColumn) = LikelihoodColumn(lhs, x) + +struct BRMI{O<:NamedTuple} + operations::O +end +BRMI(;kwargs...) = BRMI((;kwargs...)) +Base.show(io::IO, (;operations)::BRMI) = begin + print(io, "BRMI:\n") + for (key, value::NamedColumn) in pairs(operations) + print(io, " ", key, ": ", parent(value), "\n") + end +end +Base.show(io::IO, d::DataColumn) = begin + print(io, "data (eltype=", eltype(parent(d)), ")") +end +Base.show(io::IO, x::ExprColumn{<:Union{typeof.((~,*,+,|,doublepipe,assign))...}}) = begin + print(io, "(", ) + join(io, getargs(x), " $(getop(x)) ") + print(io, ")") +end +nonemptyjoin(io::IO, iterator, args...; first) = if length(iterator) > 0 + print(io, first) + join(io, iterator, args...) +end +Base.show(io::IO, x::ExprColumn) = begin + print(io, getf(x), "(", ) + join(io, getargs(x), ", ") + nonemptyjoin(io, ["$key=$value" for (key, value) in pairs(getkwargs(x))], ", "; first="; ") + print(io, ")") +end +Base.show(io::IO, x::NamedColumn) = print(io, name(x)) + +end \ No newline at end of file diff --git a/scripts/vimpl.jl b/scripts/vimpl.jl new file mode 100644 index 0000000..9c5bceb --- /dev/null +++ b/scripts/vimpl.jl @@ -0,0 +1,198 @@ +using LogExpFunctions, InverseFunctions, Distributions, ElasticArrays, LogDensityProblems, LinearAlgebra + +struct VBRMI{P<:BRMI,M<:NamedTuple} + parent::P + meta::M +end +VBRMI(p::BRMI) = VBRMI(p, finalize(foldl(vmeta, p.operations; init=(;materialized=(;), blocks=(;))))) +finalize(x) = merge(x, (;block_data=map(x.blocks) do values + m, n = size(values) + (;L=zeros(n, n)) +end)) +rmerge(x::NamedTuple, y::NamedTuple) = begin + xykeys = (intersect(keys(x), keys(y))...,) + merge(x, y, map(rmerge, NamedTuple{xykeys}(x), NamedTuple{xykeys}(y))) +end +rmerge(::AbstractDict, ::AbstractDict) = error("Can only rmerge NamedTuples for now!") +rmerge(x, y) = y +vmeta(meta, x::NamedColumn) = begin + meta, m = vmeta(meta, parent(x))::Tuple + rmerge(meta, (;materialized=(;name(x)=>m))) +end +vmeta(meta, x::DataColumn) = meta, x +vmeta(meta, x::ExprColumn{typeof(assign)}) = vmeta_assignment(meta, getargs(x)...; getkwargs(x)...) +vmeta(meta, x::ExprColumn{typeof(~)}) = vmeta_sampling(meta, getargs(x)...; getkwargs(x)...) + +vmeta_assignment(meta, ::Symbol, x) = meta, vmaterialize(vbroadcasted(x; meta)) +vbroadcasted(;kwargs...) = (args...)->vbroadcasted(args...; kwargs...) +vbroadcasted(x::NamedColumn{<:Any,<:DataColumn}; meta) = parent(meta.materialized[name(x)]) +vbroadcasted(x::NamedColumn; meta) = meta.materialized[name(x)] +vbroadcasted(x::ExprColumn; meta) = Base.broadcasted(getf(x), map(vbroadcasted(;meta), getargs(x))...) +getinverse(x::ExprColumn{<:Any,<:Tuple{<:Any}}) = inverse(getf(x)) +getinverse(x::ExprColumn{<:Any,<:Tuple{<:ExprColumn}}) = inverse(getf(x)) ∘ getinverse(getargs(x, 1)[1]) +vmeta_sampling(meta, lhs::ExprColumn, rhs) = begin + meta, o = vmeta_sampling_rhs(meta, rhs; group=:__population__) + meta, vmaterialize(Base.broadcasted(getinverse(lhs), o)) +end +vmeta_sampling(meta, ::NamedColumn{<:Any,MissingColumn}, rhs) = begin + meta, o = vmeta_sampling_rhs(meta, rhs; group=:__population__) + meta, vmaterialize(o) +end +vmeta_sampling(meta, lhs::NamedColumn{<:Any,<:DataColumn}, rhs) = begin + meta, o = vmeta_sampling_rhs(meta, rhs; group=:__population__) + meta, LikelihoodColumn(parent(parent(lhs)), o) +end +vmeta_sampling_rhs(;kwargs...) = (args...)->vmeta_sampling_rhs(args...; kwargs...) +vmeta_sampling_rhs(meta, x::ExprColumn{typeof(+)}; kwargs...) = begin + meta, args = foldl(getargs(x); init=(meta, ())) do (_meta, _args), _arg + _meta, _arg = vmeta_sampling_rhs(_meta, _arg; kwargs...) + _meta, (_args..., _arg) + end + meta, Base.broadcasted(+, args...) +end +vmeta_sampling_rhs(meta, x::ExprColumn; kwargs...) = vmeta_sampling_rhs(meta, vbroadcasted(x; meta); kwargs...) +vmeta_sampling_rhs(meta, x::ExprColumn{typeof(*)}; kwargs...) = error("NOT IMPLEMENTED") +vmeta_sampling_rhs(meta, x::ExprColumn{typeof(&)}; kwargs...) = error("NOT IMPLEMENTED") +vmeta_sampling_rhs(meta, x::ExprColumn{typeof(|)}; kwargs...) = begin + lhs, rhs = getargs(x, 2) + vmeta_sampling_rhs(meta, lhs; group=rhs) +end +vmeta_sampling_rhs(meta, ::Int; group) = begin + meta, p = growblock!!(meta, group, 1) + meta, p +end +vmeta_sampling_rhs(meta, x::NamedColumn; kwargs...) = vmeta_sampling_rhs(meta, meta.materialized[name(x)]; kwargs...) +vmeta_sampling_rhs(meta, x::DataColumn; kwargs...) = vmeta_sampling_rhs(meta, parent(x); kwargs...) +vmeta_sampling_rhs(meta, x::AbstractVector{<:AbstractFloat}; group) = begin + meta, p = growblock!!(meta, group, 1) + meta, Base.broadcasted(*, x, p) +end +FBroadcasted{F,Style<:Union{Nothing, Base.Broadcast.BroadcastStyle},Axes} = Base.Broadcast.Broadcasted{Style,Axes,F} +vmeta_sampling_rhs(meta, x::FBroadcasted; group) = begin + meta, p = growblock!!(meta, group, 1) + meta, Base.broadcasted(*, x, p) +end +vmeta_sampling_rhs(meta, x::AbstractVector{<:Integer}; group) = begin + meta, p = growblock!!(meta, group, 1) + meta, Base.broadcasted(*, x, p) + # meta, p = growblock!!(meta, group, length(unique(parent(x)))-1) + # Base.broadcasted(*, x, p) +end +vmeta_sampling_rhs(meta, x::FBroadcasted{<:Type{<:Distribution}}; group) = meta, x +vmaterialize(x) = MaterializedColumn(Base.materialize(x), x) +struct MaterializedColumn{P,B} <: AbstractColumn + parent::P + broadcast::B +end +Base.parent(x::MaterializedColumn) = getfield(x, :parent) +getbroadcast(x::MaterializedColumn) = getfield(x, :broadcast) +Base.broadcastable(x::MaterializedColumn) = Base.broadcastable(parent(x)) + +n_levels(group::NamedColumn) = length(unique(parent(parent(group)))) +growblock!!(meta, group::Symbol, n) = growblock!!(meta, group, 1, n) +growblock!!(meta, group::Symbol, m, n) = begin + g = get(meta.blocks, group) do + ElasticMatrix(zeros(m, 0)) + end + idxs = (size(g, 2)+1):(size(g, 2)+n) + append!(g, zeros(m, n)) + rmerge(meta, (;blocks=(;group=>g))), view(g, :, 1)#idxs) +end +growblock!!(meta, group::NamedColumn, n) = growblock!!(meta, name(group), n_levels(group), n) + +Base.show(io::IO, (;parent, broadcast)::MaterializedColumn) = print(io, eltype(parent), "[...] .= ", broadcast) +Base.show(io::IO, (;parent, rhs)::LikelihoodColumn) = print(io, eltype(parent), "[...] .~ ", rhs) +Base.show(io::IO, vbrm::VBRMI) = begin + (;parent, meta) = vbrm + print(io, parent) + print(io, "dim: ", LogDensityProblems.dimension(vbrm), "\n") + print(io, "materialized:\n") + for (key, value) in pairs(meta.materialized) + print(io, " ", key, ": ", value, "\n") + end + print(io, "blocks (n_levels, n_params):\n") + for (key, value) in pairs(meta.blocks) + print(io, " ", key, ": ", size(value), "\n") + end +end +LogDensityProblems.dimension(vbrm::VBRMI) = hyperdim(vbrm) + directdim(vbrm) +hyperdim(vbrm::VBRMI) = sum(pairs(vbrm.meta.blocks)) do (k, v) + n = size(v, 2) + k == :__population__ ? 0 : n * (n+1) ÷ 2 +end +directdim(vbrm::VBRMI) = sum(length, vbrm.meta.blocks) +advance!!(x, pos) = x[pos+1], pos+1 +advance!!(x, pos, n) = view(x, pos+1:pos+n), pos+n +lprior!((;meta)::VBRMI, x::AbstractVector; init=(0., 0)) = foldl(pairs(meta.blocks); init) do (lprior, pos), (key, values) + m, n = size(values) + if key == :__population__ + xi, pos = advance!!(x, pos, n) + values[1, :] .= xi + lprior += sum(Base.Fix1(logpdf, Normal()), xi) + else + C = LinearAlgebra.Cholesky(meta.block_data[key].L, :L, 0) + lprior, pos = lprior!(C, x; init=(lprior, pos)) + for vi in eachrow(values) + xi, pos = advance!!(x, pos, n) + mul!(vi, C.L, xi) + lprior += sum(Base.Fix1(logpdf, Normal()), xi) + end + end + lprior, pos +end |> first +log_abs_tanh(x) = begin + z = -2*abs(x) + (log1mexp(z) - log1pexp(z)) +end +log_square_tanh(x) = 2 * log_abs_tanh(x) +"Either wrong or better LKJCholesky unconstraining + prior" +lprior!((;L)::Cholesky, x; init, eta=1.) = begin + lprior, pos = init + n = LinearAlgebra.checksquare(L) + log_scale, pos = advance!!(x, pos) + lprior += logpdf(Normal(), log_scale) + L[1, 1] = exp(log_scale) + for i in 2:n + log_scale, pos = advance!!(x, pos) + lprior += logpdf(Normal(), log_scale) + xi, pos = advance!!(x, pos) + tmp = log_abs_tanh(xi / sqrt(n-1)) + L[i, 1] = sign(xi) * exp(log_scale + tmp) + log_sos = 2 * tmp + lprior += log1mexp(log_sos) + for j in 2:i-1 + xi, pos = advance!!(x, pos) + tmp1 = .5 * log1mexp(log_sos) + lprior += tmp1 + tmp2 = log_abs_tanh(xi / sqrt(n-j)) + lprior += log1mexp(2*tmp2) + tmp = tmp1 + tmp2 + L[i, j] = sign(xi) * exp(log_scale + tmp) + log_sos = logaddexp(log_sos, 2*tmp) + end + L[i, i] = exp(log_scale + .5 * log1mexp(log_sos)) + lprior += (n - i + 2*eta-2) * .5 * log1mexp(log_sos) + end + lprior, pos +end +llikelihood!((;meta)::VBRMI) = foldl(meta.materialized; init=0.) do llikelihood, m + llikelihood + llikelihood!(m) +end +llikelihood!(::DataColumn) = 0. +llikelihood!(x::MaterializedColumn) = (Base.materialize!(parent(x), getbroadcast(x)); 0.) +# llikelihood!(x::LikelihoodColumn) = sum(Base.broadcasted(logpdf, rhs(x), parent(x)); init=0.) +# The below is faster for some reason? +llikelihood!(x::LikelihoodColumn) = ssum(Base.broadcasted(logpdf, rhs(x), parent(x)); init=0.) +llikelihood!(x) = error(typeof(x)) + +ssum(args...; kwargs...) = sum(args...; kwargs...) +ssum(x::Base.Broadcast.Broadcasted; init) = begin + rv = init + for xi in x + rv += xi + end + rv +end + +Distributions.logpdf(vbrmi::VBRMI, x::AbstractVector) = lprior!(vbrmi, x) + llikelihood!(vbrmi) +LogDensityProblems.logdensity(vbrmi::VBRMI, x::AbstractVector) = lprior!(vbrmi, x) + llikelihood!(vbrmi) \ No newline at end of file