diff --git a/pixi.lock b/pixi.lock
index f0601b2..b418bda 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -10,11 +10,18 @@ environments:
packages:
osx-64:
- conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/aiohttp-3.13.2-py312h352d07c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aiohttp-3.13.3-py312h80cd6c1_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/asgiref-3.11.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/argon2-cffi-bindings-25.1.0-py312h80b0991_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/asgiref-3.11.0-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.9.3-hdff831d_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.9.13-hea39f9f_1.conda
@@ -27,14 +34,17 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.11.3-he30762a_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.4-h901532c_4.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.7-h901532c_5.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.35.2-h7484968_6.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.606-hffd60a0_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.35.4-h7484968_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.606-h386ebac_10.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.16.1-he2a98a9_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-identity-cpp-1.13.2-h0e8e1c8_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.15.0-h388f2e7_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.11.0-h56a711b_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.13.0-h1984e67_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.2.0-py312hcb931b7_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.16.0-ha4e89a6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.12.0-h2a5eb39_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.14.0-h7f37a48_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.3.0-py312h6917036_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-h5f6438b_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.2.0-hf139dec_1.conda
@@ -42,83 +52,108 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.2.0-py312h4b46afd_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_8.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-6.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/osx-64/catalogue-2.0.10-py312hb401068_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.11.12-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/click-default-group-1.2.4-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.23.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/cmudict-1.1.2-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cmudict-1.1.3-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/confection-0.1.5-pyhecae5ae_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hd099df3_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.12-py312hd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-46.0.3-py312heb31a8c_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/curl-8.17.0-h7dd4100_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/curl-8.18.0-h9348e2b_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/cykhash-2.0.1-py312h69bf00f_3.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/cymem-2.0.13-py312h69bf00f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.2.2-py312h33b39b6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/cymem-2.0.13-py312h11f4fa3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.2.4-py312h84c01df_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/cython-blis-1.3.3-py312hfed6dc8_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.19-py312h6c02384_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/django-6.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/django-6.0.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.61.0-py312hacf3034_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.61.1-py312hacf3034_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.14.1-h694c41f_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/freexl-2.0.0-h3183152_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/frozenlist-1.7.0-py312h18bfd43_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.12.0-py312h06e505a_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.12.1-py312h1870424_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/geocoder-1.38.1-pyhd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/geoip2-4.8.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.2-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.28.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-grpc-2.28.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.43.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-translate-3.23.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.29.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-grpc-2.29.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.47.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-translate-3.24.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.72.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-grpc-1.72.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/grpc-google-iam-v1-0.14.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/grpc-google-iam-v1-0.14.3-pyhcf101f3_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.73.1-py312h53eab48_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.73.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.2-h14c5de8_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.1.0-pyh5552912_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.9.0-pyh53cf698_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/json-c-0.18-hc62ec3d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyh29332c3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.9-py312h90e26e8_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.18-h90db99b_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hcca01a6_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20250512.1-cxx17_hfc00f1c_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.8.2-gpl_h889603c_100.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-22.0.0-hd1700fa_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-22.0.0-h2db2d7d_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-22.0.0-h7751554_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-22.0.0-h2db2d7d_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-22.0.0-h4653b8a_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-4_he492b99_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.8.5-gpl_h264331f_100.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-23.0.0-h8071b21_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-23.0.0-h9737151_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-23.0.0-hc26cc94_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-23.0.0-h9737151_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.0-h7f2e36e_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-5_he492b99_openblas.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.2.0-h8616949_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.2.0-h8616949_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-4_h9b27e0a_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-5_h9b27e0a_openblas.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.17.0-h7dd4100_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.7-h3d58e20_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9348e2b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h3d58e20_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda
@@ -128,7 +163,7 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.1-h694c41f_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libfreetype6-2.14.1-h6912278_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libgcc-15.2.0-h08519bb_15.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-core-3.12.0-hfd904f9_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-core-3.12.1-hc010f1d_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_15.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_15.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda
@@ -137,79 +172,102 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.3.0-hab838a1_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.18-h57a12c2_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.2-h8616949_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.1-h4ee1b5b_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.1-hde0fb83_8.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libkml-1.3.0-h450b6c2_1022.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-4_h859234e_openblas.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-5_h859234e_openblas.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.30-openmp_h6006d49_4.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-1.21.0-h7d3f41d_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libopentelemetry-cpp-headers-1.21.0-h694c41f_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-22.0.0-habb56ca_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.53-h380d223_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.31.1-h03562ea_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-23.0.0-ha0d2768_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.54-h07817ec_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.31.1-hcc66ac3_4.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h554ac88_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/librttopo-1.1.0-h16cd5d8_20.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-gpl_hb921464_119.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.1-h6cc646a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-h687e942_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.2-h7983711_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-ha1d9b0f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h7b7ecba_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-devel-2.15.1-h7b7ecba_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-he456531_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h24ca049_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-devel-2.15.1-h24ca049_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/lingua-language-detector-1.3.4-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.7-h472b3d1_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.8-h472b3d1_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.10.0-h240833e_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/lzo-2.10-h4132b18_1002.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.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/osx-64/markupsafe-3.0.3-py312hacf3034_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.8-py312h7894933_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/maxminddb-2.6.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.0.10-hfb7a1ec_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/msgspec-0.20.0-py312h1a1c95f_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/multidict-6.7.0-py312h2352a57_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/muparser-2.3.5-hb996559_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/murmurhash-1.0.15-py312hbfd3414_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.13.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/murmurhash-1.0.15-py312h29de90a_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.15.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h53ec75d_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/nltk-3.9.2-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.5-py312ha3982b3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.1-py312hb34da66_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h87e8dc5_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.0-h230baf5_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.2.1-hd1b02dc_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.2.2-h3073fbf_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.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/osx-64/pandas-2.3.3-py312h86abcb1_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/pandas-stubs-2.3.3.251201-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pandas-stubs-2.3.3.260113-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.47-h13923f0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.0.0-py312hea0c9db_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.5.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/preshed-3.0.12-py312h69bf00f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/proj-9.7.0-h3124640_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.1.0-py312h4985050_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.5.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/preshed-3.0.12-py312h11f4fa3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/proj-9.7.1-h4aacef1_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/prometheus-cpp-1.3.0-h7802330_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/propcache-0.3.1-py312h3520af0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.26.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.27.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/protobuf-6.31.1-py312h457ac99_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-7.2.1-py312hf7082af_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-22.0.0-py312hb401068_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-22.0.0-py312hefc66a4_0_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.1-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-23.0.0-py312hb401068_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-23.0.0-py312ha422e09_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.4.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pydantic-core-2.41.5-py312h8a6388b_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-12.1-py312h4a480f0_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-12.1-py312h1993040_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pyogrio-0.12.1-py312h17ccd7d_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-25.3.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.17.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pyproj-3.7.2-py312hfea2d77_2.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/pyrobuf-0.9.3-py312h462f358_8.conda
@@ -217,249 +275,340 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.12-h74c2667_1_cpython.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.12-hd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/python-rapidjson-1.23-py312h69bf00f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_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.12-8_cp312.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyu2f-0.1.5-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312hacf3034_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/pyzmq-27.1.0-py312hb7d603e_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/ratelim-0.1.6-pyhd8ed1ab_3.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2025.11.05-h7df6414_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/regex-2023.12.25-py312h41838bb_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.30.0-py312h8a6388b_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-py312hfee4f84_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.16.3-py312he2acf2f_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py312h47bbdc5_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.0-py312ha20b133_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.1.2-py312hd8edc82_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sklearn-compat-0.1.5-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sklearn-pandas-2.2.0-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/smart-open-7.5.0-h0f9f196_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.5.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/spacy-3.8.11-py312h46c259a_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/spacy-legacy-3.0.12-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/spacy-loggers-1.0.5-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.51.1-h9e4bfbb_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.4-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.51.2-h5af3ad2_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sqlite-fts4-1.0.3-pyhaa4b35c_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sqlite-utils-3.39-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.5-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/srsly-2.5.2-py312h69bf00f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/textstat-0.7.11-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhcf101f3_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/textstat-0.7.12-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/thinc-8.3.10-py312h46c259a_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.5.4-py312h404bc50_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhefaf540_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h4daf872_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2025.2.0.20251108-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.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-2025b-h78e105d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/ujson-5.11.0-py312h2ac44ba_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/unicodedata2-17.0.0-py312h80b0991_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/uriparser-0.9.8-h6aefe2f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/wasabi-1.1.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.14-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/weasel-0.4.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.0.1-py312h80b0991_1.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.3.0-hd0321b6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.3.0-ha8d0d41_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.12-h8616949_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h8616949_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.11.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/yarl-1.22.0-py312hacf3034_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/zeromq-4.3.5-h6c33b1e_9.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda
- - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.2-h53ec75d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.2-h8bce59a_1.conda
- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda
- - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/db/33/ef2f2409450ef6daa61459d5de5c08128e7d3edb773fefd0a324d1310238/altair-6.0.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/38/3f/61a8ef73236dbea83a1a063a8af2f8e1e41a0df64f122233938391d0f175/deep_translator-1.11.4-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/29/cd/eadada1cdcf7d7b9b5053e583239e59b9e05902a2983032d790fbfc7bad7/ioc_fanger-4.2.1-py2.py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/44/68/9c8bfd59d4fafebf20ffa1e9ee3b0492a1f7d7816de0757c4367a4fecab3/ioc_finder-5.0.3-py2.py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/50/07/8f02b5c352e5deaf1461ededd4cb844e96da96f0158fccfa397e85f4a8d0/prince-0.16.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/25/ce/308e5e5da57515dd7cab3ec37ea2d5b8ff50bef1fcc8e6d31456f9fae08e/statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl
+ - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/82/aab481e2fc6dee0a13ce35c750e97dbe3f270fb327089c99a8f5e6900e0c/ua_parser_builtins-202601-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8f/1c/20bb3d7b2bad56d881e3704131ddedbb16eb787101306887dff349064662/user_agents-2.2.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/51/38/347d1fcde4edabd338d5872ca5759ccfb95ff1cf5207dafded981fd08c4f/yara_python-4.5.4.tar.gz
win-64:
- conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.13.2-pyh4ca1811_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aiohttp-3.13.3-py312h6b91d65_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/asgiref-3.11.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.9.1-h06c2b12_7.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.10-ha82e055_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.12.5-hfd05255_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.1-h83e01e5_8.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.5.6-h3116ff1_6.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.10.7-h52d8906_4.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.23.3-h6f46d10_3.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.13.3-h9821516_10.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.10.1-he380ad5_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.4-h83e01e5_3.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.7-h83e01e5_4.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.35.2-h1a9a3a2_4.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.606-h6446450_7.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py312he06e257_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/asgiref-3.11.0-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.9.3-h2970c50_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.13-h46f3b43_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.12.6-hfd05255_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.1-hcb3a2da_9.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.5.7-ha388e84_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.10.7-hc678f4a_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.23.3-h0d5b9f9_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.13.3-hfa314fa_11.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.11.3-ha659bf3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.4-hcb3a2da_4.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.7-hcb3a2da_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.35.4-hca034e6_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.606-hac16450_10.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.3.0-py312h06d0912_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-h5f6438b_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.6-hfd34d9b_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/branca-0.8.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py312hc6d9e41_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.5-h2466b09_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-6.2.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.6-hfd05255_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/win-64/catalogue-2.0.10-py312h2e8e312_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.11.12-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py312he06e257_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/click-default-group-1.2.4-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.23.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/cmudict-1.1.2-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cmudict-1.1.3-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/confection-0.1.5-pyhecae5ae_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py312hf90b1b7_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py312h78d62e6_4.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.12-py312hd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/cryptography-46.0.3-py312h232196e_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/curl-8.17.0-h43ecb02_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/curl-8.18.0-h43ecb02_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/cykhash-2.0.1-py312hbb81ca0_3.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/cymem-2.0.13-py312hbb81ca0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.2-py312hd245ac3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/cymem-2.0.13-py312hbb81ca0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py312hd245ac3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/cython-blis-1.3.3-py312h196c9fc_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.19-py312ha1a9051_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/django-6.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/django-6.0.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.61.0-pyh7db6752_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.61.1-py312h05f76fc_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.1-h57928b3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/freexl-2.0.0-hf297d47_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/frozenlist-1.7.0-pyhf298e5d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/frozenlist-1.7.0-py312hfdf67e6_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/gdal-3.12.0-py312h07de9ea_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/gdal-3.12.1-py312h07de9ea_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/geocoder-1.38.1-pyhd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/geoip2-4.8.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.2-pyha770c72_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/geos-3.14.1-hdade9fe_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.28.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-grpc-2.28.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.43.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-translate-3.23.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.29.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-grpc-2.29.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.47.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-translate-3.24.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.72.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-grpc-1.72.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/grpc-google-iam-v1-0.14.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/grpc-google-iam-v1-0.14.3-pyhcf101f3_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.73.1-py312h9256aa6_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/grpcio-status-1.73.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.1.0-pyh6dadd2b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.9.0-pyhe2676ad_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyh29332c3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.9-py312h78d62e6_2.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h6470a55_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20250512.1-cxx17_habfad5f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libarchive-3.8.2-gpl_h26aea39_100.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-22.0.0-h117da51_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-22.0.0-h7d8d6a5_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-compute-22.0.0-h2db994a_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-22.0.0-h7d8d6a5_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-22.0.0-hf865cc0_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-3_hf2e6a31_mkl.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libarchive-3.8.5-gpl_he24518a_100.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-23.0.0-hcf7e2ff_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-23.0.0-h7d8d6a5_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-compute-23.0.0-h2db994a_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-23.0.0-h7d8d6a5_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-23.0.0-hf865cc0_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-3_h2a3cdd5_mkl.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2
- - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.17.0-h43ecb02_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h43ecb02_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.1-h57928b3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.1-hdbac1cb_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_15.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-core-3.12.0-hd4e8292_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_15.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-core-3.12.1-h4c6072a_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_16.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.39.0-h19ee442_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.39.0-he04ea4c_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.73.1-h317e13b_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1002.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.3.0-ha71e874_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.1-hac9b6f3_5.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.1-hf3f85d1_8.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libkml-1.3.0-h68a222c_1022.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-3_hf9ab0e9_mkl.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-22.0.0-h7051d1f_4_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.51-h7351971_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-23.0.0-h7051d1f_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.54-h7351971_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_4.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2025.11.05-h0eb2380_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-haa95264_20.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.1.0-gpl_h0cd62ae_119.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.22.0-h23985f6_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.11.2-hb980946_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.11.3-hb980946_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h692994f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h5d26750_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-devel-2.15.1-h5d26750_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-devel-2.15.1-h779ef1b_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/lingua-language-detector-1.3.4-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.7-h4fa8253_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.10.0-h2466b09_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/lzo-2.10-h6a83c73_1002.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.10.0-pyhd8ed1ab_1.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/noarch/markupsafe-3.0.3-pyh7db6752_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.10.8-py312h0ebf65c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/maxminddb-2.6.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/minizip-4.0.10-h9fa1bad_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_454.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/multidict-6.6.3-pyh62beb40_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.20.0-py312he06e257_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/multidict-6.7.0-py312h05f76fc_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/muparser-2.3.5-he0c23c2_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/murmurhash-1.0.15-py312ha1a9051_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.13.0-pyhcf101f3_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/murmurhash-1.0.15-py312ha1a9051_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.15.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/nltk-3.9.2-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.3.5-py312ha72d056_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.1-py312ha72d056_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h24db6dd_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.0-h725018a_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/orc-2.2.1-h7414dfc_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/orc-2.2.2-hbd3206f_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.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/win-64/pandas-2.3.3-py312hc128f0a_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/pandas-stubs-2.3.3.251201-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pandas-stubs-2.3.3.260113-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.0.0-py312h31f0997_2.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.5.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/preshed-3.0.12-py312hbb81ca0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/proj-9.7.1-h7b1ce8f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/propcache-0.3.1-pyhe1237c8_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.26.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.0-py312h31f0997_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.5.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/preshed-3.0.12-py312hbb81ca0_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/proj-9.7.1-hd30e2cd_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/propcache-0.3.1-py312h31fea79_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.27.0-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/protobuf-6.31.1-py312hcb3287e_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.1-py312he5662c2_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-22.0.0-py312h2e8e312_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-core-22.0.0-py312h85419b5_0_cpu.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.1-pyhd8ed1ab_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-23.0.0-py312h2e8e312_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-core-23.0.0-py312h85419b5_0_cpu.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.4.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda
@@ -467,7 +616,7 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/pyogrio-0.12.1-py312h3f2e00f_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-25.3.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.17.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/pyproj-3.7.2-py312habbd053_2.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/pyrobuf-0.9.3-py312hbb81ca0_8.conda
@@ -475,79 +624,118 @@ environments:
- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_1_cpython.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/python-rapidjson-1.22-py312hbb81ca0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.12-hd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/python-rapidjson-1.23-py312hbb81ca0_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.12-8_cp312.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/pyu2f-0.1.5-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py312h275cf98_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312hbb5da91_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/ratelim-0.1.6-pyhd8ed1ab_3.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/re2-2025.11.05-ha104f34_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/regex-2023.12.25-py312he70551f_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py312hdabe01f_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9.1-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.7.2-py312h91ac024_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.16.3-py312hd0164fe_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.8.0-np2py312hea30aaf_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.0-py312h9b3c559_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/shapely-2.1.2-py312h37f46ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sklearn-compat-0.1.5-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sklearn-pandas-2.2.0-pyhd8ed1ab_0.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/noarch/smart-open-7.5.0-h0f9f196_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.5.0-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.2-h7fa0ca8_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/spacy-3.8.11-py312he3e9d37_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/spacy-legacy-3.0.12-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/spacy-loggers-1.0.5-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.51.1-hdb435a2_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.4-pyhcf101f3_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.51.2-hdb435a2_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sqlite-fts4-1.0.3-pyhaa4b35c_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sqlite-utils-3.39-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.5-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/srsly-2.5.2-py312hbb81ca0_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-hd094cb3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/textstat-0.7.11-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhcf101f3_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/textstat-0.7.12-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/thinc-8.3.10-py312h9b46583_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py312he06e257_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhefaf540_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_1.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h4daf872_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2025.2.0.20251108-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.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-2025b-h78e105d_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/ujson-5.11.0-py312ha1a9051_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.0-py312he06e257_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/uriparser-0.9.8-h5a68840_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_32.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_32.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/wasabi-1.1.3-pyhd8ed1ab_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.14-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/weasel-0.4.3-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/win-64/wrapt-2.0.1-py312he06e257_1.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.3.0-he0c23c2_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.3.0-hac47afa_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/xyzservices-2025.11.0-pyhd8ed1ab_0.conda
- - conda: https://conda.anaconda.org/conda-forge/noarch/yarl-1.22.0-pyh7db6752_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/yarl-1.22.0-py312h05f76fc_0.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h5bddc39_9.conda
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.1-h2466b09_2.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.2-h5112557_0.conda
- - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_1.conda
+ - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.2-h0261ad2_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda
- - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/db/33/ef2f2409450ef6daa61459d5de5c08128e7d3edb773fefd0a324d1310238/altair-6.0.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/38/3f/61a8ef73236dbea83a1a063a8af2f8e1e41a0df64f122233938391d0f175/deep_translator-1.11.4-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/29/cd/eadada1cdcf7d7b9b5053e583239e59b9e05902a2983032d790fbfc7bad7/ioc_fanger-4.2.1-py2.py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/44/68/9c8bfd59d4fafebf20ffa1e9ee3b0492a1f7d7816de0757c4367a4fecab3/ioc_finder-5.0.3-py2.py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/50/07/8f02b5c352e5deaf1461ededd4cb844e96da96f0158fccfa397e85f4a8d0/prince-0.16.5-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/60/15/3daba2df40be8b8a9a027d7f54c8dedf24f0d81b96e54b52293f5f7e3418/statsmodels-0.14.6-cp312-cp312-win_amd64.whl
+ - pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/fd/82/aab481e2fc6dee0a13ce35c750e97dbe3f270fb327089c99a8f5e6900e0c/ua_parser_builtins-202601-py3-none-any.whl
+ - pypi: https://files.pythonhosted.org/packages/8f/1c/20bb3d7b2bad56d881e3704131ddedbb16eb787101306887dff349064662/user_agents-2.2.0-py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl
- - pypi: https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl
- pypi: https://files.pythonhosted.org/packages/ad/e1/f6a72c155f3241360da890c218911d09bf63329eca9cfa1af64b1498339b/yara_python-4.5.4-cp312-cp312-win_amd64.whl
packages:
- conda: https://conda.anaconda.org/conda-forge/osx-64/_openmp_mutex-4.5-7_kmp_llvm.conda
@@ -576,6 +764,17 @@ packages:
purls: []
size: 49468
timestamp: 1718213032772
+- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda
+ sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661
+ md5: aaa2a381ccc56eac91d63b6c1240312f
+ depends:
+ - cpython
+ - python-gil
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 8191
+ timestamp: 1744137672556
- conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda
sha256: 7842ddc678e77868ba7b92a726b437575b23aaec293bca0d40826f1026d90e27
md5: 18fd895e0e775622906cdabfc3cf0fb4
@@ -587,32 +786,30 @@ packages:
- pkg:pypi/aiohappyeyeballs?source=hash-mapping
size: 19750
timestamp: 1741775303303
-- conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.13.2-pyh4ca1811_0.conda
- sha256: 8af88a6daa5e30f347da7faee1ee17d920a1090c0e921431bf43adff02429b50
- md5: 9b7efc1b9351892fc1b0af3fb7e44280
+- conda: https://conda.anaconda.org/conda-forge/osx-64/aiohttp-3.13.3-py312h80cd6c1_0.conda
+ sha256: 7703f430156a933756c57afab320aaa8d30639e8f9f899628a3eb5fbfa9b685b
+ md5: 1d67d1baba2a1917f1cd6519029a3fbf
depends:
+ - __osx >=10.13
- aiohappyeyeballs >=2.5.0
- aiosignal >=1.4.0
- - async-timeout >=4.0,<6.0
- attrs >=17.3.0
- frozenlist >=1.1.1
- multidict >=4.5,<7.0
- propcache >=0.2.0
- - python >=3.10
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
- yarl >=1.17.0,<2.0
- track_features:
- - aiohttp_no_compile
license: MIT AND Apache-2.0
license_family: Apache
purls:
- pkg:pypi/aiohttp?source=hash-mapping
- size: 474272
- timestamp: 1761726660058
-- conda: https://conda.anaconda.org/conda-forge/osx-64/aiohttp-3.13.2-py312h352d07c_0.conda
- sha256: 9a88e9eba482a489ff2ff58e243d0e4ce1ecb371790523541d85f9c6fc7cdef4
- md5: f2ab5e6e6ffde3580460181bf094749b
+ size: 993471
+ timestamp: 1767525057464
+- conda: https://conda.anaconda.org/conda-forge/win-64/aiohttp-3.13.3-py312h6b91d65_0.conda
+ sha256: ef7eb9709f46d1d1138c9d667a72a9b2c1907a83daa54e63e6d7b7fb7043f331
+ md5: 65ebd46fdc1e28a6b035935246bd6531
depends:
- - __osx >=10.13
- aiohappyeyeballs >=2.5.0
- aiosignal >=1.4.0
- attrs >=17.3.0
@@ -621,13 +818,16 @@ packages:
- propcache >=0.2.0
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
- yarl >=1.17.0,<2.0
license: MIT AND Apache-2.0
license_family: Apache
purls:
- pkg:pypi/aiohttp?source=hash-mapping
- size: 983635
- timestamp: 1761726866534
+ size: 964547
+ timestamp: 1767524981872
- conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda
sha256: 8dc149a6828d19bf104ea96382a9d04dae185d4a03cc6beb1bc7b84c428e3ca2
md5: 421a865222cd0c9d83ff08bc78bf3a61
@@ -641,6 +841,56 @@ packages:
- pkg:pypi/aiosignal?source=hash-mapping
size: 13688
timestamp: 1751626573984
+- pypi: https://files.pythonhosted.org/packages/db/33/ef2f2409450ef6daa61459d5de5c08128e7d3edb773fefd0a324d1310238/altair-6.0.0-py3-none-any.whl
+ name: altair
+ version: 6.0.0
+ sha256: 09ae95b53d5fe5b16987dccc785a7af8588f2dca50de1e7a156efa8a461515f8
+ requires_dist:
+ - jinja2
+ - jsonschema>=3.0
+ - narwhals>=1.27.1
+ - packaging
+ - typing-extensions>=4.12.0 ; python_full_version < '3.15'
+ - altair-tiles>=0.3.0 ; extra == 'all'
+ - anywidget>=0.9.0 ; extra == 'all'
+ - numpy ; extra == 'all'
+ - pandas>=1.1.3 ; extra == 'all'
+ - pyarrow>=11 ; extra == 'all'
+ - vegafusion>=2.0.3 ; extra == 'all'
+ - vl-convert-python>=1.8.0 ; extra == 'all'
+ - duckdb>=1.0 ; python_full_version < '3.14' and extra == 'dev'
+ - geopandas>=0.14.3 ; python_full_version < '3.14' and extra == 'dev'
+ - hatch>=1.13.0 ; extra == 'dev'
+ - ipykernel ; extra == 'dev'
+ - ipython ; extra == 'dev'
+ - mistune ; extra == 'dev'
+ - mypy ; extra == 'dev'
+ - pandas-stubs ; extra == 'dev'
+ - pandas>=1.1.3 ; extra == 'dev'
+ - polars>=0.20.3 ; extra == 'dev'
+ - pyarrow-stubs ; extra == 'dev'
+ - pytest ; extra == 'dev'
+ - pytest-cov ; extra == 'dev'
+ - pytest-xdist[psutil]~=3.5 ; extra == 'dev'
+ - ruff>=0.9.5 ; extra == 'dev'
+ - taskipy>=1.14.1 ; extra == 'dev'
+ - tomli>=2.2.1 ; extra == 'dev'
+ - types-jsonschema ; extra == 'dev'
+ - types-setuptools ; extra == 'dev'
+ - docutils ; extra == 'doc'
+ - jinja2 ; extra == 'doc'
+ - myst-parser ; extra == 'doc'
+ - numpydoc ; extra == 'doc'
+ - pillow ; extra == 'doc'
+ - pydata-sphinx-theme>=0.14.1 ; extra == 'doc'
+ - scipy ; extra == 'doc'
+ - scipy-stubs ; python_full_version >= '3.10' and extra == 'doc'
+ - sphinx ; extra == 'doc'
+ - sphinx-copybutton ; extra == 'doc'
+ - sphinx-design ; extra == 'doc'
+ - sphinxext-altair ; extra == 'doc'
+ - vl-convert-python>=1.8.0 ; extra == 'save'
+ requires_python: '>=3.9'
- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda
sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48
md5: 2934f256a8acfe48f6ebb4fce6cde29c
@@ -653,40 +903,120 @@ packages:
- pkg:pypi/annotated-types?source=hash-mapping
size: 18074
timestamp: 1733247158254
-- conda: https://conda.anaconda.org/conda-forge/noarch/asgiref-3.11.0-pyhd8ed1ab_0.conda
- sha256: 4c64237bf5ef6e16ef0c6ad31145dd5aed9f986c1a1becbe5abd17d9b4556ea2
- md5: 9fbe495cd313f37898d8eea42329faba
+- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda
+ sha256: eb0c4e2b24f1fbefaf96ce6c992c6bd64340bc3c06add4d7415ab69222b201da
+ md5: 11a2b8c732d215d977998ccd69a9d5e8
depends:
+ - exceptiongroup >=1.0.2
+ - idna >=2.8
- python >=3.10
- - typing_extensions >=4
- license: BSD-3-Clause
+ - typing_extensions >=4.5
+ - python
+ constrains:
+ - trio >=0.32.0
+ - uvloop >=0.21
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/anyio?source=compressed-mapping
+ size: 145175
+ timestamp: 1767719033569
+- conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_1.conda
+ sha256: 8f032b140ea4159806e4969a68b4a3c0a7cab1ad936eb958a2b5ffe5335e19bf
+ md5: 54898d0f524c9dee622d44bbb081a8ab
+ depends:
+ - python >=3.9
+ license: BSD-2-Clause
license_family: BSD
purls:
- - pkg:pypi/asgiref?source=hash-mapping
- size: 27187
- timestamp: 1763585269736
-- conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda
- sha256: 33d12250c870e06c9a313c6663cfbf1c50380b73dfbbb6006688c3134b29b45a
- md5: 5d842988b11a8c3ab57fb70840c83d24
+ - pkg:pypi/appnope?source=hash-mapping
+ size: 10076
+ timestamp: 1733332433806
+- conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-25.1.0-pyhd8ed1ab_0.conda
+ sha256: bea62005badcb98b1ae1796ec5d70ea0fc9539e7d59708ac4e7d41e2f4bb0bad
+ md5: 8ac12aff0860280ee0cff7fa2cf63f3b
depends:
+ - argon2-cffi-bindings
- python >=3.9
- license: Apache-2.0
- license_family: Apache
+ - typing-extensions
+ constrains:
+ - argon2_cffi ==999
+ license: MIT
+ license_family: MIT
purls:
- - pkg:pypi/async-timeout?source=hash-mapping
- size: 11763
- timestamp: 1733235428203
-- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda
- sha256: f6c3c19fa599a1a856a88db166c318b148cac3ee4851a9905ed8a04eeec79f45
- md5: c7944d55af26b6d2d7629e27e9a972c1
+ - pkg:pypi/argon2-cffi?source=hash-mapping
+ size: 18715
+ timestamp: 1749017288144
+- conda: https://conda.anaconda.org/conda-forge/osx-64/argon2-cffi-bindings-25.1.0-py312h80b0991_2.conda
+ sha256: b18ea88c1a3e8c9d6a05f1aa71928856cfdcb5fd4ad0353638f4bac3f0b9b9a2
+ md5: 66f6b81d4bf42e3da028763e9d873bff
depends:
- - python >=3.10
+ - __osx >=10.13
+ - cffi >=1.0.1
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/argon2-cffi-bindings?source=hash-mapping
+ size: 33431
+ timestamp: 1762509769660
+- conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-25.1.0-py312he06e257_2.conda
+ sha256: 38c5e43d991b0c43713fa2ceba3063afa4ccad2dd4c8eb720143de54d461a338
+ md5: 5dc3781bbc4ddce0bf250a04c1a192c2
+ depends:
+ - cffi >=1.0.1
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: MIT
license_family: MIT
purls:
- - pkg:pypi/attrs?source=hash-mapping
- size: 60101
- timestamp: 1759762331492
+ - pkg:pypi/argon2-cffi-bindings?source=hash-mapping
+ size: 38535
+ timestamp: 1762509763237
+- conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda
+ sha256: 792da8131b1b53ff667bd6fc617ea9087b570305ccb9913deb36b8e12b3b5141
+ md5: 85c4f19f377424eafc4ed7911b291642
+ depends:
+ - python >=3.10
+ - python-dateutil >=2.7.0
+ - python-tzdata
+ - python
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/arrow?source=hash-mapping
+ size: 113854
+ timestamp: 1760831179410
+- conda: https://conda.anaconda.org/conda-forge/noarch/asgiref-3.11.0-pyhcf101f3_1.conda
+ sha256: a831ae19fbf7d0d019066a726185844480c29010cac42c3a494305b34490d38b
+ md5: d18baa0a8838efe07cc8cd1d3019a084
+ depends:
+ - python >=3.10
+ - typing_extensions >=4
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/asgiref?source=hash-mapping
+ size: 28059
+ timestamp: 1767729187904
+- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda
+ sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010
+ md5: 9673a61a297b00016442e022d689faa6
+ depends:
+ - python >=3.10
+ constrains:
+ - astroid >=2,<5
+ license: Apache-2.0
+ license_family: Apache
+ purls:
+ - pkg:pypi/asttokens?source=hash-mapping
+ size: 28797
+ timestamp: 1763410017955
- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda
sha256: c13d5e42d187b1d0255f591b7ce91201d4ed8a5370f0d986707a802c20c9d32f
md5: 537296d57ea995666c68c821b00e360b
@@ -714,26 +1044,23 @@ packages:
purls: []
size: 119662
timestamp: 1764765258455
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.9.1-h06c2b12_7.conda
- sha256: 5cb6fc96c300c1bc1668adb59ca1017212c4998ab27b6eaf2fd9ffa58a222005
- md5: 800fe3ae781677fc4b5225f51129e00e
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.9.3-h2970c50_0.conda
+ sha256: 1ca3be8873335aff46da2d613c0e9e0c27b9878e402548e3cf31cd378a2f9342
+ md5: 6f42aac88a3b880dd3a4e0fe61f418bc
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-sdkutils >=0.2.4,<0.2.5.0a0
- aws-c-http >=0.10.7,<0.10.8.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
- - aws-c-cal >=0.9.10,<0.9.11.0a0
+ - aws-c-sdkutils >=0.2.4,<0.2.5.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
+ - aws-c-cal >=0.9.13,<0.9.14.0a0
- aws-c-io >=0.23.3,<0.23.4.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 116063
- timestamp: 1763068418806
+ size: 125616
+ timestamp: 1764765271198
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.9.13-hea39f9f_1.conda
sha256: c085b749572ca7c137dfbf8a2a4fd505657f8f7f8a7b374d5f41bf4eb2dd9214
md5: cbf7be9e03e8b5e38ec60b6dbdf3a649
@@ -745,19 +1072,19 @@ packages:
purls: []
size: 45262
timestamp: 1764593359925
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.10-ha82e055_1.conda
- sha256: 61033a59fd56992a4e479e87c816e3ab68574cb84b545839edfd9fa700978285
- md5: 11394bff1f454f58ee000350ff3c23a6
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.9.13-h46f3b43_1.conda
+ sha256: 5f61082caea9fbdd6ba02702935e9dea9997459a7e6c06fd47f21b81aac882fb
+ md5: 7cc4953d504d4e8f3d6f4facb8549465
depends:
- - aws-c-common >=0.12.5,<0.12.6.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: Apache
purls: []
- size: 53009
- timestamp: 1762858739380
+ size: 53613
+ timestamp: 1764593604081
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.12.6-h8616949_0.conda
sha256: 66fb2710898bb3e25cb4af52ee88a0559dcde5e56e6bd09b31b98a346a89b2e3
md5: c7f2d588a6d50d170b343f3ae0b72e62
@@ -768,9 +1095,9 @@ packages:
purls: []
size: 230785
timestamp: 1763585852531
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.12.5-hfd05255_1.conda
- sha256: 87beb42fc12e7f0324d8abd5dd6892f84f82007be09818cad64010df75442e0c
- md5: 47ade93c2f58573ad29519ab7be05321
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.12.6-hfd05255_0.conda
+ sha256: 0627691c34eb3d9fcd18c71346d9f16f83e8e58f9983e792138a2cccf387d18a
+ md5: b1465f33b05b9af02ad0887c01837831
depends:
- ucrt >=10.0.20348.0
- vc >=14.3,<15
@@ -778,8 +1105,8 @@ packages:
license: Apache-2.0
license_family: Apache
purls: []
- size: 236775
- timestamp: 1762858573513
+ size: 236441
+ timestamp: 1763586152571
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.3.1-h901532c_9.conda
sha256: b99ddb6654ca12b9f530ca4cbe4d2063335d4ac43f9d97092c4076ccaf9b89e7
md5: abb79371a321d47da8f7ddca128533de
@@ -791,22 +1118,19 @@ packages:
purls: []
size: 21423
timestamp: 1764593738902
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.1-h83e01e5_8.conda
- sha256: ef7265145a1afe41bf4676f08634e76918afb6fad3bc934bdec02f90d1908eba
- md5: c531103556862e44ba19003638b72fb0
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.3.1-hcb3a2da_9.conda
+ sha256: ff1046d67709960859adfa5793391a2d233bb432ec7429069fcfab5b643827df
+ md5: 0888dbe9e883582d138ec6221f5482d6
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-common >=0.12.5,<0.12.6.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 23132
- timestamp: 1762957485681
+ size: 23136
+ timestamp: 1764593733263
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.5.7-ha05da6a_1.conda
sha256: 56f7aebd59d5527830ef7cf6e91f63ee4c5cf510af56529276affe8e2dc9eb24
md5: e0d71662f35b21fb993484238b4861d9
@@ -821,24 +1145,21 @@ packages:
purls: []
size: 52911
timestamp: 1764675471218
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.5.6-h3116ff1_6.conda
- sha256: 5e543fb10106067c383eb5525eb162df3f15fbdcd22b1728cf97f66e3fff4c0b
- md5: 3e3384e8f33ac0e7d22942d74c566c3e
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.5.7-ha388e84_1.conda
+ sha256: 5fbbfd835831dace087064d08c38eb279b7db3231fbd0db32fad86fe9273c10c
+ md5: 34e3b065b76c8a144c92e224cc3f5672
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- aws-checksums >=0.2.7,<0.2.8.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-io >=0.23.3,<0.23.4.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 57033
- timestamp: 1762957450748
+ size: 57054
+ timestamp: 1764675494741
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.10.7-h924c446_5.conda
sha256: 53ee041db79f6cbff62179b2f693e50e484d163b9a843a3dbbb80dbc36220c7e
md5: acff093ebb711857fb78fae3b656631c
@@ -853,25 +1174,22 @@ packages:
purls: []
size: 192149
timestamp: 1764675489248
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.10.7-h52d8906_4.conda
- sha256: 609ba9e55b22f083168f56990baf28be6a921d00c6629ce3fa19c0ac2e6ee931
- md5: 0a8e38b5b7ef67f38d0159dc2578fcac
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.10.7-hc678f4a_5.conda
+ sha256: 4f41b922ce01c983f98898208d49af5f3d6b0d8f3e8dcb44bd13d8183287b19a
+ md5: 3427460b0654d317e72a0ba959bb3a23
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-cal >=0.9.10,<0.9.11.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
- aws-c-io >=0.23.3,<0.23.4.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-compression >=0.3.1,<0.3.2.0a0
+ - aws-c-cal >=0.9.13,<0.9.14.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 206678
- timestamp: 1763054496834
+ size: 206709
+ timestamp: 1764675527860
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.23.3-hf559bb5_5.conda
sha256: 734496fb5a33a4d13ff0a27c5bc4a0f4e7fe9ed15ec099722d5be82b456b9502
md5: d9cc056da3a1ee0a2da750d10a5496f3
@@ -884,23 +1202,20 @@ packages:
purls: []
size: 182572
timestamp: 1765168277462
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.23.3-h6f46d10_3.conda
- sha256: f416a4eeee057943203324ffbbbb1c0438d797dce66674215542de27d518d751
- md5: dd719de51293043208c5b5da2db2e803
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.23.3-h0d5b9f9_5.conda
+ sha256: 2d726ffd67fb387dbebf63c9b9965b476b9d670f683e71c3dca1feb6365ddc7c
+ md5: 400792109e426730ac9047fd6c9537ef
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-common >=0.12.5,<0.12.6.0a0
- - aws-c-cal >=0.9.10,<0.9.11.0a0
+ - aws-c-cal >=0.9.13,<0.9.14.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 182047
- timestamp: 1763043613192
+ size: 182053
+ timestamp: 1765168273517
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.13.3-ha72ff4e_11.conda
sha256: c05215c85f90a0caba1202f4c852d6e3a2ad93b4a25f286435a8e855db4237ae
md5: 96f22c912f1cf3493d9113b9fd04c912
@@ -914,24 +1229,21 @@ packages:
purls: []
size: 188230
timestamp: 1764681760102
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.13.3-h9821516_10.conda
- sha256: c0d00f4c13ecc105b1c48bb0ada092d1cc6cb178a22a089c35c326bcdb83154f
- md5: c074aef20987db9d2968a5e1242b2515
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.13.3-hfa314fa_11.conda
+ sha256: 9b241397ef436dcf67e8e6cde15ff9c0d03ea942ad11e27c77caecce0d51b5be
+ md5: 6c043365f1d3f89c0b68238c6f5b8cce
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- aws-c-io >=0.23.3,<0.23.4.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-http >=0.10.7,<0.10.8.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 206308
- timestamp: 1762957392292
+ size: 206357
+ timestamp: 1764681793150
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.11.3-he30762a_1.conda
sha256: 9c989a5f0b35ff5cee91b74bcba0d540ce5684450dc072ba0bb5299783cdf9cd
md5: 33c653401dc7b016b0011cb4d16de458
@@ -948,27 +1260,24 @@ packages:
purls: []
size: 133827
timestamp: 1765174162875
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.10.1-he380ad5_2.conda
- sha256: 6749b421fc240e8108304d288d4560c82a4791acd61db9e005303e2068ed5c6d
- md5: f50a31a10ee0c342ed17750a208285d8
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.11.3-ha659bf3_1.conda
+ sha256: cda138c03683e85f29eafc680b043a40f304ac8759138dc141a42878eb17a90f
+ md5: dcfc08ccd8e332411c454e38110ea915
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-cal >=0.9.10,<0.9.11.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
- - aws-checksums >=0.2.7,<0.2.8.0a0
- aws-c-http >=0.10.7,<0.10.8.0a0
- - aws-c-auth >=0.9.1,<0.9.2.0a0
+ - aws-c-auth >=0.9.3,<0.9.4.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
+ - aws-checksums >=0.2.7,<0.2.8.0a0
- aws-c-io >=0.23.3,<0.23.4.0a0
+ - aws-c-cal >=0.9.13,<0.9.14.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 140705
- timestamp: 1763077789447
+ size: 141805
+ timestamp: 1765174184168
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.2.4-h901532c_4.conda
sha256: 468629dbf52fee6dcabda1fcb0c0f2f29941b9001dcc75a57ebfbe38d0bde713
md5: b384fb05730f549a55cdb13c484861eb
@@ -980,22 +1289,19 @@ packages:
purls: []
size: 55664
timestamp: 1764610141049
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.4-h83e01e5_3.conda
- sha256: 098b17697f392ed3253754f4a5c776b422a89489834bfc7b8593ac46294820e4
- md5: 1860dd0926b5eb0fcb19b581b908975b
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.2.4-hcb3a2da_4.conda
+ sha256: c86c30edba7457e04d905c959328142603b62d7d1888aed893b2e21cca9c302c
+ md5: 3c97faee5be6fd0069410cf2bca71c85
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-common >=0.12.5,<0.12.6.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 56482
- timestamp: 1762957352222
+ size: 56509
+ timestamp: 1764610148907
- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.2.7-h901532c_5.conda
sha256: 0f67c453829592277f90d520f7855e260cf0565a3dc59fe90c55293996b7fbe9
md5: cccf553ce36da9ae739206b69c1a4d28
@@ -1007,101 +1313,92 @@ packages:
purls: []
size: 75646
timestamp: 1764593751665
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.7-h83e01e5_4.conda
- sha256: 5112b8809adc01dbd77910514a0bcda87dd7fb74519e9d85beb07d32111706de
- md5: 789551227529bc1c3ef3cbd1a2a1f5e4
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.2.7-hcb3a2da_5.conda
+ sha256: ca5e0719b7ca257462a4aa7d3b99fde756afaf579ee1472cac91c04c7bf3a725
+ md5: 38f1501fc55f833a4567c83581a2d2ed
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-common >=0.12.5,<0.12.6.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 93120
- timestamp: 1762957265474
-- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.35.2-h7484968_6.conda
- sha256: 199db73ed3d3c7503b4cdfaef2e18bd7b2e67c2464d64c37f250833897a65d84
- md5: 1c3916576404e725bb46c8393e90dab5
+ size: 93142
+ timestamp: 1764593765744
+- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.35.4-h7484968_0.conda
+ sha256: d3ab94c9245f667c78940d6838529401795ce0df02ad561d190c38819a312cd9
+ md5: 31db311b3005b16ff340796e424a6b3c
depends:
- libcxx >=19
- __osx >=10.13
- - aws-c-event-stream >=0.5.7,<0.5.8.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-mqtt >=0.13.3,<0.13.4.0a0
+ - aws-c-s3 >=0.11.3,<0.11.4.0a0
- aws-c-auth >=0.9.3,<0.9.4.0a0
- - aws-c-http >=0.10.7,<0.10.8.0a0
+ - aws-c-sdkutils >=0.2.4,<0.2.5.0a0
- aws-c-io >=0.23.3,<0.23.4.0a0
- aws-c-cal >=0.9.13,<0.9.14.0a0
- - aws-c-common >=0.12.6,<0.12.7.0a0
- - aws-c-s3 >=0.11.3,<0.11.4.0a0
- - aws-c-sdkutils >=0.2.4,<0.2.5.0a0
+ - aws-c-http >=0.10.7,<0.10.8.0a0
+ - aws-c-event-stream >=0.5.7,<0.5.8.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 344127
- timestamp: 1765193382465
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.35.2-h1a9a3a2_4.conda
- sha256: ef2efec9f253c8ec7df0dc659af319c7ef230412599c234db4078e7732c947f9
- md5: 832762e4fef8d8719b502a11e7cbb3d8
+ size: 343812
+ timestamp: 1765200322696
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.35.4-hca034e6_0.conda
+ sha256: 7b4aef9e1823207a5f91e8b5b95853bdfafcfea306cd62b99fd53c38aa5c3da0
+ md5: ce1a20b5c406727e32222ac91e5848c4
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - aws-c-cal >=0.9.10,<0.9.11.0a0
- aws-c-mqtt >=0.13.3,<0.13.4.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
- - aws-c-auth >=0.9.1,<0.9.2.0a0
- - aws-c-event-stream >=0.5.6,<0.5.7.0a0
- - aws-c-s3 >=0.10.1,<0.10.2.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-sdkutils >=0.2.4,<0.2.5.0a0
- - aws-c-io >=0.23.3,<0.23.4.0a0
+ - aws-c-event-stream >=0.5.7,<0.5.8.0a0
- aws-c-http >=0.10.7,<0.10.8.0a0
+ - aws-c-cal >=0.9.13,<0.9.14.0a0
+ - aws-c-auth >=0.9.3,<0.9.4.0a0
+ - aws-c-s3 >=0.11.3,<0.11.4.0a0
+ - aws-c-io >=0.23.3,<0.23.4.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 300822
- timestamp: 1763082711936
-- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.606-hffd60a0_9.conda
- sha256: a58e471c09ffc63bafa4a2833a1d8f175693852763d840c446092898fa635b31
- md5: a76d9ef0a4417a6f418207b62ca3c796
+ size: 302247
+ timestamp: 1765200336894
+- conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.606-h386ebac_10.conda
+ sha256: 3b7ee2bc2bbd41e1fca87b1c1896b2186644f20912bf89756fd39020f8461e13
+ md5: 768c6b78e331a2938af208e062fd6702
depends:
- libcxx >=19
- __osx >=10.13
- libcurl >=8.17.0,<9.0a0
- - aws-crt-cpp >=0.35.2,<0.35.3.0a0
+ - aws-crt-cpp >=0.35.4,<0.35.5.0a0
- libzlib >=1.3.1,<2.0a0
- aws-c-common >=0.12.6,<0.12.7.0a0
- aws-c-event-stream >=0.5.7,<0.5.8.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 3313038
- timestamp: 1765199752667
-- conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.606-h6446450_7.conda
- sha256: 6f99e6bf3687cf53cb258e4a57878dbe008eb9e97447ece3a22aeab163f974cb
- md5: d86a310ea5d7f2f6030bd7e15527b670
+ size: 3313002
+ timestamp: 1765257111791
+- conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.606-hac16450_10.conda
+ sha256: 8a12c4f6774ecb3641048b74133ff5e6c2b560469fe5ac1d7515631b84e63059
+ md5: d9b942bede589d0ad1e8e360e970efd0
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
+ - aws-crt-cpp >=0.35.4,<0.35.5.0a0
+ - aws-c-common >=0.12.6,<0.12.7.0a0
- libzlib >=1.3.1,<2.0a0
- - aws-crt-cpp >=0.35.2,<0.35.3.0a0
- - aws-c-common >=0.12.5,<0.12.6.0a0
- - aws-c-event-stream >=0.5.6,<0.5.7.0a0
+ - aws-c-event-stream >=0.5.7,<0.5.8.0a0
license: Apache-2.0
license_family: APACHE
purls: []
- size: 3438269
- timestamp: 1763211032811
+ size: 3438133
+ timestamp: 1765257127502
- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-core-cpp-1.16.1-he2a98a9_0.conda
sha256: 923a0f9fab0c922e17f8bb27c8210d8978111390ff4e0cf6c1adff3c1a4d13bc
md5: 9f39c22aad61e76bfb73bb7d4114efac
@@ -1128,22 +1425,22 @@ packages:
purls: []
size: 174582
timestamp: 1761067038720
-- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.15.0-h388f2e7_1.conda
- sha256: 0a736f04c9778b87884422ebb6b549495430652204d964ff161efb719362baee
- md5: 6b5f36e610295f4f859dd9cf680bbf7d
+- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.16.0-ha4e89a6_0.conda
+ sha256: 446abd2fad0aa6b74207733534efc5e3ac4624bee981f40495cd4b8ae02d65ed
+ md5: 5f76a3745c0eb7021845161c9a1bfee3
depends:
- __osx >=10.13
- azure-core-cpp >=1.16.1,<1.16.2.0a0
- - azure-storage-common-cpp >=12.11.0,<12.11.1.0a0
+ - azure-storage-common-cpp >=12.12.0,<12.12.1.0a0
- libcxx >=19
license: MIT
license_family: MIT
purls: []
- size: 432811
- timestamp: 1761080273088
-- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.11.0-h56a711b_1.conda
- sha256: 322919e9842ddf5c9d0286667420a76774e1e42ae0520445d65726f8a2565823
- md5: 278ccb9a3616d4342731130287c3ba79
+ size: 434189
+ timestamp: 1768483686754
+- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.12.0-h2a5eb39_0.conda
+ sha256: b0ca0c4896fcc94ed1756a41c38fac2a95d28748ca89a90f99f6ceb8b4db0c26
+ md5: 53d1b2dc90315c3b8e4ecc86966ab7bd
depends:
- __osx >=10.13
- azure-core-cpp >=1.16.1,<1.16.2.0a0
@@ -1154,25 +1451,25 @@ packages:
license: MIT
license_family: MIT
purls: []
- size: 126230
- timestamp: 1761066840950
-- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.13.0-h1984e67_1.conda
- sha256: 268175ab07f1917eff35e4c38a17a2b71c5f9b86e38e5c0b313da477600a82df
- md5: ef5701f2da108d432e7872d58e8ac64e
+ size: 126024
+ timestamp: 1768407197686
+- conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.14.0-h7f37a48_0.conda
+ sha256: f3aabb7c5023828aba930b82046b81b87a794b0c5c8a1db82043e88b3f5ca136
+ md5: 30ca75c03ba3166f44852b33f07f077c
depends:
- __osx >=10.13
- azure-core-cpp >=1.16.1,<1.16.2.0a0
- - azure-storage-blobs-cpp >=12.15.0,<12.15.1.0a0
- - azure-storage-common-cpp >=12.11.0,<12.11.1.0a0
+ - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0
+ - azure-storage-common-cpp >=12.12.0,<12.12.1.0a0
- libcxx >=19
license: MIT
license_family: MIT
purls: []
- size: 203298
- timestamp: 1761095036240
-- conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.2.0-py312hcb931b7_0.conda
- sha256: 5fe811e1c582febda13afab3cf06badda62157bd851cdb6f67201da827fdbdde
- md5: 5b8b4a50dae13f2d8412388ae7fa996b
+ size: 204696
+ timestamp: 1768502627687
+- conda: https://conda.anaconda.org/conda-forge/osx-64/backports.zstd-1.3.0-py312h6917036_0.conda
+ sha256: 96eefe04e072e8c31fcac7d5e89c9d4a558d2565eef629cfc691a755b2fa6e59
+ md5: c8b7d0fb5ff6087760dde8f5f388b135
depends:
- python
- __osx >=10.13
@@ -1181,21 +1478,60 @@ packages:
license: BSD-3-Clause AND MIT AND EPL-2.0
purls:
- pkg:pypi/backports-zstd?source=hash-mapping
- size: 238407
- timestamp: 1765057706612
-- pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl
- name: beautifulsoup4
- version: 4.14.3
- sha256: 0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb
- requires_dist:
- - soupsieve>=1.6.1
- - typing-extensions>=4.0.0
- - cchardet ; extra == 'cchardet'
- - chardet ; extra == 'chardet'
- - charset-normalizer ; extra == 'charset-normalizer'
- - html5lib ; extra == 'html5lib'
- - lxml ; extra == 'lxml'
- requires_python: '>=3.7.0'
+ size: 238093
+ timestamp: 1767044989890
+- conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.3.0-py312h06d0912_0.conda
+ sha256: c9c97cd644faa6c4fb38017c5ecfd082f56a3126af5925d246364fa4a22b2a74
+ md5: 2db2b356f08f19ce4309a79a9ee6b9d8
+ depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
+ - zstd >=1.5.7,<1.6.0a0
+ license: BSD-3-Clause AND MIT AND EPL-2.0
+ purls:
+ - pkg:pypi/backports-zstd?source=hash-mapping
+ size: 236635
+ timestamp: 1767045021157
+- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda
+ sha256: bf1e71c3c0a5b024e44ff928225a0874fc3c3356ec1a0b6fe719108e6d1288f6
+ md5: 5267bef8efea4127aacd1f4e1f149b6e
+ depends:
+ - python >=3.10
+ - soupsieve >=1.2
+ - typing-extensions
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/beautifulsoup4?source=hash-mapping
+ size: 90399
+ timestamp: 1764520638652
+- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_0.conda
+ sha256: e03ba1a2b93fe0383c57920a9dc6b4e0c2c7972a3f214d531ed3c21dc8f8c717
+ md5: b1a27250d70881943cca0dd6b4ba0956
+ depends:
+ - python >=3.10
+ - webencodings
+ - python
+ constrains:
+ - tinycss >=1.1.0,<1.5
+ license: Apache-2.0 AND MIT
+ purls:
+ - pkg:pypi/bleach?source=hash-mapping
+ size: 141952
+ timestamp: 1763589981635
+- conda: https://conda.anaconda.org/conda-forge/noarch/bleach-with-css-6.3.0-h5f6438b_0.conda
+ sha256: f85f6b2c7938d8c20c80ce5b7e6349fafbb49294641b5648273c5f892b150768
+ md5: 08a03378bc5293c6f97637323802f480
+ depends:
+ - bleach ==6.3.0 pyhcf101f3_0
+ - tinycss2
+ license: Apache-2.0 AND MIT
+ purls: []
+ size: 4386
+ timestamp: 1763589981639
- conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda
sha256: 876bdb1947644b4408f498ac91c61f1f4987d2c57eb47c0aba0d5ee822cd7da9
md5: 717852102c68a082992ce13a53403f9d
@@ -1358,47 +1694,58 @@ packages:
purls: []
size: 186122
timestamp: 1765215100384
-- conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.5-h2466b09_0.conda
- sha256: b52214a0a5632a12587d8dac6323f715bcc890f884efba5a2ce01c48c64ec6dc
- md5: b1f84168da1f0b76857df7e5817947a9
+- conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.6-hfd05255_0.conda
+ sha256: 5e1e2e24ce279f77e421fcc0e5846c944a8a75f7cf6158427c7302b02984291a
+ md5: 7c6da34e5b6e60b414592c74582e28bf
depends:
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: MIT
license_family: MIT
purls: []
- size: 194147
- timestamp: 1744128507613
-- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda
- sha256: 686a13bd2d4024fc99a22c1e0e68a7356af3ed3304a8d3ff6bb56249ad4e82f0
- md5: f98fb7db808b94bc1ec5b0e62f9f1069
+ size: 193550
+ timestamp: 1765215100218
+- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda
+ sha256: 4ddcb01be03f85d3db9d881407fb13a673372f1b9fac9c836ea441893390e049
+ md5: 84d389c9eee640dda3d26fc5335c67d8
depends:
- __win
license: ISC
purls: []
- size: 152827
- timestamp: 1762967310929
-- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda
- sha256: b986ba796d42c9d3265602bc038f6f5264095702dd546c14bc684e60c385e773
- md5: f0991f0f84902f6b6009b4d2350a83aa
+ size: 147139
+ timestamp: 1767500904211
+- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda
+ sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2
+ md5: bddacf101bb4dd0e51811cb69c7790e2
depends:
- __unix
license: ISC
purls: []
- size: 152432
- timestamp: 1762967197890
-- conda: https://conda.anaconda.org/conda-forge/noarch/cachetools-6.2.2-pyhd8ed1ab_0.conda
- sha256: 69e3870170ca767b2f82ca29854d252669dfc9aba873f7e9b629f642bad4342b
- md5: 9c265afcec13eb6e844ae51b4a4b52ad
+ size: 146519
+ timestamp: 1767500828366
+- conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2
+ noarch: python
+ sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17
+ md5: 9b347a7ec10940d3f7941ff6c460b551
depends:
- - python >=3.10
- license: MIT
- license_family: MIT
+ - cached_property >=1.5.2,<1.5.3.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls: []
+ size: 4134
+ timestamp: 1615209571450
+- conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2
+ sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7
+ md5: 576d629e47797577ab0f1b351297ef4a
+ depends:
+ - python >=3.6
+ license: BSD-3-Clause
+ license_family: BSD
purls:
- - pkg:pypi/cachetools?source=hash-mapping
- size: 16751
- timestamp: 1763073377061
+ - pkg:pypi/cached-property?source=hash-mapping
+ size: 11065
+ timestamp: 1615209567874
- conda: https://conda.anaconda.org/conda-forge/osx-64/catalogue-2.0.10-py312hb401068_2.conda
sha256: 48d93c68f5aeb9c2c5f1ba79dd0745d43d9833416289f6caaae5d12598534c0d
md5: ecc0d5cbe8917f344cbd0888636d2def
@@ -1423,16 +1770,16 @@ packages:
- pkg:pypi/catalogue?source=hash-mapping
size: 43293
timestamp: 1756302042645
-- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2025.11.12-pyhd8ed1ab_0.conda
- sha256: 083a2bdad892ccf02b352ecab38ee86c3e610ba9a4b11b073ea769d55a115d32
- md5: 96a02a5c1a65470a7e4eedb644c872fd
+- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda
+ sha256: 110338066d194a715947808611b763857c15458f8b3b97197387356844af9450
+ md5: eacc711330cd46939f66cd401ff9c44b
depends:
- python >=3.10
license: ISC
purls:
- pkg:pypi/certifi?source=compressed-mapping
- size: 157131
- timestamp: 1762976260320
+ size: 150969
+ timestamp: 1767500900768
- conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-2.0.0-py312he90777b_1.conda
sha256: e2888785e50ef99c63c29fb3cfbfb44cdd50b3bb7cd5f8225155e362c391936f
md5: cf70c8244e7ceda7e00b1881ad7697a9
@@ -1507,6 +1854,18 @@ packages:
- pkg:pypi/click?source=hash-mapping
size: 96620
timestamp: 1764518654675
+- conda: https://conda.anaconda.org/conda-forge/noarch/click-default-group-1.2.4-pyhd8ed1ab_1.conda
+ sha256: cb7279eecddbd35ea78fd0e189a9a7db8b84c2c0e3b1271cf26251615f75dc4d
+ md5: 7cd83dd6831b61ad9624a694e4afd7dc
+ depends:
+ - click
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/click-default-group?source=hash-mapping
+ size: 10124
+ timestamp: 1734029586298
- conda: https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.23.0-pyhd8ed1ab_0.conda
sha256: 2e188a1c4c89a2ebe7b81935bc7d34cd892c5d9f590ba3af3f20de812d7d97bd
md5: fa372d1e52f3247f758cdbd517a4047d
@@ -1531,9 +1890,9 @@ packages:
- pkg:pypi/cloudpickle?source=compressed-mapping
size: 27353
timestamp: 1765303462831
-- conda: https://conda.anaconda.org/conda-forge/noarch/cmudict-1.1.2-pyhcf101f3_0.conda
- sha256: 0119659c60a9ac8271304b9f04b05d2c3988d8a506954648687879fc83bc44ad
- md5: 968ae2cbe437c38fa8664584aff8556b
+- conda: https://conda.anaconda.org/conda-forge/noarch/cmudict-1.1.3-pyhcf101f3_0.conda
+ sha256: f359feab1dd301d304aa49d800f38168b64eeb1f516292815066e8a09f5d5df7
+ md5: 6c57df8cb6c64babd463b5b2e8779e06
depends:
- python >=3.10,<4.0
- importlib-metadata >=5
@@ -1543,8 +1902,8 @@ packages:
license_family: GPL
purls:
- pkg:pypi/cmudict?source=hash-mapping
- size: 932117
- timestamp: 1762728563248
+ size: 932021
+ timestamp: 1767469484322
- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287
md5: 962b9857ee8e7018c22f2776ffa0b2d7
@@ -1556,6 +1915,18 @@ packages:
- pkg:pypi/colorama?source=hash-mapping
size: 27011
timestamp: 1733218222191
+- conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda
+ sha256: 576a44729314ad9e4e5ebe055fbf48beb8116b60e58f9070278985b2b634f212
+ md5: 2da13f2b299d8e1995bafbbe9689a2f7
+ depends:
+ - python >=3.9
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/comm?source=hash-mapping
+ size: 14690
+ timestamp: 1753453984907
- conda: https://conda.anaconda.org/conda-forge/noarch/confection-0.1.5-pyhecae5ae_0.conda
sha256: caeecf2eeb268b64830156d2ab58eb6419514e1f1ab4250d6995a6eccdf8ec7c
md5: cb7c903ea9e763e1e026d8633ae81964
@@ -1570,37 +1941,48 @@ packages:
- pkg:pypi/confection?source=hash-mapping
size: 37405
timestamp: 1740630763363
-- conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hd099df3_3.conda
- sha256: a317f6d5c8d574656665907fa5bf9ca1017ef132a988c6d126f2121d7817e4ec
- md5: 83036bb23aad87b7256d7ae13d1fdb89
+- conda: https://conda.anaconda.org/conda-forge/osx-64/contourpy-1.3.3-py312hb0c38da_4.conda
+ sha256: 6c03943009b07c6deb3a64afa094b6ca694062b58127a4da6f656a13d508c340
+ md5: 625f08687ba33cc9e57865e7bf8e8123
depends:
+ - numpy >=1.25
+ - python
- __osx >=10.13
- libcxx >=19
- - numpy >=1.25
- - python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/contourpy?source=hash-mapping
- size: 269184
- timestamp: 1762525977233
-- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py312hf90b1b7_3.conda
- sha256: 735847f474ffbef028e2bac81c786f46b2498d422b834b799f50e30d95730b37
- md5: 9dabe26ca46b845b669408109975b922
+ size: 298198
+ timestamp: 1769156053873
+- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py312h78d62e6_4.conda
+ sha256: 5f0dd3a4243e8293acc40abf3b11bcb23401268a1ef2ed3bce4d5a060383c1da
+ md5: 475bd41a63e613f2f2a2764cd1cd3b25
depends:
- numpy >=1.25
- - python >=3.12,<3.13.0a0
- - python_abi 3.12.* *_cp312
- - ucrt >=10.0.20348.0
+ - python
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/contourpy?source=hash-mapping
- size: 224936
- timestamp: 1762525927186
+ size: 244035
+ timestamp: 1769155978578
+- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.12-py312hd8ed1ab_1.conda
+ noarch: generic
+ sha256: b88c76a6d6b45378552ccfd9e88b2a073161fe83fd1294c8fa103ffd32f7934a
+ md5: 99d689ccc1a360639eec979fd7805be9
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi * *_cp312
+ license: Python-2.0
+ purls: []
+ size: 45767
+ timestamp: 1761175217281
- conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-46.0.3-py312heb31a8c_1.conda
sha256: 699ecf64e9063ede65956cf5c8138c8f34194b22f2417515f6cfe32d3f0e0a00
md5: 3d055072c43c46fbce57662072fe68ec
@@ -1635,13 +2017,13 @@ packages:
- pkg:pypi/cryptography?source=hash-mapping
size: 1482597
timestamp: 1764805365967
-- conda: https://conda.anaconda.org/conda-forge/osx-64/curl-8.17.0-h7dd4100_1.conda
- sha256: 2dae6ecc7095824880a62411e52d73830a3d3e02ecb0ad08f8901001daf26cf5
- md5: 00c9afdfe7efc4e91252d1e92a5561ef
+- conda: https://conda.anaconda.org/conda-forge/osx-64/curl-8.18.0-h9348e2b_0.conda
+ sha256: 833492b998f441ea1e81cbba5e88a7a05f3c6881b03444dd527248b606278668
+ md5: d4e526c62dedf231b5b9c7200bcf1ce6
depends:
- __osx >=10.13
- krb5 >=1.21.3,<1.22.0a0
- - libcurl 8.17.0 h7dd4100_1
+ - libcurl 8.18.0 h9348e2b_0
- libssh2 >=1.11.1,<2.0a0
- libzlib >=1.3.1,<2.0a0
- openssl >=3.5.4,<4.0a0
@@ -1649,14 +2031,14 @@ packages:
license: curl
license_family: MIT
purls: []
- size: 177191
- timestamp: 1765379694502
-- conda: https://conda.anaconda.org/conda-forge/win-64/curl-8.17.0-h43ecb02_0.conda
- sha256: 42fce6142fc47a3fa6498f9072f85619f3b94095ead18ac906ef2041bae359d0
- md5: c8ce2f4c98f961b65dfc92a217a67a7d
+ size: 179519
+ timestamp: 1767822264822
+- conda: https://conda.anaconda.org/conda-forge/win-64/curl-8.18.0-h43ecb02_0.conda
+ sha256: 864b6de0a7e23abe273d1164a600486413b31502e99ae4fce77ea6c46832c3cd
+ md5: 2a26c0d3fcb56232c577c113bbc02ea9
depends:
- krb5 >=1.21.3,<1.22.0a0
- - libcurl 8.17.0 h43ecb02_0
+ - libcurl 8.18.0 h43ecb02_0
- libssh2 >=1.11.1,<2.0a0
- libzlib >=1.3.1,<2.0a0
- ucrt >=10.0.20348.0
@@ -1665,8 +2047,8 @@ packages:
license: curl
license_family: MIT
purls: []
- size: 181488
- timestamp: 1762333990679
+ size: 183318
+ timestamp: 1767821999612
- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda
sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1
md5: 4c2a8fef270f6c69591889b93f9f55c1
@@ -1676,7 +2058,7 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/cycler?source=compressed-mapping
+ - pkg:pypi/cycler?source=hash-mapping
size: 14778
timestamp: 1764466758386
- conda: https://conda.anaconda.org/conda-forge/osx-64/cykhash-2.0.1-py312h69bf00f_3.conda
@@ -1708,9 +2090,9 @@ packages:
- pkg:pypi/cykhash?source=hash-mapping
size: 356427
timestamp: 1762165985465
-- conda: https://conda.anaconda.org/conda-forge/osx-64/cymem-2.0.13-py312h69bf00f_0.conda
- sha256: 090468549eab67531a98749296018bab40f2f7a2eab1c14d4dd7511b85f63b5a
- md5: 7af866e06db45b3a81a8730db773f9e4
+- conda: https://conda.anaconda.org/conda-forge/osx-64/cymem-2.0.13-py312h11f4fa3_1.conda
+ sha256: 0e209ac09cf69e904526b694753403d23bb698202d79ed0095f64209b58d0561
+ md5: f7e7bf596b7061bdedee6b8f5be7fc2e
depends:
- __osx >=10.13
- libcxx >=19
@@ -1720,11 +2102,11 @@ packages:
license_family: MIT
purls:
- pkg:pypi/cymem?source=hash-mapping
- size: 47502
- timestamp: 1763189195389
-- conda: https://conda.anaconda.org/conda-forge/win-64/cymem-2.0.13-py312hbb81ca0_0.conda
- sha256: 82ff8606752c77b4ae58b4763699962e4959faa588567cf226f6c9cbd5c13189
- md5: b29407fcdb6e81d95bf828f6f99ceed5
+ size: 47540
+ timestamp: 1768534201070
+- conda: https://conda.anaconda.org/conda-forge/win-64/cymem-2.0.13-py312hbb81ca0_1.conda
+ sha256: 3bab0fc28e0c6522a30bb1758eed205f36bf1195d0cdf5137ca8382a0b402aee
+ md5: b05a1d334e3659761905fe14cedd16c3
depends:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -1735,11 +2117,11 @@ packages:
license_family: MIT
purls:
- pkg:pypi/cymem?source=hash-mapping
- size: 44763
- timestamp: 1763189105007
-- conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.2.2-py312h33b39b6_0.conda
- sha256: 624086f2cbd741563c3e04c809c6d58b320d9044910dd7ef3d2d744401d5dce8
- md5: 4b7cacce78c222b352e722992c57ccdf
+ size: 44877
+ timestamp: 1768533877406
+- conda: https://conda.anaconda.org/conda-forge/osx-64/cython-3.2.4-py312h84c01df_0.conda
+ sha256: 5db7877826ffa0f83d5987382af2845a6e812df068efb3700c1b771e7484baef
+ md5: 7c5f0ac24777a4f593014808f409ea55
depends:
- __osx >=10.13
- libcxx >=19
@@ -1749,11 +2131,11 @@ packages:
license_family: APACHE
purls:
- pkg:pypi/cython?source=hash-mapping
- size: 3490314
- timestamp: 1764543314826
-- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.2-py312hd245ac3_0.conda
- sha256: fc1761dda16220e2c838f828670690c31836e5ec390df596febd8c79ebc40063
- md5: 3171fcbc77a315f3b4b56d63d7d543fa
+ size: 3485945
+ timestamp: 1767577212487
+- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py312hd245ac3_0.conda
+ sha256: 68e921fad16accb32e86c7c73abaea7d49c9346e078924d0a593f821672a5a0c
+ md5: 575ebca0d973015c21087b800bc48515
depends:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -1764,8 +2146,8 @@ packages:
license_family: APACHE
purls:
- pkg:pypi/cython?source=hash-mapping
- size: 3275066
- timestamp: 1764543333310
+ size: 3285032
+ timestamp: 1767577225362
- conda: https://conda.anaconda.org/conda-forge/osx-64/cython-blis-1.3.3-py312hfed6dc8_0.conda
sha256: eb0ca974f77ea4c88ffcf80dd7f61e05d758e4e31172f8c75726cfa8b27b385e
md5: ce977db4f4c396dfc4389d2e8d1c79a4
@@ -1796,6 +2178,35 @@ packages:
- pkg:pypi/blis?source=hash-mapping
size: 3308236
timestamp: 1763428324689
+- conda: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.19-py312h6c02384_0.conda
+ sha256: ce1ca3e92f5879a3644fa14f584f1ca826c464bdeae622a484776b0353affb14
+ md5: d977af0b04dcbb6bf264a54a8c8bcea1
+ depends:
+ - python
+ - libcxx >=19
+ - __osx >=11.0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/debugpy?source=hash-mapping
+ size: 2762312
+ timestamp: 1765840820960
+- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.19-py312ha1a9051_0.conda
+ sha256: b885ff2eb9d7ac4d59620ae30f0fd721ca67dafe69f3301a3e14303b80e22350
+ md5: 1f0c0be0cf4893e17e71a023865c7230
+ depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/debugpy?source=hash-mapping
+ size: 3995535
+ timestamp: 1765840830814
- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda
sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017
md5: 9ce473d1d1be1cc3810856a48b3fab32
@@ -1818,9 +2229,20 @@ packages:
- pypdf>=3.3.0,<4.0.0 ; extra == 'pdf'
- requests>=2.23.0,<3.0.0
requires_python: '>=3.7,<4.0'
-- conda: https://conda.anaconda.org/conda-forge/noarch/django-6.0-pyhd8ed1ab_0.conda
- sha256: 294cabe11055830f51d48210155dd1ed8ac8f93051642139d91c7109dd87d3eb
- md5: 01c889edf46f3476203eb8faa4e55c22
+- conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2
+ sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be
+ md5: 961b3a227b437d82ad7054484cfa71b2
+ depends:
+ - python >=3.6
+ license: PSF-2.0
+ license_family: PSF
+ purls:
+ - pkg:pypi/defusedxml?source=hash-mapping
+ size: 24062
+ timestamp: 1615232388757
+- conda: https://conda.anaconda.org/conda-forge/noarch/django-6.0.1-pyhd8ed1ab_0.conda
+ sha256: 11444d914bf5ad10a27a436876b7807533a659b51c98fcd5969e946cde987c41
+ md5: 571421da6611aa81c12629558bb85090
depends:
- asgiref >=3.9.1
- python >=3.12
@@ -1829,8 +2251,30 @@ packages:
license_family: BSD
purls:
- pkg:pypi/django?source=hash-mapping
- size: 3853807
- timestamp: 1764783863413
+ size: 3854180
+ timestamp: 1767812906103
+- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda
+ sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144
+ md5: 8e662bd460bda79b1ea39194e3c4c9ab
+ depends:
+ - python >=3.10
+ - typing_extensions >=4.6.0
+ license: MIT and PSF-2.0
+ purls:
+ - pkg:pypi/exceptiongroup?source=compressed-mapping
+ size: 21333
+ timestamp: 1763918099466
+- conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda
+ sha256: 210c8165a58fdbf16e626aac93cc4c14dbd551a01d1516be5ecad795d2422cad
+ md5: ff9efb7f7469aed3c4a8106ffa29593c
+ depends:
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/executing?source=hash-mapping
+ size: 30753
+ timestamp: 1756729456476
- conda: https://conda.anaconda.org/conda-forge/noarch/folium-0.20.0-pyhd8ed1ab_0.conda
sha256: 782fa186d7677fd3bc1ff7adb4cc3585f7d2c7177c30bcbce21f8c177135c520
md5: a6997a7dcd6673c0692c61dfeaea14ab
@@ -1847,38 +2291,52 @@ packages:
- pkg:pypi/folium?source=hash-mapping
size: 82665
timestamp: 1750113928159
-- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.61.0-pyh7db6752_0.conda
- sha256: dea661749b53d5ea7a28d3aa88bb2f60de884dd0ca27ba5e474246f5d4049c91
- md5: 2ae6c63938d6dd000e940673df75419c
+- conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.61.1-py312hacf3034_0.conda
+ sha256: f01c62330a693e05b6938ffbf3b930197c4e9ba73659c36bb8ee74c799ec840d
+ md5: 277eb1146255b637cac845cc6bc8fb6b
depends:
+ - __osx >=10.13
- brotli
- munkres
- - python >=3.10
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
- unicodedata2 >=15.1.0
- track_features:
- - fonttools_no_compile
license: MIT
license_family: MIT
purls:
- pkg:pypi/fonttools?source=hash-mapping
- size: 829871
- timestamp: 1764352874210
-- conda: https://conda.anaconda.org/conda-forge/osx-64/fonttools-4.61.0-py312hacf3034_0.conda
- sha256: 4c51486b2bf0603ece1f5f4a75fcca52b57ff9cc17acce1d336d671c0302a672
- md5: c0ef09bd6313da425e3b7700ce9858bc
+ size: 2879894
+ timestamp: 1765632981375
+- conda: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.61.1-py312h05f76fc_0.conda
+ sha256: 49df76416b253429ea7ff907e03215f2bb1450c03908b7e413a8bdd85154eded
+ md5: 449a1487319070f736382d2b53bb5aec
depends:
- - __osx >=10.13
- brotli
- munkres
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
- unicodedata2 >=15.1.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: MIT
license_family: MIT
purls:
- pkg:pypi/fonttools?source=hash-mapping
- size: 2879146
- timestamp: 1764353535292
+ size: 2507764
+ timestamp: 1765632999063
+- conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_1.conda
+ sha256: 2509992ec2fd38ab27c7cdb42cf6cadc566a1cc0d1021a2673475d9fa87c6276
+ md5: d3549fd50d450b6d9e7dddff25dd2110
+ depends:
+ - cached-property >=1.3.0
+ - python >=3.9,<4
+ license: MPL-2.0
+ license_family: MOZILLA
+ purls:
+ - pkg:pypi/fqdn?source=hash-mapping
+ size: 16705
+ timestamp: 1733327494780
- conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.14.1-h694c41f_0.conda
sha256: 9f8282510db291496e89618fc66a58a1124fe7a6276fbd57ed18c602ce2576e9
md5: ca641fdf8b7803f4b7212b6d66375930
@@ -1927,19 +2385,6 @@ packages:
purls: []
size: 77528
timestamp: 1734015193826
-- conda: https://conda.anaconda.org/conda-forge/noarch/frozenlist-1.7.0-pyhf298e5d_0.conda
- sha256: d065c6c76ba07c148b07102f89fd14e39e4f0b2c022ad671bbef8fda9431ba1b
- md5: 3998c9592e3db2f6809e4585280415f4
- depends:
- - python >=3.9
- track_features:
- - frozenlist_no_compile
- license: Apache-2.0
- license_family: APACHE
- purls:
- - pkg:pypi/frozenlist?source=hash-mapping
- size: 18952
- timestamp: 1752167260183
- conda: https://conda.anaconda.org/conda-forge/osx-64/frozenlist-1.7.0-py312h18bfd43_0.conda
sha256: 33a8bc7384594da4ce9148a597215dc28517d11fa41e1fac14326abab1e55206
md5: d1e9b9b950051516742a6719489e98c6
@@ -1954,10 +2399,25 @@ packages:
- pkg:pypi/frozenlist?source=hash-mapping
size: 51802
timestamp: 1752167396364
-- pypi: https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl
- name: ftfy
- version: 6.3.1
- sha256: 7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083
+- conda: https://conda.anaconda.org/conda-forge/win-64/frozenlist-1.7.0-py312hfdf67e6_0.conda
+ sha256: 804ebdfe1c49a31e275c8aaced937f96b794ad5ff228685349a13d450753d253
+ md5: 854caa541146c1c42d64c19fd63cbac9
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/frozenlist?source=hash-mapping
+ size: 49472
+ timestamp: 1752167442686
+- pypi: https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl
+ name: ftfy
+ version: 6.3.1
+ sha256: 7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083
requires_dist:
- wcwidth
requires_python: '>=3.9'
@@ -1972,13 +2432,13 @@ packages:
- pkg:pypi/future?source=hash-mapping
size: 364561
timestamp: 1738926525117
-- conda: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.12.0-py312h06e505a_2.conda
- sha256: 5ce56b70d109450c071f0a143fde5fdacfede3f27d81205abdf9390a0b4dbe5c
- md5: c4bf16bc699c42a5f5f6c1ff34b2c861
+- conda: https://conda.anaconda.org/conda-forge/osx-64/gdal-3.12.1-py312h1870424_0.conda
+ sha256: 70b455684c2e150352a7727b10cef3e7b08ff242d74794350ebe5d4b42529942
+ md5: ea4fde227e680bca2da2829cf7be7190
depends:
- __osx >=10.13
- libcxx >=19
- - libgdal-core 3.12.0.*
+ - libgdal-core 3.12.1.*
- numpy >=1.23,<3
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -1986,13 +2446,13 @@ packages:
license_family: MIT
purls:
- pkg:pypi/gdal?source=hash-mapping
- size: 1840046
- timestamp: 1764692243093
-- conda: https://conda.anaconda.org/conda-forge/win-64/gdal-3.12.0-py312h07de9ea_2.conda
- sha256: 79ca735f14dcff846a7fcac96c07fc3900d158010020014781cd0c44eb28f67e
- md5: 639bbbdcf7b2453be081ef2b93f5f586
+ size: 1842273
+ timestamp: 1766094029619
+- conda: https://conda.anaconda.org/conda-forge/win-64/gdal-3.12.1-py312h07de9ea_0.conda
+ sha256: 4cb42cf5ca0f118f8752e126a7c1d56cc4cc37a76bffd2316124be47421f2ed7
+ md5: cc1d78a2bb4208842a7b8ab053db8d60
depends:
- - libgdal-core 3.12.0.*
+ - libgdal-core 3.12.1.*
- numpy >=1.23,<3
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -2000,10 +2460,11 @@ packages:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: MIT
+ license_family: MIT
purls:
- pkg:pypi/gdal?source=hash-mapping
- size: 1742467
- timestamp: 1764691223925
+ size: 1748026
+ timestamp: 1766096923975
- conda: https://conda.anaconda.org/conda-forge/noarch/geocoder-1.38.1-pyhd8ed1ab_2.conda
sha256: 511a9b497e8223bd82f6d32dbe8ec927fd52ade733cb5dd7f3ff0da90a6f788f
md5: 3917f836b57dae32f167ae2c4c63158a
@@ -2034,12 +2495,12 @@ packages:
- pkg:pypi/geoip2?source=hash-mapping
size: 27835
timestamp: 1717516398787
-- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.1-pyhd8ed1ab_1.conda
- sha256: aa378cf3a8c557f71e0390961e7ee2ea5b213b5ab87fee2d03016e265271604e
- md5: 99baf7d3c98e77f22972757af7e774f8
+- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-1.1.2-pyhd8ed1ab_0.conda
+ sha256: 7c3e5dc62c0b3d067a6f517ea9176e9d52682499d4afb78704354a60f37c5444
+ md5: 3b9d40bef27d094e48bb1a821e86a252
depends:
- folium
- - geopandas-base 1.1.1 pyha770c72_1
+ - geopandas-base 1.1.2 pyha770c72_0
- mapclassify >=2.5.0
- matplotlib-base
- pyogrio >=0.7.2
@@ -2049,11 +2510,11 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 8381
- timestamp: 1759763365542
-- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.1-pyha770c72_1.conda
- sha256: 383f9003eb65158ef767e23a748b7bf5c7d91859bbd126accacbb02a33154f61
- md5: 23e25e079cd0108ec9cbae779ef4b685
+ size: 8454
+ timestamp: 1766475276498
+- conda: https://conda.anaconda.org/conda-forge/noarch/geopandas-base-1.1.2-pyha770c72_0.conda
+ sha256: e907715daf3b312a12d124744abe9644540f104832055b58edcf0c19eb4c45c0
+ md5: ca79e96c1fd39ab6d12c8f99968111b1
depends:
- numpy >=1.24
- packaging
@@ -2064,8 +2525,8 @@ packages:
license_family: BSD
purls:
- pkg:pypi/geopandas?source=hash-mapping
- size: 250856
- timestamp: 1759763364111
+ size: 254151
+ timestamp: 1766475275483
- conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda
sha256: 4d95fd55a9e649620b4e50ddafff064c4ec52d87e1ed64aa4cad13e643b32baf
md5: d83030a79ce1276edc2332c1730efa17
@@ -2118,9 +2579,9 @@ packages:
purls: []
size: 117017
timestamp: 1718284325443
-- conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.28.1-pyhd8ed1ab_0.conda
- sha256: 3dde5af0fdafae40315c278cd63ed531282f651868b1cb259d96234bc138dce0
- md5: 4f543962961d34db6b5c72ebe827caf7
+- conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.29.0-pyhd8ed1ab_0.conda
+ sha256: 0f696294c9a117a16e344388347dd9dff644cd8ddb703002169d81f889c176df
+ md5: 7fd8158ff94ccf28a2ac1f534989d698
depends:
- google-auth >=2.14.1,<3.0.0
- googleapis-common-protos >=1.56.2,<2.0.0
@@ -2132,74 +2593,76 @@ packages:
license_family: APACHE
purls:
- pkg:pypi/google-api-core?source=hash-mapping
- size: 98155
- timestamp: 1761990483177
-- conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-grpc-2.28.1-pyhd8ed1ab_0.conda
- sha256: ae2925cda30dc6400320b890f29dbbcbf8a69ad736dd5d6d833b65a72ec0466a
- md5: a08eaed0b8ca28f4bff91930afec1002
+ size: 98400
+ timestamp: 1768122057220
+- conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-grpc-2.29.0-pyhd8ed1ab_0.conda
+ sha256: d2216b7e2f0c8ad75dfcae96ac93623a51d8c7b5d3b7e8a7434eb5579a4d2f4e
+ md5: 5f65c34dc751a847a4872bf506346fa2
depends:
- - google-api-core 2.28.1 pyhd8ed1ab_0
+ - google-api-core 2.29.0 pyhd8ed1ab_0
- grpcio >=1.49.1,<2.0.0
- grpcio-status >=1.49.1,<2.0.0
- python >=3.10,<3.14
license: Apache-2.0
license_family: APACHE
purls: []
- size: 7075
- timestamp: 1761990490688
-- conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.43.0-pyhd8ed1ab_0.conda
- sha256: 35fa2eec3fb90ee1c6c2989579f586b4243ff2a0a0dabaeae12fe7c142d44fe7
- md5: 5b33d9974cab063dcf39e8671ddee1c1
+ size: 7236
+ timestamp: 1768122069921
+- conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.47.0-pyhcf101f3_0.conda
+ sha256: 04ebcd67144d9e554c32bf585b7a4bf70be41a30ba72b415132c3b203549c197
+ md5: fa0d1dbb4ae73ca3636fe64ed0632a42
depends:
- - aiohttp >=3.6.2,<4.0.0
- - cachetools >=2.0.0,<7.0
- - cryptography >=38.0.3
+ - python >=3.10
- pyasn1-modules >=0.2.1
+ - rsa >=3.1.4,<5
+ - aiohttp >=3.6.2,<4.0.0
+ - requests >=2.20.0,<3.0.0
- pyopenssl >=20.0.0
- - python >=3.10
+ - cryptography >=38.0.3
- pyu2f >=0.1.5
- - requests >=2.20.0,<3.0.0
- - rsa >=3.1.4,<5
+ - python
license: Apache-2.0
- license_family: Apache
+ license_family: APACHE
purls:
- - pkg:pypi/google-auth?source=hash-mapping
- size: 124222
- timestamp: 1762419588179
-- conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhd8ed1ab_0.conda
- sha256: a555b95ad2fed59a382da096bd23ece580ce240383f59917599f1c142acad8fc
- md5: 862b63f7548be0c97e9c6f4f85959189
+ - pkg:pypi/google-auth?source=compressed-mapping
+ size: 141076
+ timestamp: 1767775649306
+- conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda
+ sha256: fcef1d51f6de304a23c19ea6b3114dcab9ce54482d9f506f9a3e0b48be514744
+ md5: 48fcccc0b579087018df0afc332b8bd6
depends:
+ - python >=3.10,<3.14
- google-api-core >=1.31.6,<3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0
- google-auth >=1.25.0,<3.0.0
- grpcio >=1.38.0,<2.0.0
- grpcio-status >=1.38.0,<2.0.0
- - python >=3.10,<3.14
+ - python
license: Apache-2.0
- license_family: Apache
+ license_family: APACHE
purls:
- pkg:pypi/google-cloud-core?source=hash-mapping
- size: 28892
- timestamp: 1761989216405
-- conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-translate-3.23.0-pyhd8ed1ab_0.conda
- sha256: e82b639bae75e6b11c4ddd3701719f584139f4e176e9fe1e300aba75a51ed2a6
- md5: d110d4a975029db18b0a1077f586324d
+ size: 33593
+ timestamp: 1768561863777
+- conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-translate-3.24.0-pyhcf101f3_0.conda
+ sha256: b2a27e8c4b0cdd1e4c1d8ebab18c90bfe59f0ead8c475740eb0edd2980c932af
+ md5: 757896e23bfeb9f26e0f5ca29ae29185
depends:
+ - python >=3.10,<3.14
- google-api-core >=1.34.1,<3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*
- google-api-core-grpc
- google-auth >=2.14.1,<3.0.0,!=2.24.0,!=2.25.0
- google-cloud-core >=1.4.4,<3.0.0
- - grpc-google-iam-v1 >=0.14.0,<1.0.0
- grpcio >=1.33.2,<2.0.0
- proto-plus >=1.25.0,<2.0.0
- protobuf >=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5
- - python >=3.10,<3.14
+ - grpc-google-iam-v1 >=0.14.0,<1.0.0
+ - python
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/google-cloud-translate?source=hash-mapping
- size: 86452
- timestamp: 1762522211754
+ size: 97478
+ timestamp: 1768729024015
- conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.72.0-pyhd8ed1ab_0.conda
sha256: c09ba4b360a0994430d2fe4a230aa6518cd3e6bfdc51a7af9d35d35a25908bb5
md5: 003094932fb90de018f77a273b8a509b
@@ -2224,21 +2687,22 @@ packages:
purls: []
size: 15254
timestamp: 1762522301108
-- conda: https://conda.anaconda.org/conda-forge/noarch/grpc-google-iam-v1-0.14.3-pyhd8ed1ab_0.conda
- sha256: d87ec64567d0462f085ce70fdc093fda870f01b6b72e214dd12054dffda9c3c8
- md5: 5d88d3c05ee8b78f96c6f60687e1b5bb
+- conda: https://conda.anaconda.org/conda-forge/noarch/grpc-google-iam-v1-0.14.3-pyhcf101f3_1.conda
+ sha256: 5649ec4fb9c0240806b4a080899ec5ce42b90692f01b111c88ac81a586773711
+ md5: 2f307997162d8b75d4eb9d86c5c36fbe
depends:
+ - python >=3.10
+ - grpcio >=1.44.0,<2.0.0
- googleapis-common-protos >=1.56.0,<2.0.0
- googleapis-common-protos-grpc
- - grpcio >=1.44.0,<2.0.0
- protobuf >=3.20.2,<7.0.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5
- - python >=3.10
+ - python
license: Apache-2.0
license_family: APACHE
purls:
- - pkg:pypi/grpc-google-iam-v1?source=hash-mapping
- size: 26850
- timestamp: 1760569033919
+ - pkg:pypi/grpc-google-iam-v1?source=compressed-mapping
+ size: 31398
+ timestamp: 1768564357665
- conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.73.1-py312h53eab48_1.conda
sha256: a751ba0ed00f9306d852111e749ee23c7ae7309cc05716ad6f1bce2bf9db2912
md5: 94f0b7eefe8e878d70560f54a38b539c
@@ -2297,7 +2761,7 @@ packages:
license: MIT
license_family: MIT
purls:
- - pkg:pypi/h2?source=compressed-mapping
+ - pkg:pypi/h2?source=hash-mapping
size: 95967
timestamp: 1756364871835
- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda
@@ -2322,16 +2786,28 @@ packages:
- pkg:pypi/hyperframe?source=hash-mapping
size: 17397
timestamp: 1737618427549
-- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-75.1-h120a0e1_0.conda
- sha256: 2e64307532f482a0929412976c8450c719d558ba20c0962832132fd0d07ba7a7
- md5: d68d48a3060eb5abdc1cdc8e2a3a5966
+- conda: https://conda.anaconda.org/conda-forge/osx-64/icu-78.2-h14c5de8_0.conda
+ sha256: f3066beae7fe3002f09c8a412cdf1819f49a2c9a485f720ec11664330cf9f1fe
+ md5: 30334add4de016489b731c6662511684
depends:
- __osx >=10.13
license: MIT
license_family: MIT
purls: []
- size: 11761697
- timestamp: 1720853679409
+ size: 12263724
+ timestamp: 1767970604977
+- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda
+ sha256: 5a41fb28971342e293769fc968b3414253a2f8d9e30ed7c31517a15b4887246a
+ md5: 0ee3bb487600d5e71ab7d28951b2016a
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 13222158
+ timestamp: 1767970128854
- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda
sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0
md5: 53abe63df7e10a6ba605dc5f9f961d36
@@ -2395,6 +2871,143 @@ packages:
- pyparsing
- ioc-fanger
- click
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.1.0-pyh5552912_0.conda
+ sha256: b5f7eaba3bb109be49d00a0a8bda267ddf8fa66cc1b54fc5944529ed6f3e8503
+ md5: 1849eec35b60082d2bd66b4e36dec2b6
+ depends:
+ - appnope
+ - __osx
+ - comm >=0.1.1
+ - debugpy >=1.6.5
+ - ipython >=7.23.1
+ - jupyter_client >=8.0.0
+ - jupyter_core >=4.12,!=5.0.*
+ - matplotlib-inline >=0.1
+ - nest-asyncio >=1.4
+ - packaging >=22
+ - psutil >=5.7
+ - python >=3.10
+ - pyzmq >=25
+ - tornado >=6.2
+ - traitlets >=5.4.0
+ - python
+ constrains:
+ - appnope >=0.1.2
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipykernel?source=hash-mapping
+ size: 132289
+ timestamp: 1761567969884
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.1.0-pyh6dadd2b_0.conda
+ sha256: 75e42103bc3350422896f727041e24767795b214a20f50bf39c371626b8aae8b
+ md5: f22cb16c5ad68fd33d0f65c8739b6a06
+ depends:
+ - python
+ - __win
+ - comm >=0.1.1
+ - debugpy >=1.6.5
+ - ipython >=7.23.1
+ - jupyter_client >=8.0.0
+ - jupyter_core >=4.12,!=5.0.*
+ - matplotlib-inline >=0.1
+ - nest-asyncio >=1.4
+ - packaging >=22
+ - psutil >=5.7
+ - python >=3.10
+ - pyzmq >=25
+ - tornado >=6.2
+ - traitlets >=5.4.0
+ - python
+ constrains:
+ - appnope >=0.1.2
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipykernel?source=hash-mapping
+ size: 132418
+ timestamp: 1761567966860
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.9.0-pyh53cf698_0.conda
+ sha256: 4ff1733c59b72cf0c8ed9ddb6e948e99fc6b79b76989282c0c7a46aab56e6176
+ md5: 8481978caa2f108e6ddbf8008a345546
+ depends:
+ - __unix
+ - pexpect >4.3
+ - decorator >=4.3.2
+ - ipython_pygments_lexers >=1.0.0
+ - jedi >=0.18.1
+ - matplotlib-inline >=0.1.5
+ - prompt-toolkit >=3.0.41,<3.1.0
+ - pygments >=2.11.0
+ - python >=3.11
+ - stack_data >=0.6.0
+ - traitlets >=5.13.0
+ - typing_extensions >=4.6
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipython?source=compressed-mapping
+ size: 646242
+ timestamp: 1767621166614
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.9.0-pyhe2676ad_0.conda
+ sha256: 1697fae5859f61938ab44af38126115ad18fc059462bb370c5f8740d7bc4a803
+ md5: fe785355648dec69d2f06fa14c9e6e84
+ depends:
+ - __win
+ - colorama >=0.4.4
+ - decorator >=4.3.2
+ - ipython_pygments_lexers >=1.0.0
+ - jedi >=0.18.1
+ - matplotlib-inline >=0.1.5
+ - prompt-toolkit >=3.0.41,<3.1.0
+ - pygments >=2.11.0
+ - python >=3.11
+ - stack_data >=0.6.0
+ - traitlets >=5.13.0
+ - typing_extensions >=4.6
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipython?source=compressed-mapping
+ size: 645119
+ timestamp: 1767621201570
+- conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda
+ sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104
+ md5: bd80ba060603cc228d9d81c257093119
+ depends:
+ - pygments
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/ipython-pygments-lexers?source=hash-mapping
+ size: 13993
+ timestamp: 1737123723464
+- conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_1.conda
+ sha256: 08e838d29c134a7684bca0468401d26840f41c92267c4126d7b43a6b533b0aed
+ md5: 0b0154421989637d424ccf0f104be51a
+ depends:
+ - arrow >=0.15.0
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/isoduration?source=hash-mapping
+ size: 19832
+ timestamp: 1733493720346
+- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda
+ sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8
+ md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9
+ depends:
+ - parso >=0.8.3,<0.9.0
+ - python >=3.9
+ license: Apache-2.0 AND MIT
+ purls:
+ - pkg:pypi/jedi?source=hash-mapping
+ size: 843646
+ timestamp: 1733300981994
- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda
sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b
md5: 04558c96691bed63104678757beb4f8d
@@ -2408,9 +3021,9 @@ packages:
- pkg:pypi/jinja2?source=compressed-mapping
size: 120685
timestamp: 1764517220861
-- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.2-pyhd8ed1ab_0.conda
- sha256: 6fc414c5ae7289739c2ba75ff569b79f72e38991d61eb67426a8a4b92f90462c
- md5: 4e717929cfa0d49cef92d911e31d0e90
+- conda: https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.3-pyhd8ed1ab_0.conda
+ sha256: 301539229d7be6420c084490b8145583291123f0ce6b92f56be5948a2c83a379
+ md5: 615de2a4d97af50c350e5cf160149e77
depends:
- python >=3.10
- setuptools
@@ -2418,8 +3031,8 @@ packages:
license_family: BSD
purls:
- pkg:pypi/joblib?source=hash-mapping
- size: 224671
- timestamp: 1756321850584
+ size: 226448
+ timestamp: 1765794135253
- conda: https://conda.anaconda.org/conda-forge/osx-64/json-c-0.18-hc62ec3d_0.conda
sha256: b58f8002318d6b880a98e1b0aa943789b3b0f49334a3bdb9c19b463a0b799cad
md5: 2c5a3c42de607dda0cfa0edd541fd279
@@ -2430,6 +3043,196 @@ packages:
purls: []
size: 71514
timestamp: 1726487153769
+- conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda
+ sha256: 1a1328476d14dfa8b84dbacb7f7cd7051c175498406dc513ca6c679dc44f3981
+ md5: cd2214824e36b0180141d422aba01938
+ depends:
+ - python >=3.10
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jsonpointer?source=hash-mapping
+ size: 13967
+ timestamp: 1765026384757
+- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda
+ sha256: db973a37d75db8e19b5f44bbbdaead0c68dde745407f281e2a7fe4db74ec51d7
+ md5: ada41c863af263cc4c5fcbaff7c3e4dc
+ depends:
+ - attrs >=22.2.0
+ - jsonschema-specifications >=2023.3.6
+ - python >=3.10
+ - referencing >=0.28.4
+ - rpds-py >=0.25.0
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/jsonschema?source=compressed-mapping
+ size: 82356
+ timestamp: 1767839954256
+- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda
+ sha256: 0a4f3b132f0faca10c89fdf3b60e15abb62ded6fa80aebfc007d05965192aa04
+ md5: 439cd0f567d697b20a8f45cb70a1005a
+ depends:
+ - python >=3.10
+ - referencing >=0.31.0
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/jsonschema-specifications?source=hash-mapping
+ size: 19236
+ timestamp: 1757335715225
+- conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.26.0-hcf101f3_0.conda
+ sha256: 6886fc61e4e4edd38fd38729976b134e8bd2143f7fce56cc80d7ac7bac99bce1
+ md5: 8368d58342d0825f0843dc6acdd0c483
+ depends:
+ - jsonschema >=4.26.0,<4.26.1.0a0
+ - fqdn
+ - idna
+ - isoduration
+ - jsonpointer >1.13
+ - rfc3339-validator
+ - rfc3986-validator >0.1.0
+ - rfc3987-syntax >=1.1.0
+ - uri-template
+ - webcolors >=24.6.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 4740
+ timestamp: 1767839954258
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda
+ sha256: e402bd119720862a33229624ec23645916a7d47f30e1711a4af9e005162b84f3
+ md5: 8a3d6d0523f66cf004e563a50d9392b3
+ depends:
+ - jupyter_core >=5.1
+ - python >=3.10
+ - python-dateutil >=2.8.2
+ - pyzmq >=25.0
+ - tornado >=6.4.1
+ - traitlets >=5.3
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-client?source=compressed-mapping
+ size: 112785
+ timestamp: 1767954655912
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda
+ sha256: ed709a6c25b731e01563521ef338b93986cd14b5bc17f35e9382000864872ccc
+ md5: a8db462b01221e9f5135be466faeb3e0
+ depends:
+ - __win
+ - pywin32
+ - platformdirs >=2.5
+ - python >=3.10
+ - traitlets >=5.3
+ - python
+ constrains:
+ - pywin32 >=300
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-core?source=hash-mapping
+ size: 64679
+ timestamp: 1760643889625
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda
+ sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a
+ md5: b38fe4e78ee75def7e599843ef4c1ab0
+ depends:
+ - __unix
+ - python
+ - platformdirs >=2.5
+ - python >=3.10
+ - traitlets >=5.3
+ - python
+ constrains:
+ - pywin32 >=300
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-core?source=hash-mapping
+ size: 65503
+ timestamp: 1760643864586
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.12.0-pyh29332c3_0.conda
+ sha256: 37e6ac3ccf7afcc730c3b93cb91a13b9ae827fd306f35dd28f958a74a14878b5
+ md5: f56000b36f09ab7533877e695e4e8cb0
+ depends:
+ - jsonschema-with-format-nongpl >=4.18.0
+ - packaging
+ - python >=3.9
+ - python-json-logger >=2.0.4
+ - pyyaml >=5.3
+ - referencing
+ - rfc3339-validator
+ - rfc3986-validator >=0.1.1
+ - traitlets >=5.3
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-events?source=hash-mapping
+ size: 23647
+ timestamp: 1738765986736
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.17.0-pyhcf101f3_0.conda
+ sha256: 74c4e642be97c538dae1895f7052599dfd740d8bd251f727bce6453ce8d6cd9a
+ md5: d79a87dcfa726bcea8e61275feed6f83
+ depends:
+ - anyio >=3.1.0
+ - argon2-cffi >=21.1
+ - jinja2 >=3.0.3
+ - jupyter_client >=7.4.4
+ - jupyter_core >=4.12,!=5.0.*
+ - jupyter_events >=0.11.0
+ - jupyter_server_terminals >=0.4.4
+ - nbconvert-core >=6.4.4
+ - nbformat >=5.3.0
+ - overrides >=5.0
+ - packaging >=22.0
+ - prometheus_client >=0.9
+ - python >=3.10
+ - pyzmq >=24
+ - send2trash >=1.8.2
+ - terminado >=0.8.3
+ - tornado >=6.2.0
+ - traitlets >=5.6.0
+ - websocket-client >=1.7
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-server?source=hash-mapping
+ size: 347094
+ timestamp: 1755870522134
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda
+ sha256: 5eda79ed9f53f590031d29346abd183051263227dd9ee667b5ca1133ce297654
+ md5: 7b8bace4943e0dc345fc45938826f2b8
+ depends:
+ - python >=3.10
+ - terminado >=0.8.3
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyter-server-terminals?source=compressed-mapping
+ size: 22052
+ timestamp: 1768574057200
+- conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda
+ sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0
+ md5: fd312693df06da3578383232528c468d
+ depends:
+ - pygments >=2.4.1,<3
+ - python >=3.9
+ constrains:
+ - jupyterlab >=4.0.8,<5.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/jupyterlab-pygments?source=hash-mapping
+ size: 18711
+ timestamp: 1733328194037
- conda: https://conda.anaconda.org/conda-forge/osx-64/kiwisolver-1.4.9-py312h90e26e8_2.conda
sha256: 9e4e940969e6765bd2a13c76e131bcb02b8930a3c78adec0dbe83a8494b40a52
md5: b85c7204ae22668690eb1e95640202c4
@@ -2489,32 +3292,43 @@ packages:
purls: []
size: 712034
timestamp: 1719463874284
-- conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.17-h72f5680_0.conda
- sha256: bcb81543e49ff23e18dea79ef322ab44b8189fb11141b1af99d058503233a5fc
- md5: bf210d0c63f2afb9e414a858b79f0eaa
+- conda: https://conda.anaconda.org/conda-forge/noarch/lark-1.3.1-pyhd8ed1ab_0.conda
+ sha256: 49570840fb15f5df5d4b4464db8ee43a6d643031a2bc70ef52120a52e3809699
+ md5: 9b965c999135d43a3d0f7bd7d024e26a
+ depends:
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/lark?source=compressed-mapping
+ size: 94312
+ timestamp: 1761596921009
+- conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.18-h90db99b_0.conda
+ sha256: 3ec16c491425999a8461e1b7c98558060a4645a20cf4c9ac966103c724008cc2
+ md5: 753acc10c7277f953f168890e5397c80
depends:
- __osx >=10.13
- - libjpeg-turbo >=3.0.0,<4.0a0
- - libtiff >=4.7.0,<4.8.0a0
+ - libjpeg-turbo >=3.1.2,<4.0a0
+ - libtiff >=4.7.1,<4.8.0a0
license: MIT
license_family: MIT
purls: []
- size: 226001
- timestamp: 1739161050843
-- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.17-hbcf6048_0.conda
- sha256: 7712eab5f1a35ca3ea6db48ead49e0d6ac7f96f8560da8023e61b3dbe4f3b25d
- md5: 3538827f77b82a837fa681a4579e37a1
+ size: 226870
+ timestamp: 1768184917403
+- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.18-hf2c6c5f_0.conda
+ sha256: 7eeb18c5c86db146b62da66d9e8b0e753a52987f9134a494309588bbeceddf28
+ md5: b6c68d6b829b044cd17a41e0a8a23ca1
depends:
- - libjpeg-turbo >=3.0.0,<4.0a0
- - libtiff >=4.7.0,<4.8.0a0
+ - libjpeg-turbo >=3.1.2,<4.0a0
+ - libtiff >=4.7.1,<4.8.0a0
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: MIT
license_family: MIT
purls: []
- size: 510641
- timestamp: 1739161381270
+ size: 522238
+ timestamp: 1768184858107
- conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hcca01a6_1.conda
sha256: cc1f1d7c30aa29da4474ec84026ec1032a8df1d7ec93f4af3b98bb793d01184e
md5: 21f765ced1a0ef4070df53cb425e1967
@@ -2567,9 +3381,9 @@ packages:
purls: []
size: 1615210
timestamp: 1750194549591
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.8.2-gpl_h889603c_100.conda
- sha256: b3ebced2a683cf4c4f1529676f60a80d6dcea11bc50cee137aadfe09a75f551a
- md5: 7520a1a2a186da7ade597f8fdf72a168
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libarchive-3.8.5-gpl_h264331f_100.conda
+ sha256: 635b37726c865439b93f7887994eedde33f00ad4b715e286ba3634e39fbca690
+ md5: bfb9152520db0958801b3c87846c942b
depends:
- __osx >=10.13
- bzip2 >=1.0.8,<2.0a0
@@ -2585,11 +3399,11 @@ packages:
license: BSD-2-Clause
license_family: BSD
purls: []
- size: 760450
- timestamp: 1760611183190
-- conda: https://conda.anaconda.org/conda-forge/win-64/libarchive-3.8.2-gpl_h26aea39_100.conda
- sha256: 23b9bcba5e01fe756eb9aef875ba0237377401489b0238da871ba00ccaad6a95
- md5: ce09b133aaadd32f18a809260ac5c2c8
+ size: 759895
+ timestamp: 1767630938323
+- conda: https://conda.anaconda.org/conda-forge/win-64/libarchive-3.8.5-gpl_he24518a_100.conda
+ sha256: f56df319078c67a46548c16f77cff0a4c60ab763fd98ffa64313a47a43c285e4
+ md5: 8bb7102705dba973b3930c4b6094b257
depends:
- bzip2 >=1.0.8,<2.0a0
- liblzma >=5.8.1,<6.0a0
@@ -2606,51 +3420,48 @@ packages:
license: BSD-2-Clause
license_family: BSD
purls: []
- size: 1107182
- timestamp: 1760611163870
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-22.0.0-hd1700fa_4_cpu.conda
- build_number: 4
- sha256: 82d764b803ed198123c77ec954770deec0e477e003d3d906eb8eda5260f88e24
- md5: 9c95de09ac58d37d8cfbaa54b7174ee5
+ size: 1106553
+ timestamp: 1767630802450
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-23.0.0-h8071b21_0_cpu.conda
+ sha256: c2515297e108a07154a718b4767b7f239b5e827c5afa503b47bdb49617e9226d
+ md5: 65956d60494884c45e3f0952de391e08
depends:
- __osx >=11.0
- - aws-crt-cpp >=0.35.2,<0.35.3.0a0
+ - aws-crt-cpp >=0.35.4,<0.35.5.0a0
- aws-sdk-cpp >=1.11.606,<1.11.607.0a0
- azure-core-cpp >=1.16.1,<1.16.2.0a0
- azure-identity-cpp >=1.13.2,<1.13.3.0a0
- - azure-storage-blobs-cpp >=12.15.0,<12.15.1.0a0
- - azure-storage-files-datalake-cpp >=12.13.0,<12.13.1.0a0
+ - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0
+ - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0
- bzip2 >=1.0.8,<2.0a0
- glog >=0.7.1,<0.8.0a0
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- libbrotlidec >=1.2.0,<1.3.0a0
- libbrotlienc >=1.2.0,<1.3.0a0
- - libcxx >=19
+ - libcxx >=21
- libgoogle-cloud >=2.39.0,<2.40.0a0
- libgoogle-cloud-storage >=2.39.0,<2.40.0a0
- libopentelemetry-cpp >=1.21.0,<1.22.0a0
- libprotobuf >=6.31.1,<6.31.2.0a0
- libzlib >=1.3.1,<2.0a0
- lz4-c >=1.10.0,<1.11.0a0
- - orc >=2.2.1,<2.2.2.0a0
+ - orc >=2.2.2,<2.2.3.0a0
- snappy >=1.2.2,<1.3.0a0
- zstd >=1.5.7,<1.6.0a0
constrains:
- - apache-arrow-proc =*=cpu
- parquet-cpp <0.0a0
+ - apache-arrow-proc =*=cpu
- arrow-cpp <0.0a0
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 4266919
- timestamp: 1763229988804
-- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-22.0.0-h117da51_4_cpu.conda
- build_number: 4
- sha256: 85139df2ffdee12e5cd6b53da886ce6b3dca276935e8f5866d9806cce0d24363
- md5: f84b0ac3486f3949104ac3f343634877
+ size: 4362941
+ timestamp: 1769256370266
+- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-23.0.0-hcf7e2ff_0_cpu.conda
+ sha256: 60df1505c0e14fc1aa1832f57f6802854559f718531101dfb0835b45a6cd3cf2
+ md5: b6f129fd980b012c234b455219f31a6d
depends:
- - aws-crt-cpp >=0.35.2,<0.35.3.0a0
+ - aws-crt-cpp >=0.35.4,<0.35.5.0a0
- aws-sdk-cpp >=1.11.606,<1.11.607.0a0
- bzip2 >=1.0.8,<2.0a0
- libabseil * cxx17*
@@ -2658,204 +3469,188 @@ packages:
- libbrotlidec >=1.2.0,<1.3.0a0
- libbrotlienc >=1.2.0,<1.3.0a0
- libcrc32c >=1.1.2,<1.2.0a0
- - libcurl >=8.17.0,<9.0a0
+ - libcurl >=8.18.0,<9.0a0
- libgoogle-cloud >=2.39.0,<2.40.0a0
- libgoogle-cloud-storage >=2.39.0,<2.40.0a0
- libprotobuf >=6.31.1,<6.31.2.0a0
- libzlib >=1.3.1,<2.0a0
- lz4-c >=1.10.0,<1.11.0a0
- - orc >=2.2.1,<2.2.2.0a0
+ - orc >=2.2.2,<2.2.3.0a0
- snappy >=1.2.2,<1.3.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- zstd >=1.5.7,<1.6.0a0
constrains:
- - apache-arrow-proc =*=cpu
- - arrow-cpp <0.0a0
- parquet-cpp <0.0a0
+ - arrow-cpp <0.0a0
+ - apache-arrow-proc =*=cpu
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 3994427
- timestamp: 1763230398189
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-22.0.0-h2db2d7d_4_cpu.conda
- build_number: 4
- sha256: ebc47c938c7e3af8af35cb6ad92a2ff4fcaba3776bf3f0dc8690e3c168035b0b
- md5: f9e754e716ed279c88f25d17fc6b5764
+ size: 4149744
+ timestamp: 1769259187888
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-acero-23.0.0-h9737151_0_cpu.conda
+ sha256: 26e7b08c0e945a5a825b13069f4f3a8855ffc18d8f953a800bda6c9dcfdf11b8
+ md5: dcaf0d16d780e9d89f9d9bfd6fc21241
depends:
- __osx >=11.0
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- - libarrow 22.0.0 hd1700fa_4_cpu
- - libarrow-compute 22.0.0 h7751554_4_cpu
- - libcxx >=19
+ - libarrow 23.0.0 h8071b21_0_cpu
+ - libarrow-compute 23.0.0 hc26cc94_0_cpu
+ - libcxx >=21
- libopentelemetry-cpp >=1.21.0,<1.22.0a0
- libprotobuf >=6.31.1,<6.31.2.0a0
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 551790
- timestamp: 1763230587607
-- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-22.0.0-h7d8d6a5_4_cpu.conda
- build_number: 4
- sha256: adbb4bbdbac732c8c5d5dd99b972c149fd4ee3b3dbcb4b70654b4fbd751e43bb
- md5: c8ea0681d0dcf1e1a0722ea3c916bca1
+ size: 562566
+ timestamp: 1769256944293
+- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-acero-23.0.0-h7d8d6a5_0_cpu.conda
+ sha256: fe073960e60389dff5649ad108dd9aa767cf2a9acd05cabd51b099867d394cea
+ md5: 540182c554868cef4ead05206147705b
depends:
- - libarrow 22.0.0 h117da51_4_cpu
- - libarrow-compute 22.0.0 h2db994a_4_cpu
+ - libarrow 23.0.0 hcf7e2ff_0_cpu
+ - libarrow-compute 23.0.0 h2db994a_0_cpu
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 445496
- timestamp: 1763230780711
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-22.0.0-h7751554_4_cpu.conda
- build_number: 4
- sha256: 0a27101d20f8e47dea60fb489d8904472e92da913660605d61f318352ac79163
- md5: 673d1c37cbbf9a99235337cbb6969dff
+ size: 464816
+ timestamp: 1769259495722
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-compute-23.0.0-hc26cc94_0_cpu.conda
+ sha256: 51c8c7c3e5fc0532d33c2464b985548a683476b38976c9bdab9e46e77452919e
+ md5: 529e738c9f7641f742e458b5dd903a87
depends:
- __osx >=11.0
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- - libarrow 22.0.0 hd1700fa_4_cpu
- - libcxx >=19
+ - libarrow 23.0.0 h8071b21_0_cpu
+ - libcxx >=21
- libopentelemetry-cpp >=1.21.0,<1.22.0a0
- libprotobuf >=6.31.1,<6.31.2.0a0
- libre2-11 >=2025.8.12
- - libutf8proc >=2.11.0,<2.12.0a0
+ - libutf8proc >=2.11.3,<2.12.0a0
- re2
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 2394943
- timestamp: 1763230184019
-- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-compute-22.0.0-h2db994a_4_cpu.conda
- build_number: 4
- sha256: 63d6f8ccfaa61aaa3415d666e22ee12f3a2644068f4907656396cf0ea665d743
- md5: 8b416d4245113c42f37f024d75598efe
+ size: 2403204
+ timestamp: 1769256571727
+- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-compute-23.0.0-h2db994a_0_cpu.conda
+ sha256: 522d7f674a6768c1f57456ce9f241be6282a532d9affb16bb73d3cc23c1712da
+ md5: 3dc0dfb46631dc00a44c4ed869e54cfa
depends:
- - libarrow 22.0.0 h117da51_4_cpu
+ - libarrow 23.0.0 hcf7e2ff_0_cpu
- libre2-11 >=2025.8.12
- - libutf8proc >=2.11.0,<2.12.0a0
+ - libutf8proc >=2.11.3,<2.12.0a0
- re2
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 1680370
- timestamp: 1763230549106
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-22.0.0-h2db2d7d_4_cpu.conda
- build_number: 4
- sha256: 31c410ca02fb477d8c19792ebb6b5f50144e510ed50a41be268fba6cca6a3417
- md5: 64d5722c982b89dabf848feb7edf97f9
+ size: 1774422
+ timestamp: 1769259309856
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-dataset-23.0.0-h9737151_0_cpu.conda
+ sha256: 54e9f65b484ce5b3164fdce7002a98c48d49a786bcbd5a3069def50c2f6fd342
+ md5: 29bcbe4c43773e9c75b9ce72fd93ee34
depends:
- __osx >=11.0
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- - libarrow 22.0.0 hd1700fa_4_cpu
- - libarrow-acero 22.0.0 h2db2d7d_4_cpu
- - libarrow-compute 22.0.0 h7751554_4_cpu
- - libcxx >=19
+ - libarrow 23.0.0 h8071b21_0_cpu
+ - libarrow-acero 23.0.0 h9737151_0_cpu
+ - libarrow-compute 23.0.0 hc26cc94_0_cpu
+ - libcxx >=21
- libopentelemetry-cpp >=1.21.0,<1.22.0a0
- - libparquet 22.0.0 habb56ca_4_cpu
+ - libparquet 23.0.0 ha0d2768_0_cpu
- libprotobuf >=6.31.1,<6.31.2.0a0
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 533092
- timestamp: 1763230993273
-- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-22.0.0-h7d8d6a5_4_cpu.conda
- build_number: 4
- sha256: 1e58be0777222ed586d43835fc1140439646da9a73caa9abd6a613af4d3956e5
- md5: cfec90bf4005cdfa5a47170b15174c25
+ size: 552421
+ timestamp: 1769257199184
+- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-dataset-23.0.0-h7d8d6a5_0_cpu.conda
+ sha256: 026b8e67e8dcd9a8cd11e7ac6670c4d2896ab6dde4b1203b46b55fe96a1c253f
+ md5: 9636a9e56e2884a13af82b52f40e3335
depends:
- - libarrow 22.0.0 h117da51_4_cpu
- - libarrow-acero 22.0.0 h7d8d6a5_4_cpu
- - libarrow-compute 22.0.0 h2db994a_4_cpu
- - libparquet 22.0.0 h7051d1f_4_cpu
+ - libarrow 23.0.0 hcf7e2ff_0_cpu
+ - libarrow-acero 23.0.0 h7d8d6a5_0_cpu
+ - libarrow-compute 23.0.0 h2db994a_0_cpu
+ - libparquet 23.0.0 h7051d1f_0_cpu
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 430223
- timestamp: 1763230939077
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-22.0.0-h4653b8a_4_cpu.conda
- build_number: 4
- sha256: ecc37e1e0faa308f7bed2e346a1b3aa2bae7155f6df2312f11ad25fe30731bd4
- md5: c2f7a8fec7db2ce12d5aaabeed2cedea
+ size: 446822
+ timestamp: 1769259620882
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-substrait-23.0.0-h7f2e36e_0_cpu.conda
+ sha256: ce2185282b8fa0b507d278afb5cfd97964faa917784123e9cb20aa3aedb9f396
+ md5: 863dc1e33bafc3288f32098ab5ea9efc
depends:
- __osx >=11.0
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- - libarrow 22.0.0 hd1700fa_4_cpu
- - libarrow-acero 22.0.0 h2db2d7d_4_cpu
- - libarrow-dataset 22.0.0 h2db2d7d_4_cpu
- - libcxx >=19
+ - libarrow 23.0.0 h8071b21_0_cpu
+ - libarrow-acero 23.0.0 h9737151_0_cpu
+ - libarrow-dataset 23.0.0 h9737151_0_cpu
+ - libcxx >=21
- libprotobuf >=6.31.1,<6.31.2.0a0
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 447573
- timestamp: 1763231087749
-- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-22.0.0-hf865cc0_4_cpu.conda
- build_number: 4
- sha256: 0189bf49c4282bf52760b55d80a1968d7e798bc80f30bc497807d0bb68962944
- md5: 6c44b4c5d10c20d08059350e4be2a2c3
+ size: 465745
+ timestamp: 1769257286608
+- conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-substrait-23.0.0-hf865cc0_0_cpu.conda
+ sha256: eaf10b91f78d048db073367289706dceea442cd392182da4ebd18e1ab1f88952
+ md5: a0822fb8692ae257f0cbba0003aa4e62
depends:
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- - libarrow 22.0.0 h117da51_4_cpu
- - libarrow-acero 22.0.0 h7d8d6a5_4_cpu
- - libarrow-dataset 22.0.0 h7d8d6a5_4_cpu
+ - libarrow 23.0.0 hcf7e2ff_0_cpu
+ - libarrow-acero 23.0.0 h7d8d6a5_0_cpu
+ - libarrow-dataset 23.0.0 h7d8d6a5_0_cpu
- libprotobuf >=6.31.1,<6.31.2.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 358564
- timestamp: 1763230991635
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-4_he492b99_openblas.conda
- build_number: 4
- sha256: 293e5290eee6d9be5a817ba4e1830ba18b04be9d619c2bdffeacf8ba3b0bef8d
- md5: fa78d175db3b07d8eb963558e1bd9228
+ size: 375788
+ timestamp: 1769259661708
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.11.0-5_he492b99_openblas.conda
+ build_number: 5
+ sha256: 4754de83feafa6c0b41385f8dab1b13f13476232e16f524564a340871a9fc3bc
+ md5: 36d2e68a156692cbae776b75d6ca6eae
depends:
- libopenblas >=0.3.30,<0.3.31.0a0
- libopenblas >=0.3.30,<1.0a0
constrains:
+ - liblapack 3.11.0 5*_openblas
+ - blas 2.305 openblas
+ - libcblas 3.11.0 5*_openblas
- mkl <2026
- - liblapack 3.11.0 4*_openblas
- - libcblas 3.11.0 4*_openblas
- - liblapacke 3.11.0 4*_openblas
- - blas 2.304 openblas
+ - liblapacke 3.11.0 5*_openblas
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 18702
- timestamp: 1764824607451
-- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-3_hf2e6a31_mkl.conda
- build_number: 3
- sha256: 0abcb8902f44274cf67bc2525be140f70e7ca2818b8fafc9bacd53b3cc936f79
- md5: 5cd17bc2e8b4a641816e1a674075a7f7
+ size: 18476
+ timestamp: 1765819054657
+- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda
+ build_number: 5
+ sha256: f0cb7b2697461a306341f7ff32d5b361bb84f3e94478464c1e27ee01fc8f276b
+ md5: f9decf88743af85c9c9e05556a4c47c0
depends:
- mkl >=2025.3.0,<2026.0a0
constrains:
- - blas 2.303 mkl
- - liblapack 3.11.0 3*_mkl
- - liblapacke 3.11.0 3*_mkl
- - libcblas 3.11.0 3*_mkl
+ - liblapack 3.11.0 5*_mkl
+ - libcblas 3.11.0 5*_mkl
+ - blas 2.305 mkl
+ - liblapacke 3.11.0 5*_mkl
license: BSD-3-Clause
+ license_family: BSD
purls: []
- size: 67656
- timestamp: 1764721105300
+ size: 67438
+ timestamp: 1765819100043
- conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.2.0-h8616949_1.conda
sha256: 4c19b211b3095f541426d5a9abac63e96a5045e509b3d11d4f9482de53efe43b
md5: f157c098841474579569c85a60ece586
@@ -2926,35 +3721,36 @@ packages:
purls: []
size: 252903
timestamp: 1764017901735
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-4_h9b27e0a_openblas.conda
- build_number: 4
- sha256: 2412cc96eda9455cdddc6221b023df738f4daef269007379d06cfe79cfd065be
- md5: 4ebb29d020eb3c2c8ac9674d8cfa4a31
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.11.0-5_h9b27e0a_openblas.conda
+ build_number: 5
+ sha256: 8077c29ea720bd152be6e6859a3765228cde51301fe62a3b3f505b377c2cb48c
+ md5: b31d771cbccff686e01a687708a7ca41
depends:
- - libblas 3.11.0 4_he492b99_openblas
+ - libblas 3.11.0 5_he492b99_openblas
constrains:
- - liblapacke 3.11.0 4*_openblas
- - liblapack 3.11.0 4*_openblas
- - blas 2.304 openblas
+ - liblapack 3.11.0 5*_openblas
+ - blas 2.305 openblas
+ - liblapacke 3.11.0 5*_openblas
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 18690
- timestamp: 1764824633990
-- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-3_h2a3cdd5_mkl.conda
- build_number: 3
- sha256: 202762643b4fbadeace2f24036e4cc0f3fd63f494a4746db99a22041e6048ab1
- md5: b7ac6152e3268dca486e4ef415b82269
+ size: 18484
+ timestamp: 1765819073006
+- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda
+ build_number: 5
+ sha256: 49dc59d8e58360920314b8d276dd80da7866a1484a9abae4ee2760bc68f3e68d
+ md5: b3fa8e8b55310ba8ef0060103afb02b5
depends:
- - libblas 3.11.0 3_hf2e6a31_mkl
+ - libblas 3.11.0 5_hf2e6a31_mkl
constrains:
- - blas 2.303 mkl
- - liblapack 3.11.0 3*_mkl
- - liblapacke 3.11.0 3*_mkl
+ - liblapack 3.11.0 5*_mkl
+ - liblapacke 3.11.0 5*_mkl
+ - blas 2.305 mkl
license: BSD-3-Clause
+ license_family: BSD
purls: []
- size: 68257
- timestamp: 1764721142545
+ size: 68079
+ timestamp: 1765819124349
- conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2
sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff
md5: 23d6d5a69918a438355d7cbc4c3d54c9
@@ -2976,9 +3772,9 @@ packages:
purls: []
size: 25694
timestamp: 1633684287072
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.17.0-h7dd4100_1.conda
- sha256: 80c7c8ff76eb699ec8d096dce80642b527fd8fc9dd72779bccec8d140c5b997a
- md5: 9ddfaeed0eafce233ae8f4a430816aa5
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9348e2b_0.conda
+ sha256: 1a0af3b7929af3c5893ebf50161978f54ae0256abb9532d4efba2735a0688325
+ md5: de1910529f64ba4a9ac9005e0be78601
depends:
- __osx >=10.13
- krb5 >=1.21.3,<1.22.0a0
@@ -2990,11 +3786,11 @@ packages:
license: curl
license_family: MIT
purls: []
- size: 413119
- timestamp: 1765379670120
-- conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.17.0-h43ecb02_0.conda
- sha256: 651daa5d2bad505b5c72b1d5d4d8c7fc0776ab420e67af997ca9391b6854b1b3
- md5: cfade9be135edb796837e7d4c288c0fb
+ size: 419089
+ timestamp: 1767822218800
+- conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h43ecb02_0.conda
+ sha256: 86258e30845571ea13855e8a0605275905781476f3edf8ae5df90a06fcada93a
+ md5: 2688214a9bee5d5650cd4f5f6af5c8f2
depends:
- krb5 >=1.21.3,<1.22.0a0
- libssh2 >=1.11.1,<2.0a0
@@ -3005,18 +3801,18 @@ packages:
license: curl
license_family: MIT
purls: []
- size: 378897
- timestamp: 1762333969177
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.7-h3d58e20_0.conda
- sha256: 0ac1b1d1072a14fe8fd3a871c8ca0b411f0fdf30de70e5c95365a149bd923ac8
- md5: 67c086bf0efc67b54a235dd9184bd7a2
+ size: 383261
+ timestamp: 1767821977053
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h3d58e20_0.conda
+ sha256: cbd8e821e97436d8fc126c24b50df838b05ba4c80494fbb93ccaf2e3b2d109fb
+ md5: 9f8a60a77ecafb7966ca961c94f33bd1
depends:
- __osx >=10.13
license: Apache-2.0 WITH LLVM-exception
license_family: Apache
purls: []
- size: 571564
- timestamp: 1764676139160
+ size: 569777
+ timestamp: 1765919624323
- conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda
sha256: 025f8b1e85dd8254e0ca65f011919fb1753070eb507f03bca317871a884d24de
md5: 31aa65919a729dc48180893f62c25221
@@ -3189,23 +3985,24 @@ packages:
purls: []
size: 422960
timestamp: 1764839601296
-- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_15.conda
- sha256: 4488ea36bdef6e6ad088aff604316cfd779723a514b6f7b7fc9d55dbdd255b63
- md5: e05ab7ace69b10ae32f8a710a5971f4f
+- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda
+ sha256: 24984e1e768440ba73021f08a1da0c1ec957b30d7071b9a89b877a273d17cae8
+ md5: 1edb8bd8e093ebd31558008e9cb23b47
depends:
- _openmp_mutex >=4.5
- libwinpthread >=12.0.0.r4.gg4f2fc60ca
constrains:
- - libgcc-ng ==15.2.0=*_15
+ - libgomp 15.2.0 h8ee18e1_16
+ - libgcc-ng ==15.2.0=*_16
- msys2-conda-epoch <0.0a0
- - libgomp 15.2.0 h8ee18e1_15
license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
purls: []
- size: 819575
- timestamp: 1764840888141
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-core-3.12.0-hfd904f9_2.conda
- sha256: eac1f9b85fa5d9085297ed03cca246168086eee90bfec95516280e8d45362d16
- md5: 2394c1d85bb5c80355fda7ff366c5fc4
+ size: 819696
+ timestamp: 1765260437409
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-core-3.12.1-hc010f1d_0.conda
+ sha256: c290f76783e7fb7480bc43eb1c8b5c2388d3bb7b554ca2324e3514114f937591
+ md5: 5fedeef42dca8c3bba696092097d3d73
depends:
- __osx >=10.13
- blosc >=1.21.6,<2.0a0
@@ -3223,7 +4020,7 @@ packages:
- libjxl >=0.11,<0.12.0a0
- libkml >=1.3.0,<1.4.0a0
- liblzma >=5.8.1,<6.0a0
- - libpng >=1.6.51,<1.7.0a0
+ - libpng >=1.6.53,<1.7.0a0
- libspatialite >=5.1.0,<5.2.0a0
- libsqlite >=3.51.1,<4.0a0
- libwebp-base >=1.6.0,<2.0a0
@@ -3238,15 +4035,15 @@ packages:
- xerces-c >=3.3.0,<3.4.0a0
- zstd >=1.5.7,<1.6.0a0
constrains:
- - libgdal 3.12.0.*
+ - libgdal 3.12.1.*
license: MIT
license_family: MIT
purls: []
- size: 10709925
- timestamp: 1764691561079
-- conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-core-3.12.0-hd4e8292_2.conda
- sha256: 9ef93caf69a64c0ebbd18b4f76c803707a47fe2a0fc36efde14183e01de77f8c
- md5: 851d7058b2e8040831ad90071683010e
+ size: 10730106
+ timestamp: 1766093828044
+- conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-core-3.12.1-h4c6072a_0.conda
+ sha256: 6e016ae30f9e74038dac1bc6541d38ae806f21a9da9307675591d648bb837ac4
+ md5: cfc8f1a9b92c8ddb31a3e9d0582de2e2
depends:
- blosc >=1.21.6,<2.0a0
- geos >=3.14.1,<3.14.2.0a0
@@ -3260,7 +4057,7 @@ packages:
- libjxl >=0.11,<0.12.0a0
- libkml >=1.3.0,<1.4.0a0
- liblzma >=5.8.1,<6.0a0
- - libpng >=1.6.51,<1.7.0a0
+ - libpng >=1.6.53,<1.7.0a0
- libspatialite >=5.1.0,<5.2.0a0
- libsqlite >=3.51.1,<4.0a0
- libwebp-base >=1.6.0,<2.0a0
@@ -3278,11 +4075,12 @@ packages:
- xerces-c >=3.3.0,<3.4.0a0
- zstd >=1.5.7,<1.6.0a0
constrains:
- - libgdal 3.12.0.*
+ - libgdal 3.12.1.*
license: MIT
+ license_family: MIT
purls: []
- size: 9786792
- timestamp: 1764690203971
+ size: 9775599
+ timestamp: 1766095956934
- conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_15.conda
sha256: 7bb4d51348e8f7c1a565df95f4fc2a2021229d42300aab8366eda0ea1af90587
md5: a089323fefeeaba2ae60e1ccebf86ddc
@@ -3307,17 +4105,18 @@ packages:
purls: []
size: 1061950
timestamp: 1764839609607
-- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_15.conda
- sha256: 54689a6061ef03e381591069bd6bd4ce1d1e3a0a91807252aa31adf24a81ed8c
- md5: 18713a6d90ce576053ac3ce9f792fe14
+- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_16.conda
+ sha256: 9c86aadc1bd9740f2aca291da8052152c32dd1c617d5d4fd0f334214960649bb
+ md5: ab8189163748f95d4cb18ea1952943c3
depends:
- libwinpthread >=12.0.0.r4.gg4f2fc60ca
constrains:
- msys2-conda-epoch <0.0a0
license: GPL-3.0-only WITH GCC-exception-3.1
+ license_family: GPL
purls: []
- size: 663321
- timestamp: 1764840809009
+ size: 663567
+ timestamp: 1765260367147
- conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda
sha256: 9b50362bafd60c4a3eb6c37e6dbf7e200562dab7ae1b282b1ebd633d4d77d4bd
md5: 06564befaabd2760dfa742e47074bad2
@@ -3433,9 +4232,9 @@ packages:
purls: []
size: 14433486
timestamp: 1761053760632
-- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.1-default_h64bd3f2_1002.conda
- sha256: 266dfe151066c34695dbdc824ba1246b99f016115ef79339cbcf005ac50527c1
- md5: b0cac6e5b06ca5eeb14b4f7cf908619f
+- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda
+ sha256: 8cdf11333a81085468d9aa536ebb155abd74adc293576f6013fc0c85a7a90da3
+ md5: 3b576f6860f838f950c570f4433b086e
depends:
- libwinpthread >=12.0.0.r4.gg4f2fc60ca
- libxml2
@@ -3446,8 +4245,8 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 2414731
- timestamp: 1757624335056
+ size: 2411241
+ timestamp: 1765104337762
- conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.3.0-hab838a1_1.conda
sha256: 2f49632a3fd9ec5e38a45738f495f8c665298b0b35e6c89cef8e0fbc39b3f791
md5: bb8ff4fec8150927a54139af07ef8069
@@ -3513,35 +4312,35 @@ packages:
purls: []
size: 841783
timestamp: 1762094814336
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.1-h4ee1b5b_5.conda
- sha256: f203822559bdefe8ef0d93967a997001bc2d0d8b73e790fe1f39eec72962b0ec
- md5: b5e1f8b97695f5303c8ad0f8d72c7534
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.11.1-hde0fb83_8.conda
+ sha256: fa5ee8b83d7d87e7bd3bfd4623c5e50a7135ccbcbbebf247b992df284c85d679
+ md5: 5e478d37b1027d73872f7c8d579dc314
depends:
- __osx >=10.13
- - libbrotlidec >=1.2.0,<1.3.0a0
- - libbrotlienc >=1.2.0,<1.3.0a0
- libcxx >=19
+ - libbrotlienc >=1.2.0,<1.3.0a0
+ - libbrotlidec >=1.2.0,<1.3.0a0
- libhwy >=1.3.0,<1.4.0a0
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 1547591
- timestamp: 1761788908653
-- conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.1-hac9b6f3_5.conda
- sha256: 54e35ad6152fb705f26491c6651d4b77757315c446a494ffc477f36fb2203c79
- md5: 8e3cc52433c99ad9632f430d3ac2a077
+ size: 1761909
+ timestamp: 1768822114809
+- conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.1-hf3f85d1_8.conda
+ sha256: 53cdc0e894cf1f622fcd08a447da473cfe7f9edeffa0882b41eadb3b0a67b1d3
+ md5: 60ca4943052b9634a92d841e1860b8d6
depends:
- - libbrotlidec >=1.2.0,<1.3.0a0
- - libbrotlienc >=1.2.0,<1.3.0a0
- - libhwy >=1.3.0,<1.4.0a0
- - ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - libhwy >=1.3.0,<1.4.0a0
+ - libbrotlienc >=1.2.0,<1.3.0a0
+ - libbrotlidec >=1.2.0,<1.3.0a0
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 1092699
- timestamp: 1761788697831
+ size: 1317273
+ timestamp: 1768821992120
- conda: https://conda.anaconda.org/conda-forge/osx-64/libkml-1.3.0-h450b6c2_1022.conda
sha256: 9d0fa449acb13bd0e7a7cb280aac3578f5956ace0602fa3cf997969432c18786
md5: ec47f97e9a3cdfb729e1b1173d80ed0f
@@ -3571,59 +4370,60 @@ packages:
purls: []
size: 1659205
timestamp: 1761132867821
-- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-4_h859234e_openblas.conda
- build_number: 4
- sha256: cd490682199bd61c8db56cb72e71c154d91e8bf652cb28327690fa38246085d5
- md5: ebce74f166fc65413f751b8a125d4be3
+- conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.11.0-5_h859234e_openblas.conda
+ build_number: 5
+ sha256: 2c915fe2b3d806d4b82776c882ba66ba3e095e9e2c41cc5c3375bffec6bddfdc
+ md5: eb5b1c25d4ac30813a6ca950a58710d6
depends:
- - libblas 3.11.0 4_he492b99_openblas
+ - libblas 3.11.0 5_he492b99_openblas
constrains:
- - liblapacke 3.11.0 4*_openblas
- - libcblas 3.11.0 4*_openblas
- - blas 2.304 openblas
+ - libcblas 3.11.0 5*_openblas
+ - blas 2.305 openblas
+ - liblapacke 3.11.0 5*_openblas
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 18692
- timestamp: 1764824659093
-- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-3_hf9ab0e9_mkl.conda
- build_number: 3
- sha256: 3e62c95ace9787c10beb6bae2f6399fb334e7fa9c08f0704c2c7dafe85415ccb
- md5: cb13ddc09ffa85ac572e453046a4ccaf
+ size: 18491
+ timestamp: 1765819090240
+- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda
+ build_number: 5
+ sha256: a2d33f5cc2b8a9042f2af6981c6733ab1a661463823eaa56595a9c58c0ab77e1
+ md5: e62c42a4196dee97d20400612afcb2b1
depends:
- - libblas 3.11.0 3_hf2e6a31_mkl
+ - libblas 3.11.0 5_hf2e6a31_mkl
constrains:
- - blas 2.303 mkl
- - liblapacke 3.11.0 3*_mkl
- - libcblas 3.11.0 3*_mkl
+ - libcblas 3.11.0 5*_mkl
+ - blas 2.305 mkl
+ - liblapacke 3.11.0 5*_mkl
license: BSD-3-Clause
+ license_family: BSD
purls: []
- size: 80104
- timestamp: 1764721178120
-- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.1-hd471939_2.conda
- sha256: 7e22fd1bdb8bf4c2be93de2d4e718db5c548aa082af47a7430eb23192de6bb36
- md5: 8468beea04b9065b9807fc8b9cdc5894
+ size: 80225
+ timestamp: 1765819148014
+- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda
+ sha256: 7ab3c98abd3b5d5ec72faa8d9f5d4b50dcee4970ed05339bc381861199dabb41
+ md5: 688a0c3d57fa118b9c97bf7e471ab46c
depends:
- __osx >=10.13
constrains:
- - xz 5.8.1.*
+ - xz 5.8.2.*
license: 0BSD
purls: []
- size: 104826
- timestamp: 1749230155443
-- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda
- sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc
- md5: c15148b2e18da456f5108ccb5e411446
+ size: 105482
+ timestamp: 1768753411348
+- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda
+ sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c
+ md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3
depends:
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
constrains:
- - xz 5.8.1.*
+ - xz 5.8.2.*
license: 0BSD
purls: []
- size: 104935
- timestamp: 1749230611612
+ size: 106169
+ timestamp: 1768752763559
- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda
sha256: c48d7e1cc927aef83ff9c48ae34dd1d7495c6ccc1edc4a3a6ba6aff1624be9ac
md5: e7630cef881b1174d40f3e69a883e55f
@@ -3683,69 +4483,62 @@ packages:
purls: []
size: 362175
timestamp: 1751782820895
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-22.0.0-habb56ca_4_cpu.conda
- build_number: 4
- sha256: f195841bde46a049fe449cf59b8e42db7f83e2459ffd1de4dad2bd192db86b84
- md5: 67ff6ca0e1fdec92bdc20fa593390ba1
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libparquet-23.0.0-ha0d2768_0_cpu.conda
+ sha256: 6d725561a295e51125f76a0bf62caba33359e599f543d9cd91b800afc8e922bf
+ md5: 291f3afc764f78ea4a83516585a1e7c3
depends:
- __osx >=11.0
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
- - libarrow 22.0.0 hd1700fa_4_cpu
- - libcxx >=19
+ - libarrow 23.0.0 h8071b21_0_cpu
+ - libcxx >=21
- libopentelemetry-cpp >=1.21.0,<1.22.0a0
- libprotobuf >=6.31.1,<6.31.2.0a0
- libthrift >=0.22.0,<0.22.1.0a0
- openssl >=3.5.4,<4.0a0
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 1073343
- timestamp: 1763230480681
-- conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-22.0.0-h7051d1f_4_cpu.conda
- build_number: 4
- sha256: ea75648db5492d9fc3906bec3ae281fe9d7656ea7e0beffc8835acf043c8d847
- md5: 6fab9241407392bbbab0a2c6dc80e688
+ size: 1095286
+ timestamp: 1769256845564
+- conda: https://conda.anaconda.org/conda-forge/win-64/libparquet-23.0.0-h7051d1f_0_cpu.conda
+ sha256: 7b29537fdd29351a36f8817fb1959b3f13259a4b68b2c448b8793f620cc25571
+ md5: fa8b0d1f7d292d01a78dcc370d903ba3
depends:
- - libarrow 22.0.0 h117da51_4_cpu
+ - libarrow 23.0.0 hcf7e2ff_0_cpu
- libthrift >=0.22.0,<0.22.1.0a0
- openssl >=3.5.4,<4.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 920722
- timestamp: 1763230729257
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.53-h380d223_0.conda
- sha256: 62a861e407bf0d0a2a983d0b0167ed263ae035cae7061976e9994f9963e6c68d
- md5: 0cdbbd56f660997cfe5d33e516afac2f
+ size: 948280
+ timestamp: 1769259453124
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.54-h07817ec_0.conda
+ sha256: c0efdf9b34132e7d4e0051bf65a97f1b9e1125c7f8a9067a35ec119af367eb38
+ md5: 3d43dcdfcc3971939c80f855cf2df235
depends:
- __osx >=10.13
- libzlib >=1.3.1,<2.0a0
license: zlib-acknowledgement
purls: []
- size: 298397
- timestamp: 1764981064303
-- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.51-h7351971_0.conda
- sha256: 4a558e1901cc67b1c336cf719dfa1b806c5e69492df9fe6c19991da57a6845d2
- md5: 5b98079b7e86c25c7e70ed7fd7da7da5
+ size: 298894
+ timestamp: 1768285676981
+- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.54-h7351971_0.conda
+ sha256: 6e269361aa18a57bd2e593e480d83d93fc5f839d33d3bfc31b4ffe10edf6751c
+ md5: 638ecb69e44b6a588afd5633e81f9e61
depends:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- libzlib >=1.3.1,<2.0a0
license: zlib-acknowledgement
purls: []
- size: 383255
- timestamp: 1763764166376
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.31.1-h03562ea_2.conda
- sha256: 40a32a77cdb7f7b49187a4c9faf5c7812d95233288ab96b06e0dd9978ecd8e6d
- md5: 39b7711c03a0d0533e832e734641e56e
+ size: 383094
+ timestamp: 1768285706434
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-6.31.1-hcc66ac3_4.conda
+ sha256: 2058eb9748a6e29a1821fea8aeea48e87d73c83be47b0504ac03914fee944d0e
+ md5: f22705f9ebb3f79832d635c4c2919b15
depends:
- __osx >=11.0
- libabseil * cxx17*
@@ -3755,11 +4548,11 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 3550823
- timestamp: 1760550860606
-- conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_2.conda
- sha256: bb28909aef3777c5e950b769b30fe4bf02e0a7fb5322e583042a5cdc76bb15d0
- md5: 0e44c704760bbe4b696d981c3313f665
+ size: 3079808
+ timestamp: 1766315644973
+- conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-6.31.1-hdcda5b4_4.conda
+ sha256: a0f78f254f5833c8ec3ac38caf5dd7d826b5d7496df5aebc4b11baabd741e041
+ md5: 2031f591ca8c1289838a4f85ea1c7e74
depends:
- libabseil * cxx17*
- libabseil >=20250512.1,<20250513.0a0
@@ -3770,8 +4563,8 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 7787239
- timestamp: 1760550955606
+ size: 7488966
+ timestamp: 1766316540495
- conda: https://conda.anaconda.org/conda-forge/osx-64/libre2-11-2025.11.05-h554ac88_0.conda
sha256: 901fb4cfdabf1495e7f080f8e8e218d1ad182c9bcd3cea2862481fef0e9d534f
md5: a0237623ed85308cb816c3dcced23db2
@@ -3828,6 +4621,26 @@ packages:
purls: []
size: 403088
timestamp: 1761671197546
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda
+ sha256: d3975cfe60e81072666da8c76b993af018cf2e73fe55acba2b5ba0928efaccf5
+ md5: 6af4b059e26492da6013e79cbcb4d069
+ depends:
+ - __osx >=10.13
+ license: ISC
+ purls: []
+ size: 210249
+ timestamp: 1716828641383
+- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda
+ sha256: 7bcb3edccea30f711b6be9601e083ecf4f435b9407d70fc48fbcf9e5d69a0fc6
+ md5: 198bb594f202b205c7d18b936fa4524f
+ depends:
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ license: ISC
+ purls: []
+ size: 202344
+ timestamp: 1716828757533
- conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-gpl_hb921464_119.conda
sha256: 4f4a08255e92e4c320252a7693cc27ba27e731a48f8fd5e41a76c1a671bb82e3
md5: 14067124e9dd23b72cd78d68d78fac03
@@ -3876,28 +4689,27 @@ packages:
purls: []
size: 8671657
timestamp: 1761681604524
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.1-h6cc646a_0.conda
- sha256: 8460901daff15749354f0de143e766febf0682fe9201bf307ea84837707644d1
- md5: f71213ed0c51030cb17a77fc60a757f1
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda
+ sha256: 710a7ea27744199023c92e66ad005de7f8db9cf83f10d5a943d786f0dac53b7c
+ md5: d910105ce2b14dfb2b32e92ec7653420
depends:
- __osx >=10.13
- - icu >=75.1,<76.0a0
- libzlib >=1.3.1,<2.0a0
license: blessing
purls: []
- size: 991350
- timestamp: 1764359781222
-- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_0.conda
- sha256: a976c8b455d9023b83878609bd68c3b035b9839d592bd6c7be7552c523773b62
- md5: f92bef2f8e523bb0eabe60099683617a
+ size: 987506
+ timestamp: 1768148247615
+- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda
+ sha256: 756478128e3e104bd7e7c3ce6c1b0efad7e08c7320c69fdc726e039323c63fbb
+ md5: 903979414b47d777d548e5f0165e6cd8
depends:
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: blessing
purls: []
- size: 1291059
- timestamp: 1764359545703
+ size: 1291616
+ timestamp: 1768148278261
- conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda
sha256: 00654ba9e5f73aa1f75c1f69db34a19029e970a4aeb0fa8615934d8e9c369c3c
md5: a6cb15db1c2dc4d3a5f6cf3772e09e81
@@ -3987,19 +4799,19 @@ packages:
purls: []
size: 993166
timestamp: 1762022118895
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.2-h7983711_0.conda
- sha256: 83f2799e28643c7793730aa32e007832ffb520c5d77714d2097c227424f33ef1
- md5: e630b1baa02a5eeb0ef351c6125865c4
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.11.3-hc282952_0.conda
+ sha256: 626db214208e8da6aa9a904518a0442e5bff7b4602cc295dd5ce1f4a98844c1d
+ md5: 2c49b6f6ec9a510bbb75ecbd2a572697
depends:
- __osx >=10.13
license: MIT
license_family: MIT
purls: []
- size: 84943
- timestamp: 1764062312835
-- conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.11.2-hb980946_0.conda
- sha256: ff63a5e402fb5007174ea9796a210617da898a43d00b4e8a3192537cad0bd403
- md5: 405c392813b74f3df06276e99c0e2841
+ size: 84535
+ timestamp: 1768735249136
+- conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.11.3-hb980946_0.conda
+ sha256: 5d82af0779eab283416240da792a0d2fe4f8213c447e9f04aeaab1801468a90c
+ md5: 5f34fcb6578ea9bdbfd53cc2cfb88200
depends:
- ucrt >=10.0.20348.0
- vc >=14.3,<15
@@ -4007,8 +4819,8 @@ packages:
license: MIT
license_family: MIT
purls: []
- size: 89116
- timestamp: 1764062179403
+ size: 89061
+ timestamp: 1768735187639
- conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda
sha256: 00dbfe574b5d9b9b2b519acb07545380a6bc98d1f76a02695be4995d4ec91391
md5: 7bb6608cf1f83578587297a158a6630b
@@ -4075,45 +4887,44 @@ packages:
purls: []
size: 1208687
timestamp: 1727279378819
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h7b7ecba_0.conda
- sha256: ddf87bf05955d7870a41ca6f0e9fbd7b896b5a26ec1a98cd990883ac0b4f99bb
- md5: e7ed73b34f9d43d80b7e80eba9bce9f3
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.15.1-h24ca049_1.conda
+ sha256: 24ecb3a3eed2b17cec150714210067cafc522dec111750cbc44f5921df1ffec3
+ md5: c58fc83257ad06634b9c935099ef2680
depends:
- __osx >=10.13
- - icu >=75.1,<76.0a0
+ - icu >=78.1,<79.0a0
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.1,<6.0a0
- - libxml2-16 2.15.1 ha1d9b0f_0
+ - libxml2-16 2.15.1 he456531_1
- libzlib >=1.3.1,<2.0a0
license: MIT
license_family: MIT
purls: []
- size: 39985
- timestamp: 1761015935429
-- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h5d26750_0.conda
- sha256: f507960adf64ee9c9c7b7833d8b11980765ebd2bf5345f73d5a3b21b259eaed5
- md5: 9176ee05643a1bfe7f2e7b4c921d2c3d
+ size: 40016
+ timestamp: 1766327339623
+- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_1.conda
+ sha256: 8b47d5fb00a6ccc0f495d16787ab5f37a434d51965584d6000966252efecf56d
+ md5: 68dc154b8d415176c07b6995bd3a65d9
depends:
+ - icu >=78.1,<79.0a0
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.1,<6.0a0
- - libxml2-16 2.15.1 h692994f_0
+ - libxml2-16 2.15.1 h3cfd58e_1
- libzlib >=1.3.1,<2.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- constrains:
- - icu <0.0a0
license: MIT
license_family: MIT
purls: []
- size: 43209
- timestamp: 1761016354235
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-ha1d9b0f_0.conda
- sha256: e23c5ac1da7b9b65bd18bf32b68717cd9da0387941178cb4d8cc5513eb69a0a9
- md5: 453807a4b94005e7148f89f9327eb1b7
+ size: 43387
+ timestamp: 1766327259710
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-16-2.15.1-he456531_1.conda
+ sha256: eff0894cd82f2e055ea761773eb80bfaacdd13fbdd427a80fe0c5b00bf777762
+ md5: 6cd21078a491bdf3fdb7482e1680ef63
depends:
- __osx >=10.13
- - icu >=75.1,<76.0a0
+ - icu >=78.1,<79.0a0
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.1,<6.0a0
- libzlib >=1.3.1,<2.0a0
@@ -4122,12 +4933,13 @@ packages:
license: MIT
license_family: MIT
purls: []
- size: 494318
- timestamp: 1761015899881
-- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h692994f_0.conda
- sha256: 04129dc2df47a01c55e5ccf8a18caefab94caddec41b3b10fbc409e980239eb9
- md5: 70ca4626111579c3cd63a7108fe737f9
+ size: 494450
+ timestamp: 1766327317287
+- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda
+ sha256: a857e941156b7f462063e34e086d212c6ccbc1521ebdf75b9ed66bd90add57dc
+ md5: 07d73826fde28e7dbaec52a3297d7d26
depends:
+ - icu >=78.1,<79.0a0
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.1,<6.0a0
- libzlib >=1.3.1,<2.0a0
@@ -4135,48 +4947,46 @@ packages:
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
constrains:
- - icu <0.0a0
- libxml2 2.15.1
license: MIT
license_family: MIT
purls: []
- size: 518135
- timestamp: 1761016320405
-- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-devel-2.15.1-h7b7ecba_0.conda
- sha256: e2f50cbcd5f8bc880decf3e734d87aac05f9cd97f48404a48a2bde528f205b69
- md5: d48da211fb9523b22a299bce824c1242
+ size: 518964
+ timestamp: 1766327232819
+- conda: https://conda.anaconda.org/conda-forge/osx-64/libxml2-devel-2.15.1-h24ca049_1.conda
+ sha256: 5db52eae7357f89c16d08ab21ec89b35a7361e1d7be277716505e9764fe37eb8
+ md5: cc1c67f0676478f972e26c5649ea68ac
depends:
- __osx >=10.13
- - icu >=75.1,<76.0a0
+ - icu >=78.1,<79.0a0
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.1,<6.0a0
- - libxml2 2.15.1 h7b7ecba_0
- - libxml2-16 2.15.1 ha1d9b0f_0
+ - libxml2 2.15.1 h24ca049_1
+ - libxml2-16 2.15.1 he456531_1
- libzlib >=1.3.1,<2.0a0
license: MIT
license_family: MIT
purls: []
- size: 79819
- timestamp: 1761015961507
-- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-devel-2.15.1-h5d26750_0.conda
- sha256: 814d4efa70c354b79049f7aa18b8dadfbc46c112ba1348dd6a0ae52db0f6cff6
- md5: 93b3ed4c07b0e4bba3fd5dc4af62fc07
+ size: 79886
+ timestamp: 1766327359472
+- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-devel-2.15.1-h779ef1b_1.conda
+ sha256: aa029a0c5f193237011033e178433dd126796fd7693acbb6bffca134c3d3849e
+ md5: 83b2850ed45d2d66ac89e5cf2465cb43
depends:
+ - icu >=78.1,<79.0a0
- libiconv >=1.18,<2.0a0
- liblzma >=5.8.1,<6.0a0
- - libxml2 2.15.1 h5d26750_0
- - libxml2-16 2.15.1 h692994f_0
+ - libxml2 2.15.1 h779ef1b_1
+ - libxml2-16 2.15.1 h3cfd58e_1
- libzlib >=1.3.1,<2.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- constrains:
- - icu <0.0a0
license: MIT
license_family: MIT
purls: []
- size: 123636
- timestamp: 1761016381443
+ size: 123251
+ timestamp: 1766327276864
- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda
sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09
md5: 003a54a4e32b02f7355b50a837e699da
@@ -4216,33 +5026,34 @@ packages:
- pkg:pypi/lingua-language-detector?source=hash-mapping
size: 84671772
timestamp: 1735923870862
-- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.7-h472b3d1_0.conda
- sha256: 5ae51ca08ac19ce5504b8201820ba6387365662033f20af2150ae7949f3f308a
- md5: c9f0fc88c8f46637392b95bef78dc036
+- conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-21.1.8-h472b3d1_0.conda
+ sha256: 2a41885f44cbc1546ff26369924b981efa37a29d20dc5445b64539ba240739e6
+ md5: e2d811e9f464dd67398b4ce1f9c7c872
depends:
- __osx >=10.13
constrains:
- - openmp 21.1.7|21.1.7.*
+ - openmp 21.1.8|21.1.8.*
- intel-openmp <0.0a0
license: Apache-2.0 WITH LLVM-exception
license_family: APACHE
purls: []
- size: 311027
- timestamp: 1764721464764
-- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.7-h4fa8253_0.conda
- sha256: 79121242419bf8b485c313fa28697c5c61ec207afa674eac997b3cb2fd1ff892
- md5: 5823741f7af732cd56036ae392396ec6
+ size: 311405
+ timestamp: 1765965194247
+- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda
+ sha256: 145c4370abe870f10987efa9fc15a8383f1dab09abbc9ad4ff15a55d45658f7b
+ md5: 0d8b425ac862bcf17e4b28802c9351cb
depends:
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
constrains:
- intel-openmp <0.0a0
- - openmp 21.1.7|21.1.7.*
+ - openmp 21.1.8|21.1.8.*
license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
purls: []
- size: 347969
- timestamp: 1764722187332
+ size: 347566
+ timestamp: 1765964942856
- conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.10.0-h240833e_1.conda
sha256: 8da3c9d4b596e481750440c0250a7e18521e7f69a47e1c8415d568c847c08a1c
md5: d6b9bd7e356abd7e3a633d59b753495a
@@ -4319,21 +5130,6 @@ packages:
- pkg:pypi/markdown-it-py?source=hash-mapping
size: 64736
timestamp: 1754951288511
-- conda: https://conda.anaconda.org/conda-forge/noarch/markupsafe-3.0.3-pyh7db6752_0.conda
- sha256: e0cbfea51a19b3055ca19428bd9233a25adca956c208abb9d00b21e7259c7e03
- md5: fab1be106a50e20f10fe5228fd1d1651
- depends:
- - python >=3.10
- constrains:
- - jinja2 >=3.0.0
- track_features:
- - markupsafe_no_compile
- license: BSD-3-Clause
- license_family: BSD
- purls:
- - pkg:pypi/markupsafe?source=hash-mapping
- size: 15499
- timestamp: 1759055275624
- conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.3-py312hacf3034_0.conda
sha256: e50fa11ea301d42fe64e587e2262f6afbe2ec42afe95e3ad4ccba06910b63155
md5: 2e6f78b0281181edc92337aa12b96242
@@ -4349,14 +5145,31 @@ packages:
- pkg:pypi/markupsafe?source=hash-mapping
size: 24541
timestamp: 1759055509267
-- conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.8-py312h7894933_0.conda
- sha256: 2ce31cad23d5d5fc16ca9d25f47dcfc52e93f2a0c6e1dc6db28e583c42f88bdc
- md5: 853618b60fdd11a6c3dbaadaa413407c
+- conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_0.conda
+ sha256: db1d772015ef052fedb3b4e7155b13446b49431a0f8c54c56ca6f82e1d4e258f
+ md5: 9a50d5e7b4f2bf5db9790bbe9421cdf8
depends:
- - __osx >=10.13
- - contourpy >=1.0.1
- - cycler >=0.10
- - fonttools >=4.22.0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ constrains:
+ - jinja2 >=3.0.0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/markupsafe?source=hash-mapping
+ size: 28388
+ timestamp: 1759055474173
+- conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.8-py312h7894933_0.conda
+ sha256: 2ce31cad23d5d5fc16ca9d25f47dcfc52e93f2a0c6e1dc6db28e583c42f88bdc
+ md5: 853618b60fdd11a6c3dbaadaa413407c
+ depends:
+ - __osx >=10.13
+ - contourpy >=1.0.1
+ - cycler >=0.10
+ - fonttools >=4.22.0
- freetype
- kiwisolver >=1.3.1
- libcxx >=19
@@ -4406,6 +5219,18 @@ packages:
- pkg:pypi/matplotlib?source=hash-mapping
size: 8076859
timestamp: 1763055636237
+- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda
+ sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603
+ md5: 00e120ce3e40bad7bfc78861ce3c4a25
+ depends:
+ - python >=3.10
+ - traitlets
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/matplotlib-inline?source=hash-mapping
+ size: 15175
+ timestamp: 1761214578417
- conda: https://conda.anaconda.org/conda-forge/noarch/maxminddb-2.6.2-pyhd8ed1ab_0.conda
sha256: e170820ac4d5941feca5049514b444da55d35a601f9593cb28b748508a7c5b6d
md5: 36825ad83ea9eca4353b3ed346616b0f
@@ -4461,34 +5286,61 @@ packages:
purls: []
size: 86618
timestamp: 1746450788037
-- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_454.conda
- sha256: 3c432e77720726c6bd83e9ee37ac8d0e3dd7c4cf9b4c5805e1d384025f9e9ab6
- md5: c83ec81713512467dfe1b496a8292544
+- conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda
+ sha256: d3fb4beb5e0a52b6cc33852c558e077e1bfe44df1159eb98332d69a264b14bae
+ md5: b11e360fc4de2b0035fc8aaa74f17fd6
depends:
- - llvm-openmp >=21.1.4
- - tbb >=2022.2.0
+ - python >=3.10
+ - typing_extensions
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/mistune?source=compressed-mapping
+ size: 74250
+ timestamp: 1766504456031
+- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda
+ sha256: b2b4c84b95210760e4d12319416c60ab66e03674ccdcbd14aeb59f82ebb1318d
+ md5: fd05d1e894497b012d05a804232254ed
+ depends:
+ - llvm-openmp >=21.1.8
+ - tbb >=2022.3.0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: LicenseRef-IntelSimplifiedSoftwareOct2022
license_family: Proprietary
purls: []
- size: 99909095
- timestamp: 1761668703167
-- conda: https://conda.anaconda.org/conda-forge/noarch/multidict-6.6.3-pyh62beb40_0.conda
- sha256: c4257649d1be3d19a97213457032073737cd3179bd0ed3bd2b9885955d11f6b8
- md5: 36b9579bd0896b224df0424e46efc1b5
+ size: 100224829
+ timestamp: 1767634557029
+- conda: https://conda.anaconda.org/conda-forge/osx-64/msgspec-0.20.0-py312h1a1c95f_2.conda
+ sha256: b6078cad703eb8de2fa1228468d44c1001d232ad939fc83817e4b2fa9d2615af
+ md5: 8d4b910054d3abe9248508ac3fd992f2
depends:
- - python >=3.9
- - typing-extensions >=4.1.0
- track_features:
- - multidict_no_compile
- license: Apache-2.0
- license_family: APACHE
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
purls:
- - pkg:pypi/multidict?source=hash-mapping
- size: 37036
- timestamp: 1751310675422
+ - pkg:pypi/msgspec?source=hash-mapping
+ size: 215747
+ timestamp: 1768737993113
+- conda: https://conda.anaconda.org/conda-forge/win-64/msgspec-0.20.0-py312he06e257_2.conda
+ sha256: 87829a757aa507b1ec2407347b55da5f03e03f6fd8c8990cf044292433c90ab8
+ md5: 658521110647084869216aa90867820c
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/msgspec?source=hash-mapping
+ size: 200099
+ timestamp: 1768737908543
- conda: https://conda.anaconda.org/conda-forge/osx-64/multidict-6.7.0-py312h2352a57_0.conda
sha256: 7dfaf8ee2c1bad866b7b975191e22d1dab529b8eecb9012480005dd190e079e7
md5: bf8bb4d92f3d07f998bd4fae10f46d14
@@ -4502,6 +5354,21 @@ packages:
- pkg:pypi/multidict?source=hash-mapping
size: 88942
timestamp: 1765460710634
+- conda: https://conda.anaconda.org/conda-forge/win-64/multidict-6.7.0-py312h05f76fc_0.conda
+ sha256: 002b3a8ea6a5482613e3bd8746a7875d159e1fd6707fea6973dd717f88807659
+ md5: c3ef35651feadbfa926790b0c0343197
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/multidict?source=hash-mapping
+ size: 91021
+ timestamp: 1765460781178
- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda
sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90
md5: 37293a85a0f4f77bbd9cf7aaefc62609
@@ -4537,41 +5404,38 @@ packages:
purls: []
size: 148557
timestamp: 1747117340968
-- conda: https://conda.anaconda.org/conda-forge/osx-64/murmurhash-1.0.15-py312hbfd3414_0.conda
- sha256: 739e6d5026e05859af9fad1718527ba559e3ce6498e2cd159defb29afc2d9ded
- md5: 6deb49ca8c8511feecfd4987160a9528
+- conda: https://conda.anaconda.org/conda-forge/osx-64/murmurhash-1.0.15-py312h29de90a_1.conda
+ sha256: 19edb1ba9544a4365fb0b8441245267d5180e58b7f151574198ca2d3988db570
+ md5: 0ac3af29a4b774de8343cabd89854edb
depends:
- python
- - libcxx >=19
- __osx >=10.13
+ - libcxx >=19
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
purls:
- pkg:pypi/murmurhash?source=hash-mapping
- size: 36894
- timestamp: 1763924150338
-- conda: https://conda.anaconda.org/conda-forge/win-64/murmurhash-1.0.15-py312ha1a9051_0.conda
- sha256: 586cf9306177c002cc1d15c62a9a24dbe0f7776588760b655a86337aa7c3f97b
- md5: 049cd1697939ae9a680e3aff5f0edf0b
+ size: 37753
+ timestamp: 1768531528761
+- conda: https://conda.anaconda.org/conda-forge/win-64/murmurhash-1.0.15-py312ha1a9051_1.conda
+ sha256: dbb7a3a712539a4401469a532972a30ba0601bc9ff44c6ef5f5fc82e09c33a10
+ md5: 7347a9e81ea2ce0e338b57d610791367
depends:
- python
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- python_abi 3.12.* *_cp312
license: MIT
license_family: MIT
purls:
- pkg:pypi/murmurhash?source=hash-mapping
- size: 32413
- timestamp: 1763924017658
-- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.13.0-pyhcf101f3_0.conda
- sha256: 03220ba0560de1d81b8b122e8ff6313238dbb1ed621db39f4b81f767904ed475
- md5: 0129bb97a81c2ca0f57031673424387a
+ size: 32369
+ timestamp: 1768531440515
+- conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-2.15.0-pyhcf101f3_0.conda
+ sha256: 2e64699401c6170ce9a0916461ff4686f8d10b076f6abe1d887cbcb7061c0e85
+ md5: 37926bb0db8b04b8b99945076e1442d0
depends:
- python >=3.10
- python
@@ -4579,8 +5443,68 @@ packages:
license_family: MIT
purls:
- pkg:pypi/narwhals?source=compressed-mapping
- size: 268700
- timestamp: 1764604454148
+ size: 272452
+ timestamp: 1767693390284
+- conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda
+ sha256: 1b66960ee06874ddceeebe375d5f17fb5f393d025a09e15b830ad0c4fffb585b
+ md5: 00f5b8dafa842e0c27c1cd7296aa4875
+ depends:
+ - jupyter_client >=6.1.12
+ - jupyter_core >=4.12,!=5.0.*
+ - nbformat >=5.1
+ - python >=3.8
+ - traitlets >=5.4
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/nbclient?source=compressed-mapping
+ size: 28473
+ timestamp: 1766485646962
+- conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda
+ sha256: 8f575e5c042b17f4677179a6ba474bdbe76573936d3d3e2aeb42b511b9cb1f3f
+ md5: cfc86ccc3b1de35d36ccaae4c50391f5
+ depends:
+ - beautifulsoup4
+ - bleach-with-css !=5.0.0
+ - defusedxml
+ - importlib-metadata >=3.6
+ - jinja2 >=3.0
+ - jupyter_core >=4.7
+ - jupyterlab_pygments
+ - markupsafe >=2.0
+ - mistune >=2.0.3,<4
+ - nbclient >=0.5.0
+ - nbformat >=5.7
+ - packaging
+ - pandocfilters >=1.4.1
+ - pygments >=2.4.1
+ - python >=3.10
+ - traitlets >=5.1
+ - python
+ constrains:
+ - pandoc >=2.9.2,<4.0.0
+ - nbconvert ==7.16.6 *_1
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/nbconvert?source=compressed-mapping
+ size: 199273
+ timestamp: 1760797634443
+- conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda
+ sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838
+ md5: bbe1963f1e47f594070ffe87cdf612ea
+ depends:
+ - jsonschema >=2.6
+ - jupyter_core >=4.12,!=5.0.*
+ - python >=3.9
+ - python-fastjsonschema >=2.15
+ - traitlets >=5.1
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/nbformat?source=hash-mapping
+ size: 100945
+ timestamp: 1733402844974
- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda
sha256: ea4a5d27ded18443749aefa49dc79f6356da8506d508b5296f60b8d51e0c4bd9
md5: ced34dd9929f491ca6dab6a2927aff25
@@ -4590,23 +5514,17 @@ packages:
purls: []
size: 822259
timestamp: 1738196181298
-- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6-pyhcf101f3_0.conda
- sha256: 57b0bbb72ed5647438a81e7caf4890075390f80030c1333434467f9366762db7
- md5: 6725bfdf8ea7a8bf6415f096f3f1ffa5
+- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda
+ sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0
+ md5: 598fd7d4d0de2455fb74f56063969a97
depends:
- - python >=3.11
- - python
- constrains:
- - numpy >=1.25
- - scipy >=1.11.2
- - matplotlib-base >=3.8
- - pandas >=2.0
- license: BSD-3-Clause
+ - python >=3.9
+ license: BSD-2-Clause
license_family: BSD
purls:
- - pkg:pypi/networkx?source=compressed-mapping
- size: 1584885
- timestamp: 1763962034867
+ - pkg:pypi/nest-asyncio?source=hash-mapping
+ size: 11543
+ timestamp: 1733325673691
- conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda
sha256: f6a82172afc50e54741f6f84527ef10424326611503c64e359e25a19a8e4c1c6
md5: a2c1eeadae7a309daed9d62c96012a2b
@@ -4621,19 +5539,19 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/networkx?source=compressed-mapping
+ - pkg:pypi/networkx?source=hash-mapping
size: 1587439
timestamp: 1765215107045
-- conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h53ec75d_1.conda
- sha256: 186edb5fe84bddf12b5593377a527542f6ba42486ca5f49cd9dfeda378fb0fbe
- md5: 5e9bee5fa11d91e1621e477c3cb9b9ba
+- conda: https://conda.anaconda.org/conda-forge/osx-64/nlohmann_json-3.12.0-h06076ce_1.conda
+ sha256: 8e1b8ac88e07da2910c72466a94d1fc77aa13c722f8ddbc7ae3beb7c19b41fc7
+ md5: 97d7a1cda5546cb0bbdefa3777cb9897
constrains:
- nlohmann_json-abi ==3.12.0
license: MIT
license_family: MIT
purls: []
- size: 136667
- timestamp: 1758194361656
+ size: 137081
+ timestamp: 1768670842725
- conda: https://conda.anaconda.org/conda-forge/noarch/nltk-3.9.2-pyhcf101f3_1.conda
sha256: 83f64b761df8a174b9b13c1744c4792e5ff3b808100e87d8c41162070d6286ff
md5: 0dc14490fe2a7788902dfb9378911837
@@ -4650,48 +5568,45 @@ packages:
- pkg:pypi/nltk?source=hash-mapping
size: 1131839
timestamp: 1759331744254
-- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.3.5-py312ha3982b3_0.conda
- sha256: 62c2a6fb30fec82f8d46defcf33c94a04d5c890ce02b3ddeeda3263f9043688c
- md5: 6941ace329a1f088d1b3b399369aecec
+- conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.4.1-py312hb34da66_0.conda
+ sha256: fa106137912ff6bf28d5dcdbf6ba8904fd62c1fced7fe1b35f74f990d9c4c08a
+ md5: 2c8ff39230936832bf4c6d7a5ac92ff8
depends:
- python
- libcxx >=19
- __osx >=10.13
- - liblapack >=3.9.0,<4.0a0
- libblas >=3.9.0,<4.0a0
- python_abi 3.12.* *_cp312
+ - liblapack >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
constrains:
- numpy-base <0a0
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 7992092
- timestamp: 1763350891083
-- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.3.5-py312ha72d056_0.conda
- sha256: 1db03d0b892a196351544dabf8ac93a7f9f78dc85d3732de31ecb52c0da65d1b
- md5: 1c96af76fd575e8dcc48eea3e851579f
+ - pkg:pypi/numpy?source=compressed-mapping
+ size: 7977192
+ timestamp: 1768085565414
+- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.1-py312ha72d056_0.conda
+ sha256: 06d2acce4c5cfe230213c4bc62823de3fa032d053f83c93a28478c7b8ee769bc
+ md5: e06f225f5bf5784b3412b21a2a44da72
depends:
- python
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - libblas >=3.9.0,<4.0a0
- python_abi 3.12.* *_cp312
- - liblapack >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
+ - liblapack >=3.9.0,<4.0a0
+ - libblas >=3.9.0,<4.0a0
constrains:
- numpy-base <0a0
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/numpy?source=hash-mapping
- size: 7438208
- timestamp: 1763350928802
+ - pkg:pypi/numpy?source=compressed-mapping
+ size: 7163582
+ timestamp: 1768085586766
- conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.4-h87e8dc5_0.conda
sha256: fdf4708a4e45b5fd9868646dd0c0a78429f4c0b8be490196c975e06403a841d0
md5: a67d3517ebbf615b91ef9fdc99934e0c
@@ -4745,9 +5660,9 @@ packages:
purls: []
size: 9440812
timestamp: 1762841722179
-- conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.2.1-hd1b02dc_0.conda
- sha256: a00d48750d2140ea97d92b32c171480b76b2632dbb9d19d1ae423999efcc825f
- md5: b4646b6ddcbcb3b10e9879900c66ed48
+- conda: https://conda.anaconda.org/conda-forge/osx-64/orc-2.2.2-h3073fbf_0.conda
+ sha256: 6c7048ba82eea4c92c1dc8bdf0a6989609367ffef9ff719cf86066bab046e0d0
+ md5: 7323bc020618321c05afaf23f78460c0
depends:
- __osx >=11.0
- libcxx >=19
@@ -4760,11 +5675,11 @@ packages:
license: Apache-2.0
license_family: Apache
purls: []
- size: 521463
- timestamp: 1759424838652
-- conda: https://conda.anaconda.org/conda-forge/win-64/orc-2.2.1-h7414dfc_0.conda
- sha256: f28f8f2d743c2091f76161b8d59f82c4ba4970d03cb9900c52fb908fe5e8a7c4
- md5: a9b6ebf475194b0e5ad43168e9b936a7
+ size: 522041
+ timestamp: 1768248087348
+- conda: https://conda.anaconda.org/conda-forge/win-64/orc-2.2.2-hbd3206f_0.conda
+ sha256: 86549f63b4b30764e70fd3edc2df4d69e17880b317afa9fa93318a83f9213807
+ md5: e20393ad8ebe534f3937e0a5da44e287
depends:
- libprotobuf >=6.31.1,<6.31.2.0a0
- libzlib >=1.3.1,<2.0a0
@@ -4778,20 +5693,32 @@ packages:
license: Apache-2.0
license_family: Apache
purls: []
- size: 1064397
- timestamp: 1759424869069
-- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda
- sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991
- md5: 58335b26c38bf4a20f399384c33cbcf9
+ size: 1164012
+ timestamp: 1768247969345
+- conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_1.conda
+ sha256: 1840bd90d25d4930d60f57b4f38d4e0ae3f5b8db2819638709c36098c6ba770c
+ md5: e51f1e4089cad105b6cac64bd8166587
+ depends:
+ - python >=3.9
+ - typing_utils
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/overrides?source=hash-mapping
+ size: 30139
+ timestamp: 1734587755455
+- 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
purls:
- - pkg:pypi/packaging?source=hash-mapping
- size: 62477
- timestamp: 1745345660407
+ - pkg:pypi/packaging?source=compressed-mapping
+ size: 72010
+ timestamp: 1769093650580
- conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.3.3-py312h86abcb1_2.conda
sha256: 112273ffd9572a4733c98b9d80a243f38db4d0fce5d34befaf9eb6f64ed39ba3
md5: d7dfad2b9a142319cec4736fe88d8023
@@ -4892,12 +5819,12 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/pandas?source=compressed-mapping
+ - pkg:pypi/pandas?source=hash-mapping
size: 13779090
timestamp: 1764615170494
-- conda: https://conda.anaconda.org/conda-forge/noarch/pandas-stubs-2.3.3.251201-pyhd8ed1ab_0.conda
- sha256: a78aea1e127a7988ba5d0ae92e330fca31cb40e1a5791f8e71464a3da43c873b
- md5: 7eb8757889cd231ed46c4db504f75f8a
+- conda: https://conda.anaconda.org/conda-forge/noarch/pandas-stubs-2.3.3.260113-pyhd8ed1ab_0.conda
+ sha256: 01ca8d406c5959ee84d4c467025005e0825c46f4e1098112309875c6d67c657d
+ md5: 7fd6f0c1f9fe715a5ee192f727e74528
depends:
- numpy >=1.26.0
- python >=3.10
@@ -4906,8 +5833,41 @@ packages:
license_family: BSD
purls:
- pkg:pypi/pandas-stubs?source=hash-mapping
- size: 105273
- timestamp: 1764685601365
+ size: 106767
+ timestamp: 1768403429992
+- conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2
+ sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f
+ md5: 457c2c8c08e54905d6954e79cb5b5db9
+ depends:
+ - python !=3.0,!=3.1,!=3.2,!=3.3
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/pandocfilters?source=hash-mapping
+ size: 11627
+ timestamp: 1631603397334
+- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda
+ sha256: 30de7b4d15fbe53ffe052feccde31223a236dae0495bab54ab2479de30b2990f
+ md5: a110716cdb11cf51482ff4000dc253d7
+ depends:
+ - python >=3.10
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/parso?source=hash-mapping
+ size: 81562
+ timestamp: 1755974222274
+- pypi: https://files.pythonhosted.org/packages/f1/70/ba4b949bdc0490ab78d545459acd7702b211dfccf7eb89bbc1060f52818d/patsy-1.0.2-py2.py3-none-any.whl
+ name: patsy
+ version: 1.0.2
+ sha256: 37bfddbc58fcf0362febb5f54f10743f8b21dd2aa73dec7e7ef59d1b02ae668a
+ requires_dist:
+ - numpy>=1.4
+ - pytest ; extra == 'test'
+ - pytest-cov ; extra == 'test'
+ - scipy ; extra == 'test'
+ requires_python: '>=3.6'
- conda: https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.47-h13923f0_0.conda
sha256: 8d64a9d36073346542e5ea042ef8207a45a0069a2e65ce3323ee3146db78134c
md5: 08f970fb2b75f5be27678e077ebedd46
@@ -4934,55 +5894,108 @@ packages:
purls: []
size: 995992
timestamp: 1763655708300
-- conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.0.0-py312hea0c9db_2.conda
- sha256: 8c2fc5ff5d9b6d9e285ef217e78d90820d507c98b961256dd410f48307360754
- md5: 1d9e77d994f7593d52f6f42ec2712b4d
+- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda
+ sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a
+ md5: d0d408b1f18883a944376da5cf8101ea
+ depends:
+ - ptyprocess >=0.5
+ - python >=3.9
+ license: ISC
+ purls:
+ - pkg:pypi/pexpect?source=hash-mapping
+ size: 53561
+ timestamp: 1733302019362
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-12.1.0-py312h4985050_0.conda
+ sha256: ae49f74594eab749f3f78441f4c33a58ac710c813d3823b9a8862dddc1f0af28
+ md5: 2cc7fe00971062013ccc3c6616665182
depends:
- python
- __osx >=10.13
- - tk >=8.6.13,<8.7.0a0
- - lcms2 >=2.17,<3.0a0
- - python_abi 3.12.* *_cp312
- - libjpeg-turbo >=3.1.2,<4.0a0
- libxcb >=1.17.0,<2.0a0
- openjpeg >=2.5.4,<3.0a0
- - zlib-ng >=2.3.1,<2.4.0a0
- - libwebp-base >=1.6.0,<2.0a0
+ - libtiff >=4.7.1,<4.8.0a0
+ - zlib-ng >=2.3.2,<2.4.0a0
+ - python_abi 3.12.* *_cp312
+ - tk >=8.6.13,<8.7.0a0
- libfreetype >=2.14.1
- libfreetype6 >=2.14.1
- - libtiff >=4.7.1,<4.8.0a0
+ - libwebp-base >=1.6.0,<2.0a0
+ - libjpeg-turbo >=3.1.2,<4.0a0
+ - lcms2 >=2.17,<3.0a0
license: HPND
purls:
- pkg:pypi/pillow?source=hash-mapping
- size: 961639
- timestamp: 1764330318999
-- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.0.0-py312h31f0997_2.conda
- sha256: f790f3ea6ae82d8ee3490d62cc2400311f0ca130eaf73292c599019e0b3ccae4
- md5: 4155ddcc60faad07fb2a5b3b988b3741
+ size: 964428
+ timestamp: 1767353261550
+- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.1.0-py312h31f0997_0.conda
+ sha256: 5ad93e9f91e0e8863ca3f54a9dffe51633b41dc7f66e1d7debaec62f8d458f0a
+ md5: 2e481e979b46c223b3be6485113f7ad1
depends:
- python
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- ucrt >=10.0.20348.0
+ - libwebp-base >=1.6.0,<2.0a0
+ - libxcb >=1.17.0,<2.0a0
+ - libtiff >=4.7.1,<4.8.0a0
- libfreetype >=2.14.1
- libfreetype6 >=2.14.1
- - libjpeg-turbo >=3.1.2,<4.0a0
- - zlib-ng >=2.3.1,<2.4.0a0
- - libxcb >=1.17.0,<2.0a0
- - tk >=8.6.13,<8.7.0a0
- python_abi 3.12.* *_cp312
- openjpeg >=2.5.4,<3.0a0
+ - tk >=8.6.13,<8.7.0a0
+ - libjpeg-turbo >=3.1.2,<4.0a0
+ - zlib-ng >=2.3.2,<2.4.0a0
- lcms2 >=2.17,<3.0a0
- - libtiff >=4.7.1,<4.8.0a0
- - libwebp-base >=1.6.0,<2.0a0
license: HPND
purls:
- pkg:pypi/pillow?source=hash-mapping
- size: 931818
- timestamp: 1764330112081
-- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.5.0-pyhd8ed1ab_0.conda
- sha256: 13b06d2380fc46c299d2ae3465f90f156929b7f98597fc22b0e7ac0cfd40c20d
- md5: 6d4c79b604d50c1140c32164f7eca72a
+ size: 933613
+ timestamp: 1767353195061
+- conda: https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda
+ sha256: b67692da1c0084516ac1c9ada4d55eaf3c5891b54980f30f3f444541c2706f1e
+ md5: c55515ca43c6444d2572e0f0d93cb6b9
+ depends:
+ - python >=3.10,<3.13.0a0
+ - setuptools
+ - wheel
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pip?source=hash-mapping
+ size: 1177534
+ timestamp: 1762776258783
+- conda: https://conda.anaconda.org/conda-forge/noarch/pixi-kernel-0.7.1-pyhbbac1ac_0.conda
+ sha256: 506c9330b8dc5ae98f4c32629fa59fa40e6bdd42a681c48d2f9554693dd01156
+ md5: d57ef7cb7ad6b5d62cef8b9bdf1d400b
+ depends:
+ - ipykernel >=6
+ - jupyter_client >=7
+ - jupyter_server >=2.4
+ - msgspec >=0.18
+ - python >=3.10
+ - returns >=0.23
+ - tomli >=2
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pixi-kernel?source=hash-mapping
+ size: 39509
+ timestamp: 1764156429044
+- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda
+ sha256: 04c64fb78c520e5c396b6e07bc9082735a5cc28175dbe23138201d0a9441800b
+ md5: 1bd2e65c8c7ef24f4639ae6e850dacc2
+ depends:
+ - python >=3.10
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/platformdirs?source=hash-mapping
+ size: 23922
+ timestamp: 1764950726246
+- conda: https://conda.anaconda.org/conda-forge/noarch/plotly-6.5.2-pyhd8ed1ab_0.conda
+ sha256: 48d2caf66b8209bfb3fa160f5bc7cbd625deaa4826e8aa1bad706b2dd22bbb86
+ md5: 7702bcd70891dd0154d765a69e1afa94
depends:
- narwhals >=1.15.1
- packaging
@@ -4993,11 +6006,23 @@ packages:
license_family: MIT
purls:
- pkg:pypi/plotly?source=hash-mapping
- size: 5179039
- timestamp: 1763430425844
-- conda: https://conda.anaconda.org/conda-forge/osx-64/preshed-3.0.12-py312h69bf00f_0.conda
- sha256: 3f57f46b642a6e9a3f0b635cb439392679aacdaa98a03994fa7c5620a8c8b082
- md5: adf5d625c0d7e2554d6b5eb9ee3963d9
+ size: 4924275
+ timestamp: 1768442503807
+- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda
+ sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e
+ md5: d7585b6550ad04c8c5e21097ada2888e
+ depends:
+ - python >=3.9
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pluggy?source=compressed-mapping
+ size: 25877
+ timestamp: 1764896838868
+- conda: https://conda.anaconda.org/conda-forge/osx-64/preshed-3.0.12-py312h11f4fa3_1.conda
+ sha256: d52b91535deb1051a070b1bf1ba3c557fbae22aad5ef41a970e5a3b3730f45ab
+ md5: 8d336f20d0050bf7d98388c47f60cb38
depends:
- __osx >=10.13
- cymem >=2.0.2,<2.1.0
@@ -5009,11 +6034,11 @@ packages:
license_family: MIT
purls:
- pkg:pypi/preshed?source=hash-mapping
- size: 102144
- timestamp: 1763427614243
-- conda: https://conda.anaconda.org/conda-forge/win-64/preshed-3.0.12-py312hbb81ca0_0.conda
- sha256: cbbc5f11e9b95882cb20f65c06e00153d9532fd5d6d94b797d4c04b2b56280cf
- md5: 5c2195af353b08221ab99c7f126ac455
+ size: 102220
+ timestamp: 1768547054993
+- conda: https://conda.anaconda.org/conda-forge/win-64/preshed-3.0.12-py312hbb81ca0_1.conda
+ sha256: 8896b2c9cae1c7edcfa1e7b9681230ec07a1b665c9678c0ab6d3e694abdad27d
+ md5: 81009ef89759eb208650c5f1f4ef8f15
depends:
- cymem >=2.0.2,<2.1.0
- murmurhash >=0.28.0,<1.1.0
@@ -5026,43 +6051,64 @@ packages:
license_family: MIT
purls:
- pkg:pypi/preshed?source=hash-mapping
- size: 90264
- timestamp: 1763427572962
-- conda: https://conda.anaconda.org/conda-forge/osx-64/proj-9.7.0-h3124640_0.conda
- sha256: f8d45ec8e2a6ea58181a399a58f5e2f6ab6d25f772ba63ac08091e887498ab83
- md5: c952a9e5ecd52f6dfdb1b4e43e033893
+ size: 90265
+ timestamp: 1768546992428
+- pypi: https://files.pythonhosted.org/packages/50/07/8f02b5c352e5deaf1461ededd4cb844e96da96f0158fccfa397e85f4a8d0/prince-0.16.5-py3-none-any.whl
+ name: prince
+ version: 0.16.5
+ sha256: 1556502acfbd3dfa655b7ea7cfc01b9ea586340b8d5cbd1a438663c0f8fe7ad8
+ requires_dist:
+ - scikit-learn>=1.5.1
+ - pandas>=2.2.0
+ - altair>=5.0.0
+ - nbconvert>=7.16.5 ; extra == 'dev'
+ - fbpca>=1.0 ; extra == 'dev'
+ - pytest>=8.3.4 ; extra == 'dev'
+ - ipykernel>=6.13.0 ; extra == 'dev'
+ - rpy2>=3.5.2 ; extra == 'dev'
+ - ruff>=0.8.8 ; extra == 'dev'
+ - xarray>=2025.1.0 ; extra == 'dev'
+ - pre-commit>=4.0.1 ; extra == 'dev'
+ requires_python: '>=3.10'
+- conda: https://conda.anaconda.org/conda-forge/osx-64/proj-9.7.1-h4aacef1_2.conda
+ sha256: 76efc2d9d359662246aa09b03ac52c25a6df1871a988a27fb13585af413aa4fd
+ md5: 2deeb48139ea69c6000e5f26296195fc
depends:
- - __osx >=10.13
- - libcurl >=8.14.1,<9.0a0
- - libcxx >=19
- - libsqlite >=3.50.4,<4.0a0
- - libtiff >=4.7.0,<4.8.0a0
- sqlite
+ - libtiff
+ - libcurl
+ - libcxx >=19
+ - __osx >=10.13
+ - libsqlite >=3.51.2,<4.0a0
+ - libcurl >=8.18.0,<9.0a0
+ - libtiff >=4.7.1,<4.8.0a0
constrains:
- proj4 ==999999999999
license: MIT
license_family: MIT
purls: []
- size: 2918228
- timestamp: 1757930204492
-- conda: https://conda.anaconda.org/conda-forge/win-64/proj-9.7.1-h7b1ce8f_0.conda
- sha256: c582fd23ceaabe435f4fc78f4cb1f0f4ca46964e19d3b56dc3813dd83a25b115
- md5: 9839364b9ca98be1917a72046e5880fd
+ size: 3235293
+ timestamp: 1769194275134
+- conda: https://conda.anaconda.org/conda-forge/win-64/proj-9.7.1-hd30e2cd_2.conda
+ sha256: 81b19db0e1b1f3812ea32ef1afe74608df778a42540600a4a8d73a2fcf49268a
+ md5: 0a127152bc983e99981b50d44ac4a092
depends:
- - libcurl >=8.17.0,<9.0a0
- - libsqlite >=3.51.1,<4.0a0
- - libtiff >=4.7.1,<4.8.0a0
- sqlite
- - ucrt >=10.0.20348.0
+ - libtiff
+ - libcurl
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - libcurl >=8.18.0,<9.0a0
+ - libtiff >=4.7.1,<4.8.0a0
+ - libsqlite >=3.51.2,<4.0a0
constrains:
- proj4 ==999999999999
license: MIT
license_family: MIT
purls: []
- size: 2817020
- timestamp: 1764624798704
+ size: 3084258
+ timestamp: 1769194305364
- conda: https://conda.anaconda.org/conda-forge/osx-64/prometheus-cpp-1.3.0-h7802330_0.conda
sha256: af754a477ee2681cb7d5d77c621bd590d25fe1caf16741841fc2d176815fc7de
md5: f36107fa2557e63421a46676371c4226
@@ -5077,19 +6123,31 @@ packages:
purls: []
size: 179103
timestamp: 1730769223221
-- conda: https://conda.anaconda.org/conda-forge/noarch/propcache-0.3.1-pyhe1237c8_0.conda
- sha256: d8927d64b35e1fb82285791444673e47d3729853be962c7045e75fc0fd715cec
- md5: b1cda654f58d74578ac9786909af84cd
+- conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.24.1-pyhd8ed1ab_0.conda
+ sha256: 75b2589159d04b3fb92db16d9970b396b9124652c784ab05b66f584edc97f283
+ md5: 7526d20621b53440b0aae45d4797847e
depends:
- - python >=3.9
- track_features:
- - propcache_no_compile
+ - python >=3.10
license: Apache-2.0
- license_family: APACHE
+ license_family: Apache
purls:
- - pkg:pypi/propcache?source=hash-mapping
- size: 17693
- timestamp: 1744525054494
+ - pkg:pypi/prometheus-client?source=compressed-mapping
+ size: 56634
+ timestamp: 1768476602855
+- conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda
+ sha256: 4817651a276016f3838957bfdf963386438c70761e9faec7749d411635979bae
+ md5: edb16f14d920fb3faf17f5ce582942d6
+ depends:
+ - python >=3.10
+ - wcwidth
+ constrains:
+ - prompt_toolkit 3.0.52
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/prompt-toolkit?source=hash-mapping
+ size: 273927
+ timestamp: 1756321848365
- conda: https://conda.anaconda.org/conda-forge/osx-64/propcache-0.3.1-py312h3520af0_0.conda
sha256: b589b640427dbfdc09a54783f89716440f4c9a4d9e479a2e4f33696f1073c401
md5: 9e58210edacc700e43c515206904f0ca
@@ -5103,18 +6161,33 @@ packages:
- pkg:pypi/propcache?source=hash-mapping
size: 51501
timestamp: 1744525135519
-- conda: https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.26.1-pyhd8ed1ab_0.conda
- sha256: 88217ba299be4a56c0534ccdef676390b76ca10b07ac26d16940d9a944d6212c
- md5: 6fcfcf4432cd80d05ee9c6e20830bd36
+- conda: https://conda.anaconda.org/conda-forge/win-64/propcache-0.3.1-py312h31fea79_0.conda
+ sha256: 2824ee1e6597d81e6b2840ab9502031ee873cab57eadf8429788f1d3225e09ad
+ md5: 8a1fef8f5796cf8076c7d1897e28ed5a
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/propcache?source=hash-mapping
+ size: 50573
+ timestamp: 1744525241304
+- conda: https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.27.0-pyhd8ed1ab_0.conda
+ sha256: cd703393ac925c2cbb79c58d141552d5135b106b53ce2201982284f104b4f86a
+ md5: 1099a038989e7f4037d3ce21e8ee9f2c
depends:
- protobuf >=3.19.0,<7.0.0
- - python >=3.9
+ - python >=3.10
license: Apache-2.0
license_family: APACHE
purls:
- pkg:pypi/proto-plus?source=hash-mapping
- size: 42466
- timestamp: 1741676252602
+ size: 43122
+ timestamp: 1765906462817
- conda: https://conda.anaconda.org/conda-forge/osx-64/protobuf-6.31.1-py312h457ac99_2.conda
sha256: f943fdccd095beaa7773615dab762ce846aa1f98a9d7ba0dcb90b85de77bdb21
md5: 4283909633ec7d07839e150f7a52c01b
@@ -5152,6 +6225,34 @@ packages:
- pkg:pypi/protobuf?source=hash-mapping
size: 480805
timestamp: 1760394064571
+- conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-7.2.1-py312hf7082af_0.conda
+ sha256: 5af96e184ddff68c96bfd7b9333e05d0bbcf5bfbac3a33b742ce582cd0608b33
+ md5: 15f4c2db60fbc6b770b69319861cfc2b
+ depends:
+ - python
+ - __osx >=10.13
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
+ size: 233850
+ timestamp: 1767012478963
+- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.1-py312he5662c2_0.conda
+ sha256: cda67d235498657689953fecb614c00dc62412c1fd97d61ec76785ad719e48d0
+ md5: 42ac55610af0bf0ae2a55c0f019c9e84
+ depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/psutil?source=hash-mapping
+ size: 239389
+ timestamp: 1767012412860
- conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda
sha256: 05944ca3445f31614f8c674c560bca02ff05cb51637a96f665cb2bbe496099e5
md5: 8bcf980d2c6b17094961198284b8e862
@@ -5174,46 +6275,65 @@ packages:
purls: []
size: 9389
timestamp: 1726802555076
-- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-22.0.0-py312hb401068_0.conda
- sha256: 2aa3268e84e3fa92c70d172cc5e0dcdeacf571a58eb40544910a1eab5eaaef67
- md5: 4f99ad72cb5935960c38b11f6c923446
- depends:
- - libarrow-acero 22.0.0.*
- - libarrow-dataset 22.0.0.*
- - libarrow-substrait 22.0.0.*
- - libparquet 22.0.0.*
- - pyarrow-core 22.0.0 *_0_*
+- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda
+ sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83
+ md5: 7d9daffbb8d8e0af0f769dbbcd173a54
+ depends:
+ - python >=3.9
+ license: ISC
+ purls:
+ - pkg:pypi/ptyprocess?source=hash-mapping
+ size: 19457
+ timestamp: 1733302371990
+- conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
+ sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0
+ md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pure-eval?source=hash-mapping
+ size: 16668
+ timestamp: 1733569518868
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-23.0.0-py312hb401068_0.conda
+ sha256: 5a86def13d0b89b649f3c9bc07f175b88aa44e84c50468e416b8b83681a5d1b1
+ md5: 4e75d068299eb2fcd0ecc448d99a6880
+ depends:
+ - libarrow-acero 23.0.0.*
+ - libarrow-dataset 23.0.0.*
+ - libarrow-substrait 23.0.0.*
+ - libparquet 23.0.0.*
+ - pyarrow-core 23.0.0 *_0_*
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 26228
- timestamp: 1761649158373
-- conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-22.0.0-py312h2e8e312_0.conda
- sha256: 454c90e1c341335aa08fae2152d4f2b410406dcda76db21cd2f1c2720dac67b1
- md5: 1e2ead2c5717977fb85b9c6809b0896e
- depends:
- - libarrow-acero 22.0.0.*
- - libarrow-dataset 22.0.0.*
- - libarrow-substrait 22.0.0.*
- - libparquet 22.0.0.*
- - pyarrow-core 22.0.0 *_0_*
+ size: 27204
+ timestamp: 1769291581498
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-23.0.0-py312h2e8e312_0.conda
+ sha256: c77b31c6adad7b1919c2e7f4b9e6257a1effc8613b17a540237f9fac0d5c2dfc
+ md5: e1519e126722ddb9406bb63a9393b59c
+ depends:
+ - libarrow-acero 23.0.0.*
+ - libarrow-dataset 23.0.0.*
+ - libarrow-substrait 23.0.0.*
+ - libparquet 23.0.0.*
+ - pyarrow-core 23.0.0 *_0_*
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
license: Apache-2.0
- license_family: APACHE
purls: []
- size: 26662
- timestamp: 1761648571813
-- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-22.0.0-py312hefc66a4_0_cpu.conda
- sha256: 868a3a4a44f8eb77d701c635d4618782a1774a8a6f2d7b4162162ad7b72035f1
- md5: 8f850be5abc40c5d57562024b140db43
+ size: 27620
+ timestamp: 1769291986767
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-core-23.0.0-py312ha422e09_0_cpu.conda
+ sha256: d9dba06f5227ba17b6393175d9fa2e25d25ce7511c9bde0547a5aa40c485e990
+ md5: 465737e64566d5df2bc621fd8d1dcc49
depends:
- __osx >=10.13
- - libarrow 22.0.0.* *cpu
- - libarrow-compute 22.0.0.* *cpu
- - libcxx >=18
+ - libarrow 23.0.0.* *cpu
+ - libarrow-compute 23.0.0.* *cpu
+ - libcxx >=21
- libzlib >=1.3.1,<2.0a0
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -5221,17 +6341,16 @@ packages:
- numpy >=1.21,<3
- apache-arrow-proc * cpu
license: Apache-2.0
- license_family: APACHE
purls:
- pkg:pypi/pyarrow?source=hash-mapping
- size: 4029697
- timestamp: 1761648927880
-- conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-core-22.0.0-py312h85419b5_0_cpu.conda
- sha256: de96d67311385a7f3a23cdc4b49408e65c70e42af9a08bbd8ee6085ae8a26104
- md5: 18679999d9e40f043228de1e00847136
- depends:
- - libarrow 22.0.0.* *cpu
- - libarrow-compute 22.0.0.* *cpu
+ size: 4419434
+ timestamp: 1769291543384
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-core-23.0.0-py312h85419b5_0_cpu.conda
+ sha256: 2cc38a12d517c57204a3af60ca72ed9cb98250e4b98dec4feb8fe5076ac9fb60
+ md5: f72dc289f49117c9bf697dffd7174286
+ depends:
+ - libarrow 23.0.0.* *cpu
+ - libarrow-compute 23.0.0.* *cpu
- libzlib >=1.3.1,<2.0a0
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -5242,22 +6361,21 @@ packages:
- numpy >=1.21,<3
- apache-arrow-proc * cpu
license: Apache-2.0
- license_family: APACHE
purls:
- pkg:pypi/pyarrow?source=hash-mapping
- size: 3504560
- timestamp: 1761648524205
-- conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.1-pyhd8ed1ab_2.conda
- sha256: d06051df66e9ab753683d7423fcef873d78bb0c33bd112c3d5be66d529eddf06
- md5: 09bb17ed307ad6ab2fd78d32372fdd4e
+ size: 3557733
+ timestamp: 1769291505775
+- conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.2-pyhd8ed1ab_0.conda
+ sha256: 2b6e22e97af814153c0a993ea66811de9db05b2a6946dcb97a3953af13c33a80
+ md5: c203d401759f448f9e792974e055bcdc
depends:
- - python >=3.9
+ - python >=3.10
license: BSD-2-Clause
license_family: BSD
purls:
- - pkg:pypi/pyasn1?source=hash-mapping
- size: 62230
- timestamp: 1733217699113
+ - pkg:pypi/pyasn1?source=compressed-mapping
+ size: 63471
+ timestamp: 1769186345593
- conda: https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.4.2-pyhd8ed1ab_0.conda
sha256: 5495061f5d3d6b82b74d400273c586e7c1f1700183de1d2d1688e900071687cb
md5: c689b62552f6b63f32f3322e463f3805
@@ -5345,6 +6463,36 @@ packages:
- pkg:pypi/pygments?source=hash-mapping
size: 889287
timestamp: 1750615908735
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-12.1-py312h4a480f0_0.conda
+ sha256: ecf778f886aaf50db22c0971fb0873f0dbe25663f124bd714bc87b4d0925f534
+ md5: 18a20cb8c3e19f0b3799a48eba5b44aa
+ depends:
+ - __osx >=10.13
+ - libffi >=3.5.2,<3.6.0a0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - setuptools
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyobjc-core?source=hash-mapping
+ size: 487397
+ timestamp: 1763151480498
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-12.1-py312h1993040_0.conda
+ sha256: 3a29ca3cc2044b408447ff86ae0c57ecc3ff805a8fc838525610921024c8521a
+ md5: b6881a919e1bfd66349e2260b163dc7c
+ depends:
+ - __osx >=10.13
+ - libffi >=3.5.2,<3.6.0a0
+ - pyobjc-core 12.1.*
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping
+ size: 375580
+ timestamp: 1763160526695
- conda: https://conda.anaconda.org/conda-forge/osx-64/pyogrio-0.12.1-py312h17ccd7d_0.conda
sha256: d22ac3e5a554878d739bd06dd412c47adfd5552c2f002eea3fcb6bde2c68bcf9
md5: e6452e30b697d485a9929bd1eebcd7a2
@@ -5394,18 +6542,18 @@ packages:
- pkg:pypi/pyopenssl?source=hash-mapping
size: 126393
timestamp: 1760304658366
-- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda
- sha256: 6814b61b94e95ffc45ec539a6424d8447895fef75b0fec7e1be31f5beee883fb
- md5: 6c8979be6d7a17692793114fa26916e8
+- 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
purls:
- - pkg:pypi/pyparsing?source=hash-mapping
- size: 104044
- timestamp: 1758436411254
+ - pkg:pypi/pyparsing?source=compressed-mapping
+ size: 110893
+ timestamp: 1769003998136
- conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.17.2-pyhd8ed1ab_0.conda
sha256: 7cbd50ff7d308007e037817d0cf31540d4b8efa56711dfceab264a482c09a669
md5: 16801a63b53db57e6cfe7f84625e5762
@@ -5608,6 +6756,39 @@ packages:
- pkg:pypi/python-dateutil?source=hash-mapping
size: 233310
timestamp: 1751104122689
+- conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda
+ sha256: df9aa74e9e28e8d1309274648aac08ec447a92512c33f61a8de0afa9ce32ebe8
+ md5: 23029aae904a2ba587daba708208012f
+ depends:
+ - python >=3.9
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/fastjsonschema?source=hash-mapping
+ size: 244628
+ timestamp: 1755304154927
+- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.12-hd8ed1ab_1.conda
+ sha256: 59f17182813f8b23709b7d4cfda82c33b72dd007cb729efa0033c609fbd92122
+ md5: c20172b4c59fbe288fa50cdc1b693d73
+ depends:
+ - cpython 3.12.12.*
+ - python_abi * *_cp312
+ license: Python-2.0
+ purls: []
+ size: 45888
+ timestamp: 1761175248278
+- conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda
+ sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca
+ md5: a61bf9ec79426938ff785eb69dbb1960
+ depends:
+ - python >=3.6
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/python-json-logger?source=hash-mapping
+ size: 13383
+ timestamp: 1677079727691
- conda: https://conda.anaconda.org/conda-forge/osx-64/python-rapidjson-1.23-py312h69bf00f_0.conda
sha256: 322eb64460257d33c79dbcab4888cea50446c21a73662b516e30a621a8db17e0
md5: af9f74887119c227aa0ac3d93efaf80e
@@ -5622,9 +6803,9 @@ packages:
- pkg:pypi/python-rapidjson?source=hash-mapping
size: 201337
timestamp: 1765095915721
-- conda: https://conda.anaconda.org/conda-forge/win-64/python-rapidjson-1.22-py312hbb81ca0_0.conda
- sha256: 4b44ab7431ebaa3ed12d34e893326d23d1ff9098d06b5794fd996e40a14a825c
- md5: 3968dc06e39455110c844885aeefe2e2
+- conda: https://conda.anaconda.org/conda-forge/win-64/python-rapidjson-1.23-py312hbb81ca0_0.conda
+ sha256: d2bdb5bfa655c4c3425c68e13aba3a84c8bd1b81820beb16fd355e54ef7ae1c3
+ md5: 8437527491f72df3e3f584cbb37689d2
depends:
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
@@ -5635,19 +6816,19 @@ packages:
license_family: MIT
purls:
- pkg:pypi/python-rapidjson?source=hash-mapping
- size: 150219
- timestamp: 1761029602178
-- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda
- sha256: e8392a8044d56ad017c08fec2b0eb10ae3d1235ac967d0aab8bd7b41c4a5eaf0
- md5: 88476ae6ebd24f39261e0854ac244f33
+ size: 152792
+ timestamp: 1765095818040
+- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda
+ sha256: 467134ef39f0af2dbb57d78cb3e4821f01003488d331a8dd7119334f4f47bfbd
+ md5: 7ead57407430ba33f681738905278d03
depends:
- - python >=3.9
+ - python >=3.10
license: Apache-2.0
license_family: APACHE
purls:
- - pkg:pypi/tzdata?source=hash-mapping
- size: 144160
- timestamp: 1742745254292
+ - pkg:pypi/tzdata?source=compressed-mapping
+ size: 143542
+ timestamp: 1765719982349
- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda
build_number: 8
sha256: 80677180dd3c22deb7426ca89d6203f1c7f1f256f2d5a94dc210f6e758229809
@@ -5682,6 +6863,108 @@ packages:
- pkg:pypi/pyu2f?source=hash-mapping
size: 36786
timestamp: 1733738704089
+- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda
+ sha256: a7505522048dad63940d06623f07eb357b9b65510a8d23ff32b99add05aac3a1
+ md5: 64cbe4ecbebe185a2261d3f298a60cde
+ depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
+ license: PSF-2.0
+ license_family: PSF
+ purls:
+ - pkg:pypi/pywin32?source=hash-mapping
+ size: 6684490
+ timestamp: 1756487136116
+- conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.15-py312h275cf98_1.conda
+ sha256: 61cc6c2c712ab4d2b8e7a73d884ef8d3262cb80cc93a4aa074e8b08aa7ddd648
+ md5: 66255d136bd0daa41713a334db41d9f0
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.2,<15
+ - vc14_runtime >=14.29.30139
+ - winpty
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pywinpty?source=hash-mapping
+ size: 215371
+ timestamp: 1759557609855
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.3-py312hacf3034_0.conda
+ sha256: 28814df783a5581758d197262d773c92a72c8cedbec3ccadac90adf22daecd25
+ md5: dbc6cfbec3095d84d9f3baab0c6a5c24
+ depends:
+ - __osx >=10.13
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ size: 192483
+ timestamp: 1758892060370
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_0.conda
+ sha256: 54d04e61d17edffeba1e5cad45f10f272a016b6feec1fa8fa6af364d84a7b4fc
+ md5: 4a68f80fbf85499f093101cc17ffbab7
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - yaml >=0.2.5,<0.3.0a0
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/pyyaml?source=hash-mapping
+ size: 180635
+ timestamp: 1758891847871
+- conda: https://conda.anaconda.org/conda-forge/osx-64/pyzmq-27.1.0-py312hb7d603e_0.conda
+ noarch: python
+ sha256: 4e052fa3c4ed319e7bcc441fca09dee4ee4006ac6eb3d036a8d683fceda9304b
+ md5: 81511d0be03be793c622c408c909d6f9
+ depends:
+ - python
+ - __osx >=10.13
+ - libcxx >=19
+ - _python_abi3_support 1.*
+ - cpython >=3.12
+ - zeromq >=4.3.5,<4.4.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/pyzmq?source=hash-mapping
+ size: 191697
+ timestamp: 1757387104297
+- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312hbb5da91_0.conda
+ noarch: python
+ sha256: fd46b30e6a1e4c129045e3174446de3ca90da917a595037d28595532ab915c5d
+ md5: 808d263ec97bbd93b41ca01552b5fbd4
+ depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - zeromq >=4.3.5,<4.3.6.0a0
+ - _python_abi3_support 1.*
+ - cpython >=3.12
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/pyzmq?source=hash-mapping
+ size: 185711
+ timestamp: 1757387025899
- conda: https://conda.anaconda.org/conda-forge/osx-64/qhull-2020.2-h3c5361c_5.conda
sha256: 79d804fa6af9c750e8b09482559814ae18cd8df549ecb80a4873537a5a31e06e
md5: dd1ea9ff27c93db7c01a7b7656bd4ad4
@@ -5735,16 +7018,32 @@ packages:
purls: []
size: 216623
timestamp: 1762397986736
-- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda
- sha256: 53017e80453c4c1d97aaf78369040418dea14cf8f46a2fa999f31bd70b36c877
- md5: 342570f8e02f2f022147a7f841475784
+- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda
+ sha256: 4614af680aa0920e82b953fece85a03007e0719c3399f13d7de64176874b80d5
+ md5: eefd65452dfe7cce476a519bece46704
depends:
+ - __osx >=10.13
- ncurses >=6.5,<7.0a0
license: GPL-3.0-only
license_family: GPL
purls: []
- size: 256712
- timestamp: 1740379577668
+ size: 317819
+ timestamp: 1765813692798
+- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda
+ sha256: 0577eedfb347ff94d0f2fa6c052c502989b028216996b45c7f21236f25864414
+ md5: 870293df500ca7e18bedefa5838a22ab
+ depends:
+ - attrs >=22.2.0
+ - python >=3.10
+ - rpds-py >=0.7.0
+ - typing_extensions >=4.4.0
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/referencing?source=hash-mapping
+ size: 51788
+ timestamp: 1760379115194
- conda: https://conda.anaconda.org/conda-forge/osx-64/regex-2023.12.25-py312h41838bb_0.conda
sha256: b96c99d652448b52dc5ca02d59f730e1302e54c7db785c540bf97ce9398dd8d4
md5: dfc1a4a7f6be6a92360c358c186eac6f
@@ -5772,26 +7071,76 @@ packages:
- pkg:pypi/regex?source=hash-mapping
size: 358546
timestamp: 1703393933800
-- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda
- sha256: 8dc54e94721e9ab545d7234aa5192b74102263d3e704e6d0c8aa7008f2da2a7b
- md5: db0c6b99149880c8ba515cf4abe93ee4
+- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda
+ sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5
+ md5: c65df89a0b2e321045a9e01d1337b182
depends:
+ - python >=3.10
- certifi >=2017.4.17
- charset-normalizer >=2,<4
- idna >=2.5,<4
- - python >=3.9
- urllib3 >=1.21.1,<3
+ - python
constrains:
- chardet >=3.0.2,<6
license: Apache-2.0
license_family: APACHE
purls:
- - pkg:pypi/requests?source=hash-mapping
- size: 59263
- timestamp: 1755614348400
-- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.2.0-pyhcf101f3_0.conda
- sha256: edfb44d0b6468a8dfced728534c755101f06f1a9870a7ad329ec51389f16b086
- md5: a247579d8a59931091b16a1e932bbed6
+ - pkg:pypi/requests?source=compressed-mapping
+ size: 63602
+ timestamp: 1766926974520
+- conda: https://conda.anaconda.org/conda-forge/noarch/returns-0.26.0-pyhe01879c_0.conda
+ sha256: 619962bf637f5cadf967adcec2c5ad1d408418b56830a701aec19e876e5197d0
+ md5: bec7ce42bd4cc803e21c43e9b7fb8860
+ depends:
+ - python >=3.10
+ - typing_extensions >=4.0,<5.0
+ - python
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/returns?source=hash-mapping
+ size: 100610
+ timestamp: 1753812221549
+- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda
+ sha256: 2e4372f600490a6e0b3bac60717278448e323cab1c0fecd5f43f7c56535a99c5
+ md5: 36de09a8d3e5d5e6f4ee63af49e59706
+ depends:
+ - python >=3.9
+ - six
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/rfc3339-validator?source=hash-mapping
+ size: 10209
+ timestamp: 1733600040800
+- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2
+ sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37
+ md5: 912a71cc01012ee38e6b90ddd561e36f
+ depends:
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/rfc3986-validator?source=hash-mapping
+ size: 7818
+ timestamp: 1598024297745
+- conda: https://conda.anaconda.org/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda
+ sha256: 70001ac24ee62058557783d9c5a7bbcfd97bd4911ef5440e3f7a576f9e43bc92
+ md5: 7234f99325263a5af6d4cd195035e8f2
+ depends:
+ - python >=3.9
+ - lark >=1.2.2
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/rfc3987-syntax?source=hash-mapping
+ size: 22913
+ timestamp: 1752876729969
+- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda
+ sha256: 8d9c9c52bb4d3684d467a6e31814d8c9fccdacc8c50eb1e3e5025e88d6d57cb4
+ md5: 83d94f410444da5e2f96e5742b7a4973
depends:
- markdown-it-py >=2.2.0
- pygments >=2.13.0,<3.0.0
@@ -5799,11 +7148,40 @@ packages:
- typing_extensions >=4.0.0,<5.0.0
- python
license: MIT
+ purls:
+ - pkg:pypi/rich?source=compressed-mapping
+ size: 208244
+ timestamp: 1769302653091
+- conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.30.0-py312h8a6388b_0.conda
+ sha256: 3df6f3ad2697f5250d38c37c372b77cc2702b0c705d3d3a231aae9dc9f2eec62
+ md5: 9adbe03b6d1b86cab37fb37709eb4e38
+ depends:
+ - python
+ - __osx >=10.13
+ - python_abi 3.12.* *_cp312
+ constrains:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/rpds-py?source=hash-mapping
+ size: 370624
+ timestamp: 1764543158734
+- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py312hdabe01f_0.conda
+ sha256: faad05e6df2fc15e3ae06fdd71a36e17ff25364777aa4c40f2ec588740d64091
+ md5: 2c51baeda0a355b0a5e7b6acb28cf02d
+ depends:
+ - python
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
+ license: MIT
license_family: MIT
purls:
- - pkg:pypi/rich?source=hash-mapping
- size: 200840
- timestamp: 1760026188268
+ - pkg:pypi/rpds-py?source=hash-mapping
+ size: 243577
+ timestamp: 1764543069837
- conda: https://conda.anaconda.org/conda-forge/noarch/rsa-4.9.1-pyhd8ed1ab_0.conda
sha256: e32e94e7693d4bc9305b36b8a4ef61034e0428f58850ebee4675978e3c2e5acf
md5: 58958bb50f986ac0c46f73b6e290d5fe
@@ -5815,50 +7193,50 @@ packages:
purls:
- pkg:pypi/rsa?source=hash-mapping
size: 31709
- timestamp: 1744825527634
-- conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-py312hfee4f84_0.conda
- sha256: 6a0c1612b9e9957bde60772a856555ca51c1635387d43d479e473aab78e3c4c2
- md5: a1af779e83653754fe8547c7e7f043cc
- depends:
- - __osx >=10.13
- - joblib >=1.3.0
- - libcxx >=19
- - llvm-openmp >=19.1.7
- - numpy >=1.23,<3
+ timestamp: 1744825527634
+- conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py312h47bbdc5_1.conda
+ sha256: 1a03f549462e9c700c93664c663c08a651f6c93c0979384417ac132549c44b98
+ md5: 9c037f2050f55c721704013b87c9724e
+ depends:
+ - python
- numpy >=1.24.1
- - python >=3.12,<3.13.0a0
- - python_abi 3.12.* *_cp312
- scipy >=1.10.0
+ - joblib >=1.3.0
- threadpoolctl >=3.2.0
+ - __osx >=10.13
+ - llvm-openmp >=19.1.7
+ - libcxx >=19
+ - python_abi 3.12.* *_cp312
+ - numpy >=1.23,<3
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/scikit-learn?source=hash-mapping
- size: 9025588
- timestamp: 1765351314138
-- conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.7.2-py312h91ac024_0.conda
- sha256: 22666360c1026cb5d197ca3f5b6e6e7902414cde266b0bb7e8b50f894254348e
- md5: 640f74b19cfe413de754391df630a15a
- depends:
- - joblib >=1.2.0
- - numpy >=1.22.0
- - numpy >=1.23,<3
- - python >=3.12,<3.13.0a0
- - python_abi 3.12.* *_cp312
- - scipy >=1.8.0
- - threadpoolctl >=3.1.0
- - ucrt >=10.0.20348.0
+ size: 9288972
+ timestamp: 1766550860454
+- conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.8.0-np2py312hea30aaf_1.conda
+ sha256: cc3057fd244a13afe94bdb5e3fb6ecbd7ece78559ebdb55a86ae40202ed813a0
+ md5: e5cd920b237e02178573ce47ffa87e8c
+ depends:
+ - python
+ - numpy >=1.24.1
+ - scipy >=1.10.0
+ - joblib >=1.3.0
+ - threadpoolctl >=3.2.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - python_abi 3.12.* *_cp312
+ - numpy >=1.23,<3
license: BSD-3-Clause
license_family: BSD
purls:
- pkg:pypi/scikit-learn?source=hash-mapping
- size: 8736451
- timestamp: 1757433576165
-- conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.16.3-py312he2acf2f_1.conda
- sha256: e37dbb3881e422cd4979882f34f760c0f66ba7a90fcecd95cd55472d41e661d7
- md5: d84da8b0c914cd3071be89b458e2811e
+ size: 8884013
+ timestamp: 1765801252142
+- conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.0-py312ha20b133_1.conda
+ sha256: 6cc34c00442e95199a41bd551a3003ec5f2cac43e8e71158e03462a0dc61b799
+ md5: 9ab1af443bf4a42fd14a2baf21e394b9
depends:
- __osx >=10.13
- libblas >=3.9.0,<4.0a0
@@ -5866,9 +7244,8 @@ packages:
- libcxx >=19
- libgfortran
- libgfortran5 >=14.3.0
- - libgfortran5 >=15.2.0
- liblapack >=3.9.0,<4.0a0
- - numpy <2.6
+ - numpy <2.7
- numpy >=1.23,<3
- numpy >=1.25.2
- python >=3.12,<3.13.0a0
@@ -5877,16 +7254,16 @@ packages:
license_family: BSD
purls:
- pkg:pypi/scipy?source=hash-mapping
- size: 15248796
- timestamp: 1763221288506
-- conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.16.3-py312hd0164fe_1.conda
- sha256: 898caf77968dd262b84568316af5a69a511d573b39addf10739124c6c2909ef8
- md5: a586f151952f8157e00365a564d08914
+ size: 15064644
+ timestamp: 1768800945420
+- conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.0-py312h9b3c559_1.conda
+ sha256: 0f90709b8b8ffa3f3f8a3e023154be77e3fe7dbeda3de3d62479c862111761f2
+ md5: da72702707bdb757ad57637815f165b1
depends:
- libblas >=3.9.0,<4.0a0
- libcblas >=3.9.0,<4.0a0
- liblapack >=3.9.0,<4.0a0
- - numpy <2.6
+ - numpy <2.7
- numpy >=1.23,<3
- numpy >=1.25.2
- python >=3.12,<3.13.0a0
@@ -5897,20 +7274,48 @@ packages:
license: BSD-3-Clause
license_family: BSD
purls:
- - pkg:pypi/scipy?source=hash-mapping
- size: 14804382
- timestamp: 1763221169515
-- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda
- sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863
- md5: 4de79c071274a53dcaf2a8c749d1499e
+ - pkg:pypi/scipy?source=compressed-mapping
+ size: 14843889
+ timestamp: 1768801821822
+- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh5552912_0.conda
+ sha256: 6b1a863b2a3e106e573a6efce2303963c3adc2764dfdbf08c4a35dbe62604988
+ md5: 297e2901b530c5d321c563e66a65db99
depends:
- - python >=3.9
+ - __osx
+ - pyobjc-framework-cocoa
+ - python >=3.10
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/send2trash?source=hash-mapping
+ size: 22409
+ timestamp: 1768402460843
+- conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_0.conda
+ sha256: b64e5cdb66f5d31fcef05b6ed95b8be3e80796528aa8a165428496c0dda3383f
+ md5: 69ba308f1356f39901f5654d82405df3
+ depends:
+ - __win
+ - pywin32
+ - python >=3.10
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/send2trash?source=hash-mapping
+ size: 22700
+ timestamp: 1768402455730
+- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.10.1-pyh332efcf_0.conda
+ sha256: 89d5bb48047e7e27aa52a3a71d6ebf386e5ee4bdbd7ca91d653df9977eca8253
+ md5: cb72cedd94dd923c6a9405a3d3b1c018
+ depends:
+ - python >=3.10
license: MIT
license_family: MIT
purls:
- - pkg:pypi/setuptools?source=hash-mapping
- size: 748788
- timestamp: 1748804951958
+ - pkg:pypi/setuptools?source=compressed-mapping
+ size: 678025
+ timestamp: 1768998156365
- conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.1.2-py312hd8edc82_2.conda
sha256: 0ad376aee3a2fe149443af9345aadeb8ad82a95953bee74b59ca17997da03012
md5: eae9cbc6418de8f26e08f4fb255759e9
@@ -5966,6 +7371,33 @@ packages:
- pkg:pypi/six?source=hash-mapping
size: 18455
timestamp: 1753199211006
+- conda: https://conda.anaconda.org/conda-forge/noarch/sklearn-compat-0.1.5-pyhd8ed1ab_0.conda
+ sha256: 003f33fa9e555ba8adc3da59b8be98ca2a61829da123abb7a9bea2d95b7f6261
+ md5: 5a9f81c5642665ff94675c05096828e4
+ depends:
+ - python >=3.10
+ - scikit-learn >=1.2,<1.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/sklearn-compat?source=hash-mapping
+ size: 24060
+ timestamp: 1766329827681
+- conda: https://conda.anaconda.org/conda-forge/noarch/sklearn-pandas-2.2.0-pyhd8ed1ab_0.tar.bz2
+ sha256: e360f1d15125d2c1fc76dabd31dc057e0f8afbe668ef9e556cefa8935913a87e
+ md5: 3bf01094aaabae0b69ec93bfc6f09c2a
+ depends:
+ - numpy >=1.18.1
+ - pandas >=1.1.4
+ - python >=3.7
+ - scikit-learn >=0.23.0
+ - scipy >=1.5.1
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/sklearn-pandas?source=hash-mapping
+ size: 13351
+ timestamp: 1620483338731
- conda: https://conda.anaconda.org/conda-forge/noarch/smart-open-7.5.0-h0f9f196_0.conda
sha256: 16f0537ce0cc20b265d161765f94a720e5f1a2e1772c27601a3926ecc25c4fc3
md5: 6ef36c6a6ce87cc57cf0094abfa3d35b
@@ -6015,11 +7447,17 @@ packages:
purls: []
size: 67417
timestamp: 1762948090450
-- pypi: https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl
- name: soupsieve
- version: '2.8'
- sha256: 0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c
- requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda
+ sha256: 23b71ecf089967d2900126920e7f9ff18cdcef82dbff3e2f54ffa360243a17ac
+ md5: 18de09b20462742fe093ba39185d9bac
+ depends:
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/soupsieve?source=hash-mapping
+ size: 38187
+ timestamp: 1769034509657
- conda: https://conda.anaconda.org/conda-forge/osx-64/spacy-3.8.11-py312h46c259a_0.conda
sha256: 29502698c59413153b4ea2c2c1f4659dd137aeb7d460ffeb425577c0b4104abd
md5: 4d410080a75074b621d5ab35cebbb75e
@@ -6107,35 +7545,64 @@ packages:
- pkg:pypi/spacy-loggers?source=hash-mapping
size: 21760
timestamp: 1694527261289
-- conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.51.1-h9e4bfbb_0.conda
- sha256: e493fb82215a4f0a9cd8e62193d821b94ba64226860253295335bb59bdbd4d4e
- md5: abe6e51b7529c047912848821ba2f872
+- conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.51.2-h5af3ad2_0.conda
+ sha256: 89fde12f2a5e58edb9bd1497558a77df9c090878971559bcf0c8513e0966795e
+ md5: 9eef7504045dd9eb1be950b2f934d542
depends:
- __osx >=10.13
- - icu >=75.1,<76.0a0
- - libsqlite 3.51.1 h6cc646a_0
+ - libsqlite 3.51.2 hb99441e_0
- libzlib >=1.3.1,<2.0a0
- ncurses >=6.5,<7.0a0
- - readline >=8.2,<9.0a0
+ - readline >=8.3,<9.0a0
license: blessing
purls: []
- size: 174016
- timestamp: 1764359811089
-- conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.51.1-hdb435a2_0.conda
- sha256: 87284f2f3c5da52fa00d694fea32656b9616fcdd425b970cef46c5de0ac636e8
- md5: 2a4cacda574f3377fb7e14630c9c0c73
+ size: 174119
+ timestamp: 1768148271396
+- conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.51.2-hdb435a2_0.conda
+ sha256: 8194c1326f052852dd827f5277ba381228a968e841d410eb18c622cf851b11ba
+ md5: bc9265bd9f30f9ded263cb762a4fc847
depends:
- - libsqlite 3.51.1 hf5d6505_0
+ - libsqlite 3.51.2 hf5d6505_0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: blessing
purls: []
- size: 400644
- timestamp: 1764359585715
-- conda: https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.4-pyhcf101f3_1.conda
- sha256: 4ef08b50c6d49e2b15859967d07b02be64875c5830b4010c70b100a286d1b0f0
- md5: 65d949d575edd0d9b9044bf78f36caa0
+ size: 400812
+ timestamp: 1768148302390
+- conda: https://conda.anaconda.org/conda-forge/noarch/sqlite-fts4-1.0.3-pyhaa4b35c_1.conda
+ sha256: 50045a7946deb292e31c50f9fb487eabc8c3d87e9d912ea073e8add3f9cbda0c
+ md5: 41b9df532996914d8563564e7edc2bdd
+ depends:
+ - python >=3.9
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/sqlite-fts4?source=hash-mapping
+ size: 19130
+ timestamp: 1734711168651
+- conda: https://conda.anaconda.org/conda-forge/noarch/sqlite-utils-3.39-pyhcf101f3_0.conda
+ sha256: 1b838bfc72b65694a02872d0509eae23a3b410a75812118e7822aa0ebbf15346
+ md5: c284acf6e4f73570cedc0de32bd53d8c
+ depends:
+ - python >=3.10
+ - sqlite-fts4
+ - click >=8.3.1
+ - click-default-group >=1.2.3
+ - tabulate
+ - python-dateutil
+ - pluggy
+ - pip
+ - python
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/sqlite-utils?source=hash-mapping
+ size: 124269
+ timestamp: 1764620525880
+- conda: https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.5-pyhcf101f3_0.conda
+ sha256: 20159c171d31cbbde7937f2f74c4cfc78eeaf1e3e9de4c830d0e070c93aa16c4
+ md5: a1db6adc1093f9d5b3e6ffd46dac84b1
depends:
- python >=3.10
- python
@@ -6143,8 +7610,8 @@ packages:
license_family: BSD
purls:
- pkg:pypi/sqlparse?source=hash-mapping
- size: 44161
- timestamp: 1764433038651
+ size: 44238
+ timestamp: 1766143791089
- conda: https://conda.anaconda.org/conda-forge/osx-64/srsly-2.5.2-py312h69bf00f_0.conda
sha256: 8c154164ce76855553b4886db03367b3859f54be9b69e019e8f73910e09100ad
md5: eda738793dba5fecab574a8844843331
@@ -6180,22 +7647,146 @@ packages:
- pkg:pypi/srsly?source=hash-mapping
size: 591687
timestamp: 1763419937212
-- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-hd094cb3_1.conda
- sha256: c31cac57913a699745d124cdc016a63e31c5749f16f60b3202414d071fc50573
- md5: 17c38aaf14c640b85c4617ccb59c1146
+- conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
+ sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41
+ md5: b1b505328da7a6b246787df4b5a49fbc
+ depends:
+ - asttokens
+ - executing
+ - pure_eval
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/stack-data?source=hash-mapping
+ size: 26988
+ timestamp: 1733569565672
+- pypi: https://files.pythonhosted.org/packages/25/ce/308e5e5da57515dd7cab3ec37ea2d5b8ff50bef1fcc8e6d31456f9fae08e/statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl
+ name: statsmodels
+ version: 0.14.6
+ sha256: fe76140ae7adc5ff0e60a3f0d56f4fffef484efa803c3efebf2fcd734d72ecb5
+ requires_dist:
+ - numpy>=1.22.3,<3
+ - scipy>=1.8,!=1.9.2
+ - pandas>=1.4,!=2.1.0
+ - patsy>=0.5.6
+ - packaging>=21.3
+ - cython>=3.0.10 ; extra == 'build'
+ - cython>=3.0.10 ; extra == 'develop'
+ - cython>=3.0.10,<4 ; extra == 'develop'
+ - setuptools-scm[toml]~=8.0 ; extra == 'develop'
+ - matplotlib>=3 ; extra == 'develop'
+ - colorama ; extra == 'develop'
+ - joblib ; extra == 'develop'
+ - jinja2 ; extra == 'develop'
+ - pytest>=7.3.0,<8 ; extra == 'develop'
+ - pytest-randomly ; extra == 'develop'
+ - pytest-xdist ; extra == 'develop'
+ - pytest-cov ; extra == 'develop'
+ - pywinpty ; os_name == 'nt' and extra == 'develop'
+ - flake8 ; extra == 'develop'
+ - isort ; extra == 'develop'
+ - sphinx ; extra == 'docs'
+ - nbconvert ; extra == 'docs'
+ - jupyter-client ; extra == 'docs'
+ - ipykernel ; extra == 'docs'
+ - matplotlib ; extra == 'docs'
+ - nbformat ; extra == 'docs'
+ - numpydoc ; extra == 'docs'
+ - pandas-datareader ; extra == 'docs'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/60/15/3daba2df40be8b8a9a027d7f54c8dedf24f0d81b96e54b52293f5f7e3418/statsmodels-0.14.6-cp312-cp312-win_amd64.whl
+ name: statsmodels
+ version: 0.14.6
+ sha256: b5eb07acd115aa6208b4058211138393a7e6c2cf12b6f213ede10f658f6a714f
+ requires_dist:
+ - numpy>=1.22.3,<3
+ - scipy>=1.8,!=1.9.2
+ - pandas>=1.4,!=2.1.0
+ - patsy>=0.5.6
+ - packaging>=21.3
+ - cython>=3.0.10 ; extra == 'build'
+ - cython>=3.0.10 ; extra == 'develop'
+ - cython>=3.0.10,<4 ; extra == 'develop'
+ - setuptools-scm[toml]~=8.0 ; extra == 'develop'
+ - matplotlib>=3 ; extra == 'develop'
+ - colorama ; extra == 'develop'
+ - joblib ; extra == 'develop'
+ - jinja2 ; extra == 'develop'
+ - pytest>=7.3.0,<8 ; extra == 'develop'
+ - pytest-randomly ; extra == 'develop'
+ - pytest-xdist ; extra == 'develop'
+ - pytest-cov ; extra == 'develop'
+ - pywinpty ; os_name == 'nt' and extra == 'develop'
+ - flake8 ; extra == 'develop'
+ - isort ; extra == 'develop'
+ - sphinx ; extra == 'docs'
+ - nbconvert ; extra == 'docs'
+ - jupyter-client ; extra == 'docs'
+ - ipykernel ; extra == 'docs'
+ - matplotlib ; extra == 'docs'
+ - nbformat ; extra == 'docs'
+ - numpydoc ; extra == 'docs'
+ - pandas-datareader ; extra == 'docs'
+ requires_python: '>=3.9'
+- conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhcf101f3_3.conda
+ sha256: 795e03d14ce50ae409e86cf2a8bd8441a8c459192f97841449f33d2221066fef
+ md5: de98449f11d48d4b52eefb354e2bfe35
+ depends:
+ - python >=3.10
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/tabulate?source=hash-mapping
+ size: 40319
+ timestamp: 1765140047040
+- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda
+ sha256: abd9a489f059fba85c8ffa1abdaa4d515d6de6a3325238b8e81203b913cf65a9
+ md5: 0f9817ffbe25f9e69ceba5ea70c52606
depends:
- - libhwloc >=2.12.1,<2.12.2.0a0
+ - libhwloc >=2.12.2,<2.12.3.0a0
- ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: APACHE
purls: []
- size: 155714
- timestamp: 1762510341121
-- conda: https://conda.anaconda.org/conda-forge/noarch/textstat-0.7.11-pyhd8ed1ab_0.conda
- sha256: a34f7b3cb533200321f96982180ea9372b553853d1d3b27c0e950e39a1f4d169
- md5: 04058d5f24993ebf36f27f3786488b4d
+ size: 155869
+ timestamp: 1767886839029
+- conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda
+ sha256: b375e8df0d5710717c31e7c8e93c025c37fa3504aea325c7a55509f64e5d4340
+ md5: e43ca10d61e55d0a8ec5d8c62474ec9e
+ depends:
+ - __win
+ - pywinpty >=1.1.0
+ - python >=3.10
+ - tornado >=6.1.0
+ - python
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/terminado?source=hash-mapping
+ size: 23665
+ timestamp: 1766513806974
+- conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda
+ sha256: 6b6727a13d1ca6a23de5e6686500d0669081a117736a87c8abf444d60c1e40eb
+ md5: 17b43cee5cc84969529d5d0b0309b2cb
+ depends:
+ - __unix
+ - ptyprocess
+ - python >=3.10
+ - tornado >=6.1.0
+ - python
+ license: BSD-2-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/terminado?source=hash-mapping
+ size: 24749
+ timestamp: 1766513766867
+- conda: https://conda.anaconda.org/conda-forge/noarch/textstat-0.7.12-pyhd8ed1ab_0.conda
+ sha256: b312354db7a9dc6e70afc5a935b4cc19748377c95d9b2869ba9b3d08974973f6
+ md5: b07f3c4d87ab09b9717cd494c0b48ceb
depends:
- cmudict
- nltk
@@ -6206,8 +7797,8 @@ packages:
license_family: MIT
purls:
- pkg:pypi/textstat?source=hash-mapping
- size: 136583
- timestamp: 1762338707590
+ size: 137525
+ timestamp: 1765663971514
- conda: https://conda.anaconda.org/conda-forge/osx-64/thinc-8.3.10-py312h46c259a_0.conda
sha256: 012873ab1c7702599d1da6c5a2d8d715f2fac6092f71e2222795021674001fcc
md5: 34771f873b0779f2a8c7abb3e8e3dee9
@@ -6270,6 +7861,19 @@ packages:
- pkg:pypi/threadpoolctl?source=hash-mapping
size: 23869
timestamp: 1741878358548
+- conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda
+ sha256: 7c803480dbfb8b536b9bf6287fa2aa0a4f970f8c09075694174eb4550a4524cd
+ md5: c0d0b883e97906f7524e2aac94be0e0d
+ depends:
+ - python >=3.10
+ - webencodings >=0.4
+ - python
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/tinycss2?source=compressed-mapping
+ size: 30571
+ timestamp: 1764621508086
- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hf689a15_3.conda
sha256: 0d0b6cef83fec41bc0eb4f3b761c4621b7adfb14378051a8177bd9bb73d26779
md5: bd9f1de651dbd80b51281c694827f78f
@@ -6293,6 +7897,46 @@ packages:
purls: []
size: 3472313
timestamp: 1763055164278
+- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda
+ sha256: 62940c563de45790ba0f076b9f2085a842a65662268b02dd136a8e9b1eaf47a8
+ md5: 72e780e9aa2d0a3295f59b1874e3768b
+ depends:
+ - python >=3.10
+ - python
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/tomli?source=compressed-mapping
+ size: 21453
+ timestamp: 1768146676791
+- conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.5.4-py312h404bc50_0.conda
+ sha256: 44ba44075b754a0da5a476d5cdc6783e290d3f26d355c9fc236abaaefa902d4d
+ md5: fc935f8c37abef2b3cc3b9f15b951c6d
+ depends:
+ - __osx >=11.0
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ license: Apache-2.0
+ license_family: Apache
+ purls:
+ - pkg:pypi/tornado?source=hash-mapping
+ size: 854453
+ timestamp: 1765836802876
+- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.4-py312he06e257_0.conda
+ sha256: 84e1ed65db7e30b3cf6061fe5cf68a7572b1561daf5efc8edfeebb65e16c6ff4
+ md5: 4109bfc75570fe3fd08e2b879d2f76bc
+ depends:
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ license: Apache-2.0
+ license_family: Apache
+ purls:
+ - pkg:pypi/tornado?source=hash-mapping
+ size: 857173
+ timestamp: 1765836731961
- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda
sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40
md5: 9efbfdc37242619130ea42b1cc4ed861
@@ -6304,49 +7948,60 @@ packages:
- pkg:pypi/tqdm?source=hash-mapping
size: 89498
timestamp: 1735661472632
-- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.20.0-pyhefaf540_1.conda
- sha256: 17a1e572939af33d709248170871d4da74f7e32b48f2e9b5abca613e201c6e64
- md5: 23a53fdefc45ba3f4e075cc0997fd13b
+- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda
+ sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959
+ md5: 019a7385be9af33791c989871317e1ed
+ depends:
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/traitlets?source=hash-mapping
+ size: 110051
+ timestamp: 1733367480074
+- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda
+ sha256: 62b359b76ae700ef4a4f074a196bc8953f2188a2784222029d0b3d19cdea59f9
+ md5: 7f66f45c1bb6eb774abf6d2f02ccae9d
depends:
- - typer-slim-standard ==0.20.0 h4daf872_1
+ - typer-slim-standard ==0.21.1 h378290b_0
- python >=3.10
- python
license: MIT
license_family: MIT
purls:
- pkg:pypi/typer?source=hash-mapping
- size: 79829
- timestamp: 1762984042927
-- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.20.0-pyhcf101f3_1.conda
- sha256: 4b5ded929080b91367f128e7299619f6116f08bc77d9924a2f8766e2a1b18161
- md5: 4b02a515f3e882dcfe9cfbf0a1f5cd3a
+ size: 82073
+ timestamp: 1767711188310
+- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda
+ sha256: 9ef3c1b5ea2b355904b94323fc3fc95a37584ef09c6c86aafe472da156aa4d70
+ md5: 3f64f1c7f9a23bead591884648949622
depends:
- python >=3.10
- click >=8.0.0
- typing_extensions >=3.7.4.3
- python
constrains:
- - typer 0.20.0.*
+ - typer 0.21.1.*
- rich >=10.11.0
- shellingham >=1.3.0
license: MIT
license_family: MIT
purls:
- pkg:pypi/typer-slim?source=compressed-mapping
- size: 47951
- timestamp: 1762984042920
-- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.20.0-h4daf872_1.conda
- sha256: 5027768bc9a580c8ffbf25872bb2208c058cbb79ae959b1cf2cc54b5d32c0377
- md5: 37b26aafb15a6687b31a3d8d7a1f04e7
+ size: 48131
+ timestamp: 1767711188309
+- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda
+ sha256: 6a300a4e8d1e30b7926a966e805201ec08d4a5ab97c03a7d0f927996413249d7
+ md5: f08a1f489c4d07cfd4a9983963073480
depends:
- - typer-slim ==0.20.0 pyhcf101f3_1
+ - typer-slim ==0.21.1 pyhcf101f3_0
- rich
- shellingham
license: MIT
license_family: MIT
purls: []
size: 5322
- timestamp: 1762984042927
+ timestamp: 1767711188310
- conda: https://conda.anaconda.org/conda-forge/noarch/types-pytz-2025.2.0.20251108-pyhd8ed1ab_0.conda
sha256: 407eede257ad94d77dae4fd60b1a574d6551aa470d9f5c92ea0262d737a54109
md5: 3121e2dcab1bae684b349509b033aec1
@@ -6376,7 +8031,7 @@ packages:
license: MIT
license_family: MIT
purls:
- - pkg:pypi/typing-inspection?source=compressed-mapping
+ - pkg:pypi/typing-inspection?source=hash-mapping
size: 18923
timestamp: 1764158430324
- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda
@@ -6391,13 +8046,39 @@ packages:
- pkg:pypi/typing-extensions?source=hash-mapping
size: 51692
timestamp: 1756220668932
-- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda
- sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192
- md5: 4222072737ccff51314b5ece9c7d6f5a
+- conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda
+ sha256: 3088d5d873411a56bf988eee774559335749aed6f6c28e07bf933256afb9eb6c
+ md5: f6d7aa696c67756a650e91e15e88223c
+ depends:
+ - python >=3.9
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/typing-utils?source=hash-mapping
+ size: 15183
+ timestamp: 1733331395943
+- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda
+ sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c
+ md5: ad659d0a2b3e47e38d829aa8cad2d610
license: LicenseRef-Public-Domain
purls: []
- size: 122968
- timestamp: 1742727099393
+ size: 119135
+ timestamp: 1767016325805
+- pypi: https://files.pythonhosted.org/packages/94/37/be6dfbfa45719aa82c008fb4772cfe5c46db765a2ca4b6f524a1fdfee4d7/ua_parser-1.0.1-py3-none-any.whl
+ name: ua-parser
+ version: 1.0.1
+ sha256: b059f2cb0935addea7e551251cbbf42e9a8872f86134163bc1a4f79e0945ffea
+ requires_dist:
+ - ua-parser-builtins
+ - pyyaml ; extra == 'yaml'
+ - google-re2 ; extra == 're2'
+ - ua-parser-rs ; extra == 'regex'
+ requires_python: '>=3.9'
+- pypi: https://files.pythonhosted.org/packages/fd/82/aab481e2fc6dee0a13ce35c750e97dbe3f270fb327089c99a8f5e6900e0c/ua_parser_builtins-202601-py3-none-any.whl
+ name: ua-parser-builtins
+ version: '202601'
+ sha256: f5dc93b0f53724dcd5c3eb79edb0aea281cb304a2c02a9436cbeb8cfb8bc4ad1
+ requires_python: '>=3.10'
- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda
sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5
md5: 71b24316859acd00bdb8b38f5e2ce328
@@ -6468,6 +8149,17 @@ packages:
- pkg:pypi/unicodedata2?source=hash-mapping
size: 405140
timestamp: 1763054857048
+- conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda
+ sha256: e0eb6c8daf892b3056f08416a96d68b0a358b7c46b99c8a50481b22631a4dfc0
+ md5: e7cb0f5745e4c5035a460248334af7eb
+ depends:
+ - python >=3.9
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/uri-template?source=hash-mapping
+ size: 23990
+ timestamp: 1733323714454
- conda: https://conda.anaconda.org/conda-forge/osx-64/uriparser-0.9.8-h6aefe2f_0.conda
sha256: fec8e52955fc314580a93dee665349bf430ce6df19019cea3fae7ec60f732bdd
md5: 649890a63cc818b24fbbf0572db221a5
@@ -6491,24 +8183,9 @@ packages:
purls: []
size: 49181
timestamp: 1715010467661
-- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda
- sha256: 4fb9789154bd666ca74e428d973df81087a697dbb987775bc3198d2215f240f8
- md5: 436c165519e140cb08d246a4472a9d6a
- depends:
- - brotli-python >=1.0.9
- - h2 >=4,<5
- - pysocks >=1.5.6,<2.0,!=1.5.7
- - python >=3.9
- - zstandard >=0.18.0
- license: MIT
- license_family: MIT
- purls:
- - pkg:pypi/urllib3?source=hash-mapping
- size: 101735
- timestamp: 1750271478254
-- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.1-pyhd8ed1ab_0.conda
- sha256: a66fc716c9dc6eb048c40381b0d1c5842a1d74bba7ce3d16d80fc0a7232d8644
- md5: fb84f0f6ee8a0ad67213cd1bea98bf5b
+- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda
+ sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a
+ md5: 9272daa869e03efe68833e3dc7a02130
depends:
- backports.zstd >=1.0.0
- brotli-python >=1.2.0
@@ -6518,9 +8195,15 @@ packages:
license: MIT
license_family: MIT
purls:
- - pkg:pypi/urllib3?source=compressed-mapping
- size: 102817
- timestamp: 1765212810619
+ - pkg:pypi/urllib3?source=hash-mapping
+ size: 103172
+ timestamp: 1767817860341
+- pypi: https://files.pythonhosted.org/packages/8f/1c/20bb3d7b2bad56d881e3704131ddedbb16eb787101306887dff349064662/user_agents-2.2.0-py3-none-any.whl
+ name: user-agents
+ version: 2.2.0
+ sha256: a98c4dc72ecbc64812c4534108806fb0a0b3a11ec3fd1eafe807cee5b0a942e7
+ requires_dist:
+ - ua-parser>=0.10.0
- pypi: https://files.pythonhosted.org/packages/fa/6e/3e955517e22cbdd565f2f8b2e73d52528b14b8bcfdb04f62466b071de847/validators-0.35.0-py3-none-any.whl
name: validators
version: 0.35.0
@@ -6528,53 +8211,53 @@ packages:
requires_dist:
- eth-hash[pycryptodome]>=0.7.0 ; extra == 'crypto-eth-addresses'
requires_python: '>=3.9'
-- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_32.conda
- sha256: 82250af59af9ff3c6a635dd4c4764c631d854feb334d6747d356d949af44d7cf
- md5: ef02bbe151253a72b8eda264a935db66
+- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda
+ sha256: 9dc40c2610a6e6727d635c62cced5ef30b7b30123f5ef67d6139e23d21744b3a
+ md5: 1e610f2416b6acdd231c5f573d754a0f
depends:
- - vc14_runtime >=14.42.34433
+ - vc14_runtime >=14.44.35208
track_features:
- vc14
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 18861
- timestamp: 1760418772353
-- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda
- sha256: e3a3656b70d1202e0d042811ceb743bd0d9f7e00e2acdf824d231b044ef6c0fd
- md5: 378d5dcec45eaea8d303da6f00447ac0
+ size: 19356
+ timestamp: 1767320221521
+- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda
+ sha256: 02732f953292cce179de9b633e74928037fa3741eb5ef91c3f8bae4f761d32a5
+ md5: 37eb311485d2d8b2c419449582046a42
depends:
- ucrt >=10.0.20348.0
- - vcomp14 14.44.35208 h818238b_32
+ - vcomp14 14.44.35208 h818238b_34
constrains:
- - vs2015_runtime 14.44.35208.* *_32
+ - vs2015_runtime 14.44.35208.* *_34
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
license_family: Proprietary
purls: []
- size: 682706
- timestamp: 1760418629729
-- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda
- sha256: f3790c88fbbdc55874f41de81a4237b1b91eab75e05d0e58661518ff04d2a8a1
- md5: 58f67b437acbf2764317ba273d731f1d
+ size: 683233
+ timestamp: 1767320219644
+- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda
+ sha256: 878d5d10318b119bd98ed3ed874bd467acbe21996e1d81597a1dbf8030ea0ce6
+ md5: 242d9f25d2ae60c76b38a5e42858e51d
depends:
- ucrt >=10.0.20348.0
constrains:
- - vs2015_runtime 14.44.35208.* *_32
+ - vs2015_runtime 14.44.35208.* *_34
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
license_family: Proprietary
purls: []
- size: 114846
- timestamp: 1760418593847
-- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_32.conda
- sha256: 65cea43f4de99bc81d589e746c538908b2e95aead9042fecfbc56a4d14684a87
- md5: dfc1e5bbf1ecb0024a78e4e8bd45239d
+ size: 115235
+ timestamp: 1767320173250
+- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda
+ sha256: 63ff4ec6e5833f768d402f5e95e03497ce211ded5b6f492e660e2bfc726ad24d
+ md5: f276d1de4553e8fca1dfb6988551ebb4
depends:
- vc14_runtime >=14.44.35208
license: BSD-3-Clause
license_family: BSD
purls: []
- size: 18919
- timestamp: 1760418632059
+ size: 19347
+ timestamp: 1767320221943
- conda: https://conda.anaconda.org/conda-forge/noarch/wasabi-1.1.3-pyhd8ed1ab_1.conda
sha256: fd0635cbd4f76916e2ec39d0c359e930fc377ff6be1ac13cc375cf7fa8a3eebc
md5: fa76741f59d973f2e07d810ee124cb25
@@ -6586,11 +8269,17 @@ packages:
- pkg:pypi/wasabi?source=hash-mapping
size: 28780
timestamp: 1740630860493
-- pypi: https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl
- name: wcwidth
- version: 0.2.14
- sha256: a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1
- requires_python: '>=3.6'
+- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.14-pyhd8ed1ab_0.conda
+ sha256: e311b64e46c6739e2a35ab8582c20fa30eb608da130625ed379f4467219d4813
+ md5: 7e1e5ff31239f9cd5855714df8a3783d
+ depends:
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/wcwidth?source=hash-mapping
+ size: 33670
+ timestamp: 1758622418893
- conda: https://conda.anaconda.org/conda-forge/noarch/weasel-0.4.3-pyhd8ed1ab_0.conda
sha256: a66313ea2b68840fae66a0d71c3668939ab557d1ac76b633745b36d7a02d5206
md5: 86102837379dce9cbe670da42e60d4b2
@@ -6612,6 +8301,51 @@ packages:
- pkg:pypi/weasel?source=hash-mapping
size: 43362
timestamp: 1763083904946
+- conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-25.10.0-pyhd8ed1ab_0.conda
+ sha256: 21f6c8a20fe050d09bfda3fb0a9c3493936ce7d6e1b3b5f8b01319ee46d6c6f6
+ md5: 6639b6b0d8b5a284f027a2003669aa65
+ depends:
+ - python >=3.10
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/webcolors?source=hash-mapping
+ size: 18987
+ timestamp: 1761899393153
+- conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda
+ sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6
+ md5: 2841eb5bfc75ce15e9a0054b98dcd64d
+ depends:
+ - python >=3.9
+ license: BSD-3-Clause
+ license_family: BSD
+ purls:
+ - pkg:pypi/webencodings?source=hash-mapping
+ size: 15496
+ timestamp: 1733236131358
+- conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda
+ sha256: 42a2b61e393e61cdf75ced1f5f324a64af25f347d16c60b14117393a98656397
+ md5: 2f1ed718fcd829c184a6d4f0f2e07409
+ depends:
+ - python >=3.10
+ license: Apache-2.0
+ license_family: APACHE
+ purls:
+ - pkg:pypi/websocket-client?source=hash-mapping
+ size: 61391
+ timestamp: 1759928175142
+- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda
+ sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae
+ md5: bdbd7385b4a67025ac2dba4ef8cb6a8f
+ depends:
+ - packaging >=24.0
+ - python >=3.10
+ license: MIT
+ license_family: MIT
+ purls:
+ - pkg:pypi/wheel?source=hash-mapping
+ size: 31858
+ timestamp: 1769139207397
- conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f
md5: 46e441ba871f524e2b067929da3051c2
@@ -6623,6 +8357,13 @@ packages:
- pkg:pypi/win-inet-pton?source=hash-mapping
size: 9555
timestamp: 1733130678956
+- conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2
+ sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283
+ md5: 1cee351bf20b830d991dbe0bc8cd7dfe
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 1176306
- conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.0.1-py312h80b0991_1.conda
sha256: 2258e7766c912b387b33ff7aa743a6e02359d9faacb5b6a0e824c2b1d7b08522
md5: 44ae6baf386bc605c091fa40bed30434
@@ -6651,30 +8392,30 @@ packages:
- pkg:pypi/wrapt?source=hash-mapping
size: 84777
timestamp: 1762595250957
-- conda: https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.3.0-hd0321b6_0.conda
- sha256: 8769f3f08e78f26fdf6f530efc84a48d05ce7d8dbde405bd81d87e5dc43cb2d9
- md5: 3ad24748832587b79c7a1f96ca874376
+- conda: https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.3.0-ha8d0d41_1.conda
+ sha256: 214dc4f27f9160830bb5b82bdc53a943a052071b0f23b8d4771a2f4e469763c6
+ md5: 21338f14e1226ca108452b770e770455
depends:
- __osx >=10.13
- - icu >=75.1,<76.0a0
- - libcxx >=17
+ - icu >=78.1,<79.0a0
+ - libcxx >=19
license: Apache-2.0
license_family: Apache
purls: []
- size: 1353665
- timestamp: 1728976213621
-- conda: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.3.0-he0c23c2_0.conda
- sha256: bba9bc42593fc8e1da32bc8f810c305ab3fd230689c41b59e6fe77ab79cbe7d7
- md5: 9c600d9aaba64595d0c3561f1b9d700b
+ size: 1358256
+ timestamp: 1766327914262
+- conda: https://conda.anaconda.org/conda-forge/win-64/xerces-c-3.3.0-hac47afa_1.conda
+ sha256: 9583a8fcf01c59b26a4285bc151b6315fd0bd504e1628f004519dc871eb17073
+ md5: d1097e01041cfed41c81f1e3d1f52572
depends:
- ucrt >=10.0.20348.0
- - vc >=14.2,<15
- - vc14_runtime >=14.29.30139
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: Apache
purls: []
- size: 3560268
- timestamp: 1728976534703
+ size: 3598939
+ timestamp: 1766327729418
- conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.12-h8616949_1.conda
sha256: 928f28bd278c7da674b57d71b2e7f4ac4e7c7ce56b0bf0f60d6a074366a2e76d
md5: 47f1b8b4a76ebd0cd22bd7153e54a4dc
@@ -6730,6 +8471,31 @@ packages:
- pkg:pypi/xyzservices?source=hash-mapping
size: 51128
timestamp: 1763813786075
+- conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda
+ sha256: a335161bfa57b64e6794c3c354e7d49449b28b8d8a7c4ed02bf04c3f009953f9
+ md5: a645bb90997d3fc2aea0adf6517059bd
+ depends:
+ - __osx >=10.13
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 79419
+ timestamp: 1753484072608
+- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda
+ sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309
+ md5: 433699cba6602098ae8957a323da2664
+ depends:
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ license: MIT
+ license_family: MIT
+ purls: []
+ size: 63944
+ timestamp: 1753484092156
- pypi: https://files.pythonhosted.org/packages/51/38/347d1fcde4edabd338d5872ca5759ccfb95ff1cf5207dafded981fd08c4f/yara_python-4.5.4.tar.gz
name: yara-python
version: 4.5.4
@@ -6738,38 +8504,70 @@ packages:
name: yara-python
version: 4.5.4
sha256: bf14a8af06b2b980a889bdc3f9e8ccd6e703d2b3fa1c98da5fd3a1c3b551eb47
-- conda: https://conda.anaconda.org/conda-forge/noarch/yarl-1.22.0-pyh7db6752_0.conda
- sha256: b04271f56c68483b411c5465afff73b8eabdea564e942f0e7afed06619272635
- md5: ca3c00c764cee005798a518cba79885c
+- conda: https://conda.anaconda.org/conda-forge/osx-64/yarl-1.22.0-py312hacf3034_0.conda
+ sha256: c030ea7a6f88a54ded713db44420091e1606a04ea57b2cb2b4e00c5c41594929
+ md5: e441d2fc9a075115c08ec037d78d94d9
depends:
+ - __osx >=10.13
- idna >=2.0
- multidict >=4.0
- propcache >=0.2.1
- - python >=3.10
- track_features:
- - yarl_no_compile
+ - python >=3.12,<3.13.0a0
+ - python_abi 3.12.* *_cp312
license: Apache-2.0
license_family: Apache
purls:
- pkg:pypi/yarl?source=hash-mapping
- size: 73066
- timestamp: 1761337117132
-- conda: https://conda.anaconda.org/conda-forge/osx-64/yarl-1.22.0-py312hacf3034_0.conda
- sha256: c030ea7a6f88a54ded713db44420091e1606a04ea57b2cb2b4e00c5c41594929
- md5: e441d2fc9a075115c08ec037d78d94d9
+ size: 143615
+ timestamp: 1761337116037
+- conda: https://conda.anaconda.org/conda-forge/win-64/yarl-1.22.0-py312h05f76fc_0.conda
+ sha256: b622ef03b033a1c3984cb3e47e198370f23bf239c579a0c04f9179237fbb541b
+ md5: d4975947624e265fa594b86ce148a0c1
depends:
- - __osx >=10.13
- idna >=2.0
- multidict >=4.0
- propcache >=0.2.1
- python >=3.12,<3.13.0a0
- python_abi 3.12.* *_cp312
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
license: Apache-2.0
license_family: Apache
purls:
- pkg:pypi/yarl?source=hash-mapping
- size: 143615
- timestamp: 1761337116037
+ size: 141998
+ timestamp: 1761337573480
+- conda: https://conda.anaconda.org/conda-forge/osx-64/zeromq-4.3.5-h6c33b1e_9.conda
+ sha256: 30aa5a2e9c7b8dbf6659a2ccd8b74a9994cdf6f87591fcc592970daa6e7d3f3c
+ md5: d940d809c42fbf85b05814c3290660f5
+ depends:
+ - __osx >=10.13
+ - libcxx >=19
+ - libsodium >=1.0.20,<1.0.21.0a0
+ - krb5 >=1.21.3,<1.22.0a0
+ license: MPL-2.0
+ license_family: MOZILLA
+ purls: []
+ size: 259628
+ timestamp: 1757371000392
+- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h5bddc39_9.conda
+ sha256: 690cf749692c8ea556646d1a47b5824ad41b2f6dfd949e4cdb6c44a352fcb1aa
+ md5: a6c8f8ee856f7c3c1576e14b86cd8038
+ depends:
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - vc >=14.3,<15
+ - vc14_runtime >=14.44.35208
+ - ucrt >=10.0.20348.0
+ - libsodium >=1.0.20,<1.0.21.0a0
+ - krb5 >=1.21.3,<1.22.0a0
+ license: MPL-2.0
+ license_family: MOZILLA
+ purls: []
+ size: 265212
+ timestamp: 1757370864284
- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda
sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae
md5: 30cd29cb87d819caead4d55184c1d115
@@ -6806,48 +8604,29 @@ packages:
purls: []
size: 107439
timestamp: 1727963788936
-- conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.2-h53ec75d_0.conda
- sha256: 9183b2ada178d83ca6f8a66ba2ddcfb5f2476c2e866a4609c1f84dd5f32d796e
- md5: 1e979f90e823b82604ab1da7e76c75e5
+- conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.3.2-h8bce59a_1.conda
+ sha256: 945725769bc668435af1c23733c3c1dba01eb115ad3bad5393c9df2e23de6cfc
+ md5: cdd69480d52f2b871fad1a91324d9942
depends:
- __osx >=10.13
- libcxx >=19
license: Zlib
+ license_family: Other
purls: []
- size: 135199
- timestamp: 1764716055794
-- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.2-h5112557_0.conda
- sha256: 331e63a801efc9aa47e0a7f7be5becc81d9c52c1163308182078108e003c12e5
- md5: 2b4f8712b09b5fd3182cda872ce8482c
+ size: 120585
+ timestamp: 1766077108928
+- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.2-h0261ad2_1.conda
+ sha256: e058e925bed8d9e5227cecc098e02992813046fd89206194435e975a9f6eff56
+ md5: bc2fba648e1e784c549e20bbe1a8af40
depends:
+ - ucrt >=10.0.20348.0
- vc >=14.3,<15
- vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
license: Zlib
+ license_family: Other
purls: []
- size: 134848
- timestamp: 1764715928393
-- conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_1.conda
- sha256: 49241574c373331ae63d9cb4978836db3b2571176a7db81fe48436c84ce38ff4
- md5: e9e25949b682e95535068bae33153ba6
- depends:
- - python
- - cffi >=1.11
- - zstd >=1.5.7,<1.5.8.0a0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - vc >=14.3,<15
- - vc14_runtime >=14.44.35208
- - ucrt >=10.0.20348.0
- - zstd >=1.5.7,<1.6.0a0
- - python_abi 3.12.* *_cp312
- license: BSD-3-Clause
- license_family: BSD
- purls:
- - pkg:pypi/zstandard?source=hash-mapping
- size: 374949
- timestamp: 1762512770373
+ size: 123890
+ timestamp: 1766076739436
- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda
sha256: 47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f
md5: 727109b184d680772e3122f40136d5ca
@@ -6868,6 +8647,7 @@ packages:
- ucrt >=10.0.20348.0
- libzlib >=1.3.1,<2.0a0
license: BSD-3-Clause
+ license_family: BSD
purls: []
size: 388453
timestamp: 1764777142545
diff --git a/pixi.toml b/pixi.toml
index bbdf2aa..5cca1e0 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -17,21 +17,29 @@ pandas = ">=2.3.3,<3"
requests = ">=2.32.5,<3"
plotly = ">=6.5.0,<7"
geoip2 = ">=4.8.0,<5"
-gdal = ">=3.12.0,<4"
+gdal = ">=3.12.1,<4"
pandas-stubs = ">=2.3.3.251201,<3"
-pyarrow = ">=22.0.0,<23"
+pyarrow = ">=23.0.0,<24"
geopandas = ">=1.1.1,<2"
geocoder = ">=1.38.1,<2"
pyrosm = ">=0.6.2,<0.7"
curl = ">=8.17.0,<9"
-textstat = ">=0.7.11,<0.8"
+textstat = ">=0.7.12,<0.8"
nltk = ">=3.9.2,<4"
spacy = ">=3.8.11,<4"
lingua-language-detector = ">=1.3.4,<2"
google-cloud-translate = ">=3.23.0,<4"
+sqlite = ">=3.51.2,<4"
+sklearn-compat = ">=0.1.5,<0.2"
+sklearn-pandas = ">=2.2.0,<3"
+scikit-learn = ">=1.8.0,<2"
+pixi-kernel = ">=0.7.1,<0.8"
+libsqlite = ">=3.51.2,<4"
+sqlite-utils = ">=3.39,<4"
[pypi-dependencies]
scipy = "*"
+statsmodels = "*"
chardet = ">=5.2.0, <6"
charset-normalizer = "*"
ftfy = ">=6.3.1, <7"
@@ -39,3 +47,5 @@ yara-python = ">=4.5.4, <5"
ioc-finder = ">=5.0.3, <6"
validators = ">=0.35.0, <0.36"
deep-translator = ">=1.11.4, <2"
+prince = ">=0.16.5, <0.17"
+user-agents = ">=2.2.0, <3"
diff --git a/script.py b/script.py
index 03c414e..09d46aa 100644
--- a/script.py
+++ b/script.py
@@ -1,13 +1,39 @@
-#%% library init
+# %% [markdown]
+# # Cybersecurity Attacks Dataset - Exploratory Data Analysis
+#
+# This notebook performs comprehensive EDA on a cybersecurity attacks dataset,
+# including IP geolocation analysis, attack pattern visualization, and
+# statistical analysis of network traffic features.
+
+# %% Library Initialization
+# =============================================================================
+# LIBRARY IMPORTS AND CONFIGURATION
+# =============================================================================
+# This cell imports all required libraries and configures the environment:
+# - pandas: Data manipulation and analysis
+# - prince: Multiple Correspondence Analysis (MCA) for categorical data
+# - plotly: Interactive visualizations
+# - geoip2/django: IP geolocation services
+# - sklearn: Machine learning metrics (Matthews correlation)
+# - user_agents: Browser/device detection from User-Agent strings
import pandas as pd
import prince
import plotly.io
import os
import numpy as np
-os.environ[ "GDAL_LIBRARY_PATH" ] = "C:/Users/KalooIna/anaconda3/envs/cybersecurity_attacks/Library/bin/gdal311.dll" # make sure this is the name of your gdal.dll file ( rename it to appropriate version if necessary )
+
+# Optional GDAL configuration for geospatial operations
+# Uncomment and adjust path if needed for your environment
+"""
+os.environ["GDAL_LIBRARY_PATH"] = (
+ "C:/Users/KalooIna/anaconda3/envs/cybersecurity_attacks/Library/bin/gdal311.dll"
+) """
import geoip2.database
-plotly.io.renderers.default = "browser" # plotly settings for browser settings
+
+# Configure Plotly to render charts in the default browser
+plotly.io.renderers.default = "browser"
+
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots as subp
@@ -17,1177 +43,2098 @@
from user_agents import parse
from user_agents import parse as ua_parse
from django.conf import settings
-# django settings for geoIP2
-settings.configure(
- GEOIP_PATH = "data/geolite2_db" ,
- INSTALLED_APPS = [ "django.contrib.gis" ]
+from django.contrib.gis.geoip2 import GeoIP2
+
+# -----------------------------------------------------------------------------
+# Django GeoIP2 Configuration
+# Configure Django settings for IP geolocation using MaxMind GeoLite2 database
+# The database must be downloaded from MaxMind and placed in ./geolite2_db/
+# -----------------------------------------------------------------------------
+if not settings.configured:
+ settings.configure(
+ GEOIP_PATH="./geolite2_db", INSTALLED_APPS=["django.contrib.gis"]
)
django.setup()
-from django.contrib.gis.geoip2 import GeoIP2
+
+# Initialize GeoIP2 lookup service
geoIP = GeoIP2()
-# useful links
+# Reference URLs for GeoIP2 setup and documentation
maxmind_geoip2_db_url = "https://www.maxmind.com/en/accounts/1263991/geoip/downloads"
geoip2_doc_url = "https://geoip2.readthedocs.io/en/latest/"
geoip2_django_doc_url = "https://docs.djangoproject.com/en/5.2/ref/contrib/gis/geoip2/"
-# loadding dataset
-# df = pd.read_csv( "data/cybersecurity_attacks.csv" )
-df = pd.read_csv( "data/df.csv" , sep = "|" , index_col = 0 )
-
-# transform categorical variable to binary variables [ 0 , 1 ]
-def catvar_mapping( col_name , values , name = None) :
- df1 = df.copy( deep = True )
- if name is None :
+# -----------------------------------------------------------------------------
+# Load Dataset
+# The dataset contains network traffic records with attack classifications
+# Columns include: timestamps, IP addresses, ports, protocols, attack types, etc.
+# -----------------------------------------------------------------------------
+df = pd.read_csv("data/df.csv", sep="|", index_col=0)
+
+
+# =============================================================================
+# UTILITY FUNCTIONS
+# =============================================================================
+
+def catvar_mapping(col_name, values, name=None):
+ """
+ Transform categorical variables to binary (0/1) indicator columns.
+
+ This function performs one-hot style encoding for specified categorical values,
+ creating new binary columns that indicate presence/absence of each category.
+
+ Parameters:
+ -----------
+ col_name : str
+ Name of the categorical column to transform
+ values : list
+ List of categorical values to create binary indicators for
+ name : list, optional
+ Custom names for the new binary columns. If None, uses the values.
+ Use ["/"] to replace the original column in-place.
+
+ Returns:
+ --------
+ DataFrame
+ Copy of the dataframe with new binary columns added
+
+ Example:
+ --------
+ # Create "Protocol UDP" and "Protocol ICMP" binary columns
+ df = catvar_mapping("Protocol", ["UDP", "ICMP"])
+ """
+ df1 = df.copy(deep=True)
+ if name is None:
name = values
- elif ( len( name ) == 1 ) and ( name != [ "/" ]) :
- col_target = f"{ col_name } { name[ 0 ]}"
- df1 = df1.rename( columns = { col_name : col_target })
+ elif (len(name) == 1) and (name != ["/"]):
+ col_target = f"{col_name} {name[0]}"
+ df1 = df1.rename(columns={col_name: col_target})
col_name = col_target
- name = [ col_target ]
- col = df1.columns.get_loc( col_name ) + 1
- for val , nm in zip( values , name ) :
- if ( nm == "/" ) :
+ name = [col_target]
+ col = df1.columns.get_loc(col_name) + 1
+ for val, nm in zip(values, name):
+ if nm == "/":
col_target = col_name
- elif ( len( name ) == 1 ) :
+ elif len(name) == 1:
col_target = nm
- else :
- col_target = f"{ col_name } { nm }"
- df1.insert( col , col_target , value = pd.NA )
- bully = df1[ col_name ] == val
- df1.loc[ bully , col_target ] = 1
- df1.loc[ ~ bully , col_target ] = 0
+ else:
+ col_target = f"{col_name} {nm}"
+ if col_target not in df1.columns:
+ df1.insert(col, col_target, value=pd.NA)
+ bully = df1[col_name] == val
+ df1.loc[bully, col_target] = 1
+ df1.loc[~bully, col_target] = 0
col += 1
return df1
-
-# pieichart generator for a column
-def piechart_col( col , names = None ) :
- if names is None :
- fig = px.pie(
- values = df[ col ].value_counts() ,
- names = df[ col ].value_counts().index ,
- )
+
+
+def piechart_col(col, names=None):
+ """
+ Generate an interactive pie chart for a categorical column.
+
+ Parameters:
+ -----------
+ col : str
+ Column name to visualize
+ names : list, optional
+ Custom labels for pie chart segments. If None, uses actual values.
+ """
+ if names is None:
+ fig = px.pie(
+ values=df[col].value_counts(),
+ names=df[col].value_counts().index,
+ title=f"Distribution of {col}",
+ )
+ fig.update_traces(
+ textposition='inside',
+ textinfo='percent+label',
+ hovertemplate="%{label}
Count: %{value}
Percentage: %{percent}"
+ )
fig.show()
- else :
- fig = px.pie(
- values = df[ col ].value_counts() ,
- names = names ,
- )
+ else:
+ fig = px.pie(
+ values=df[col].value_counts(),
+ names=names,
+ title=f"Distribution of {col}",
+ )
+ fig.update_traces(
+ textposition='inside',
+ textinfo='percent+label',
+ hovertemplate="%{label}
Count: %{value}
Percentage: %{percent}"
+ )
fig.show()
-# transforms IP addresses to infos : longitude , latitude , country , city
-def ip_to_coords( ip_address ) :
- print( ip_address )
- ret = pd.Series( dtype = object )
- try :
- res = geoIP.geos( ip_address ).wkt
- lon , lat = res.replace( "(" , "" ).replace( ")" , "" ).split()[ 1 : ]
- ret = pd.concat([ ret , pd.Series([ lat , lon ])] , ignore_index = True )
- except :
- ret = pd.concat([ ret , pd.Series([ pd.NA , pd.NA ])] , ignore_index = True )
- try :
- res = geoIP.city( ip_address )
- ret = pd.concat([ ret , pd.Series([ res[ "country_name" ] , res[ "city" ]])] , ignore_index = True )
- except :
- ret = pd.concat([ ret , pd.Series([ pd.NA , pd.NA ])] , ignore_index = True )
+
+def ip_to_coords(ip_address):
+ """
+ Convert an IP address to geographic coordinates and location info.
+
+ Uses MaxMind GeoIP2 database to lookup geographic information for IP addresses.
+
+ Parameters:
+ -----------
+ ip_address : str
+ IPv4 or IPv6 address to geolocate
+
+ Returns:
+ --------
+ pd.Series
+ Series containing [latitude, longitude, country_name, city]
+ Returns NA values for any fields that cannot be resolved
+ """
+ print(ip_address)
+ ret = pd.Series(dtype=object)
+ try:
+ res = geoIP.geos(ip_address).wkt
+ lon, lat = res.replace("(", "").replace(")", "").split()[1:]
+ ret = pd.concat([ret, pd.Series([lat, lon])], ignore_index=True)
+ except:
+ ret = pd.concat([ret, pd.Series([pd.NA, pd.NA])], ignore_index=True)
+ try:
+ res = geoIP.city(ip_address)
+ ret = pd.concat(
+ [ret, pd.Series([res["country_name"], res["city"]])], ignore_index=True
+ )
+ except:
+ ret = pd.concat([ret, pd.Series([pd.NA, pd.NA])], ignore_index=True)
return ret
-
-
-#%% EDA
-
-# renaming columns
-df = df.rename( columns = {
- "Timestamp" : "date" ,
- "Source Port" : "Source Port ephemeral" ,
- "Destination Port" : "Destination Port ephemeral" ,
- "Alerts/Warnings" : "Alert Trigger" ,
- })
-df = df.drop( "User Information" , axis = 1 )
-print( df.describe())
-
-# generation of crosstables for cat variables
+
+
+# %% [markdown]
+# ## Exploratory Data Analysis (EDA)
+# This section performs initial data exploration:
+# - Column renaming for clarity
+# - Missing value analysis
+# - Target variable distribution (Attack Type)
+# - Temporal distribution of attacks
+
+# %% EDA - Data Preparation and Overview
+# =============================================================================
+# DATA PREPARATION
+# =============================================================================
+# Rename columns for better readability and consistency
+# - "Timestamp" -> "date" for temporal analysis
+# - Port columns renamed to indicate ephemeral port analysis
+# - Alerts/Warnings -> Alert Trigger for binary encoding
+df = df.rename(
+ columns={
+ "Timestamp": "date",
+ "Source Port": "Source Port ephemeral",
+ "Destination Port": "Destination Port ephemeral",
+ "Alerts/Warnings": "Alert Trigger",
+ }
+)
+
+# Display summary statistics for numerical columns
+print("=" * 60)
+print("DATASET SUMMARY STATISTICS")
+print("=" * 60)
+print(df.describe())
+
+# -----------------------------------------------------------------------------
+# Cross-tabulation utility function
+# Used to analyze relationships between categorical variables
+# -----------------------------------------------------------------------------
crosstabs = {}
-def crosstab_col( col ,target , name_col , name_target ) :
- name_tab = f"{ name_col }_x_{ name_target }"
- crosstabs[ name_tab ] = pd.crosstab( df[ target ] , df[ col ] , normalize = True ) * 100
-
-# NAs
-df_s0 = df.shape[ 0 ]
-for col in df.columns :
- NA_n = sum( df[ col ].isna())
- if NA_n > 0 :
- print( f"number of NAs in { col } = { NA_n } / { df_s0 } = { NA_n / df_s0 } " )
-
-# Attack Type !!!! TARGET VARIABLE !!!!
-col_name = "Attack Type"
-print( df[ col_name ].value_counts())
-piechart_col( col_name )
-# date
+
+def crosstab_col(col, target, name_col, name_target):
+ """
+ Create a normalized cross-tabulation between two categorical columns.
+
+ Parameters:
+ -----------
+ col : str
+ Column name for the independent variable
+ target : str
+ Column name for the dependent/target variable
+ name_col, name_target : str
+ Short names for labeling the crosstab result
+ """
+ name_tab = f"{name_col}_x_{name_target}"
+ crosstabs[name_tab] = pd.crosstab(df[target], df[col], normalize=True) * 100
+
+
+# -----------------------------------------------------------------------------
+# Missing Value Analysis
+# Identify columns with missing data and their percentages
+# -----------------------------------------------------------------------------
+print("\n" + "=" * 60)
+print("MISSING VALUE ANALYSIS")
+print("=" * 60)
+df_s0 = df.shape[0]
+for col in df.columns:
+ NA_n = sum(df[col].isna())
+ if NA_n > 0:
+ print(f"Missing values in {col}: {NA_n:,} / {df_s0:,} ({100*NA_n/df_s0:.2f}%)")
+
+# -----------------------------------------------------------------------------
+# TARGET VARIABLE ANALYSIS: Attack Type
+# This is the primary classification target with 3 classes:
+# - Malware: Malicious software attacks
+# - Intrusion: Unauthorized access attempts
+# - DDoS: Distributed Denial of Service attacks
+# -----------------------------------------------------------------------------
+print("\n" + "=" * 60)
+print("TARGET VARIABLE: Attack Type Distribution")
+print("=" * 60)
+col_name = "Attack Type"
+print(df[col_name].value_counts())
+piechart_col(col_name)
+
+# -----------------------------------------------------------------------------
+# TEMPORAL ANALYSIS: Attack Distribution Over Time
+# Analyze when attacks occurred to identify patterns or trends
+# -----------------------------------------------------------------------------
+print("\n" + "=" * 60)
+print("TEMPORAL DISTRIBUTION")
+print("=" * 60)
col_name = "date"
-df[ col_name ] = pd.to_datetime( df[ col_name ])
-date_end = max( df[ col_name ])
-date_start = min( df[ col_name ])
-print( f"dates go from { date_start } and { date_end }" )
-fig = px.histogram( df , col_name )
+df[col_name] = pd.to_datetime(df[col_name])
+date_end = max(df[col_name])
+date_start = min(df[col_name])
+print(f"Dataset time range: {date_start} to {date_end}")
+print(f"Duration: {(date_end - date_start).days} days")
+
+fig = px.histogram(
+ df,
+ x=col_name,
+ title="Distribution of Cyber Attacks Over Time",
+ labels={"date": "Date", "count": "Number of Attacks"},
+ color_discrete_sequence=["#636EFA"]
+)
+fig.update_layout(
+ xaxis_title="Date",
+ yaxis_title="Number of Attacks",
+ showlegend=False
+)
fig.show()
-#%% IP address
+# %% [markdown]
+# ## IP Address Geolocation Analysis
+# This section:
+# - Extracts geographic information from Source and Destination IP addresses
+# - Visualizes global distribution of attack origins and targets
+# - Analyzes proxy usage patterns in the network traffic
+
+# %% IP Address Geolocation
+# =============================================================================
+# IP ADDRESS GEOLOCATION EXTRACTION
+# =============================================================================
+# Convert IP addresses to geographic coordinates using MaxMind GeoIP2
+# This enables geographic visualization and analysis of attack patterns
+
+print("=" * 60)
+print("IP ADDRESS GEOLOCATION PROCESSING")
+print("=" * 60)
i = 2
-for destsource in [ "Source" , "Destination" ] :
- col = df.columns.get_loc( f"{ destsource } IP Address" ) + 1
- df.insert( col , f"{ destsource } IP latitude" , value = pd.NA )
- df.insert( col + 1 , f"{ destsource } IP longitude" , value = pd.NA )
- df.insert( col + 2 , f"{ destsource } IP country" , value = pd.NA )
- df.insert( col + 3 , f"{ destsource } IP city" , value = pd.NA )
- df[[ f"{ destsource } IP latitude" , f"{ destsource } IP longitude" , f"{ destsource } IP country" , f"{ destsource } IP city" ]] = df[ f"{ destsource } IP Address" ].apply( lambda x : ip_to_coords( x ))
-
-## IP address map graph
+for destsource in ["Source", "Destination"]:
+ geo_columns = [
+ f"{destsource} IP latitude",
+ f"{destsource} IP longitude",
+ f"{destsource} IP country",
+ f"{destsource} IP city",
+ ]
+
+ # Skip geolocation if already processed (columns exist)
+ if all(col in df.columns for col in geo_columns):
+ print(f"{destsource} IP geolocation already processed - skipping")
+ continue
+
+ print(f"Processing {destsource} IP addresses...")
+ col = df.columns.get_loc(f"{destsource} IP Address") + 1
+
+ # Insert new columns for geographic data
+ for i, geo_col in enumerate(geo_columns):
+ if geo_col not in df.columns:
+ df.insert(col + i, geo_col, value=pd.NA)
+
+ # Apply geolocation lookup to each IP address
+ geo_data = df[f"{destsource} IP Address"].apply(ip_to_coords)
+ geo_df = pd.DataFrame(geo_data.tolist(), index=df.index)
+
+ df[geo_columns[0]] = geo_df[0] # Latitude
+ df[geo_columns[1]] = geo_df[1] # Longitude
+ df[geo_columns[2]] = geo_df[2] # Country
+ df[geo_columns[3]] = geo_df[3] # City
+
+# -----------------------------------------------------------------------------
+# GLOBAL IP DISTRIBUTION MAP
+# Orthographic projection showing attack source and destination locations
+# Left globe: Source IPs (where attacks originate)
+# Right globe: Destination IPs (attack targets)
+# -----------------------------------------------------------------------------
fig = subp(
- rows = 1 ,
- cols = 2 ,
- specs = [[
- { "type" : "scattergeo" } ,
- { "type" : "scattergeo" } ,
- ]] ,
- subplot_titles = (
- "Source IP locations" ,
- "Destination IP locations"
- )
- )
+ rows=1,
+ cols=2,
+ specs=[
+ [
+ {"type": "scattergeo"},
+ {"type": "scattergeo"},
+ ]
+ ],
+ subplot_titles=(
+ "Attack Origin Locations (Source IPs)",
+ "Attack Target Locations (Destination IPs)"
+ ),
+)
+
+# Source IP locations - Blue markers
fig.add_trace(
go.Scattergeo(
- lat = df[ "Source IP latitude" ] ,
- lon = df[ "Source IP longitude" ] ,
- mode = "markers" ,
- marker = {
- "size" : 5 ,
- "color" : "blue"
- }
- ) ,
- row = 1 ,
- col = 1
- )
+ lat=df["Source IP latitude"],
+ lon=df["Source IP longitude"],
+ mode="markers",
+ marker={"size": 5, "color": "blue", "opacity": 0.6},
+ name="Source IPs",
+ hovertemplate="Attack Origin
Lat: %{lat:.2f}
Lon: %{lon:.2f}"
+ ),
+ row=1,
+ col=1,
+)
+
+# Destination IP locations - Blue markers
fig.add_trace(
go.Scattergeo(
- lat = df[ "Destination IP latitude" ] ,
- lon = df[ "Destination IP longitude" ] ,
- mode = "markers" ,
- marker = {
- "size" : 5 ,
- "color" : "blue"
- }
- ) ,
- row = 1 ,
- col = 2
- )
+ lat=df["Destination IP latitude"],
+ lon=df["Destination IP longitude"],
+ mode="markers",
+ marker={"size": 5, "color": "blue", "opacity": 0.6},
+ name="Destination IPs",
+ hovertemplate="Attack Target
Lat: %{lat:.2f}
Lon: %{lon:.2f}"
+ ),
+ row=1,
+ col=2,
+)
+
fig.update_geos(
- projection_type = "orthographic" ,
- showcountries = True ,
- showland = True ,
- # landcolor = "LightGreen"
+ projection_type="orthographic",
+ showcountries=True,
+ showland=True,
+ landcolor="lightgray",
+ countrycolor="white",
+ oceancolor="lightblue",
+ showocean=True
)
fig.update_layout(
- height = 750 ,
- margin = {
- "r" : 0 ,
- "t" : 80 ,
- "l" : 0 ,
- "b" : 0
- } ,
- title_text = "IP Address Locations" ,
- title_x = 0.5
+ height=750,
+ margin={"r": 0, "t": 80, "l": 0, "b": 0},
+ title_text="Global Distribution of Cyber Attack Traffic",
+ title_x=0.5,
+ title_font_size=18,
+ showlegend=True,
+ legend=dict(
+ orientation="h",
+ yanchor="bottom",
+ y=-0.1,
+ xanchor="center",
+ x=0.5
+ )
)
fig.show()
-# Proxy Information
+# -----------------------------------------------------------------------------
+# PROXY INFORMATION COLUMNS
+# Prepare columns for proxy IP geolocation data
+# Proxies may be used to mask the true origin of attacks
+# -----------------------------------------------------------------------------
col_name = "Proxy Information"
-# print( df[ col_name ].value_counts())
-col = df.columns.get_loc( col_name )
-df.insert( col + 1 , "Proxy latitude" , value = pd.NA )
-df.insert( col + 2 , "Proxy longitude" , value = pd.NA )
-df.insert( col + 3 , "Proxy country" , value = pd.NA )
-df.insert( col + 4 , "Proxy city" , value = pd.NA )
-df[[ "Proxy latitude" , "Proxy longitude" , "Proxy country" , "Proxy city" ]] = df[ "Proxy Information" ].apply( lambda x : ip_to_coords( x ))
-
-def sankey_diag_IPs( ntop ) :
+col = df.columns.get_loc(col_name)
+
+for i, new_col in enumerate(
+ ["Proxy latitude", "Proxy longitude", "Proxy country", "Proxy city"], start=1
+):
+ if new_col not in df.columns:
+ df.insert(col + i, new_col, value=pd.NA)
+
+
+def sankey_diag_IPs(ntop):
+ """
+ Create a Sankey diagram showing traffic flow between Source, Proxy, and Destination countries.
+
+ This visualization shows how network traffic flows geographically:
+ - Left nodes: Source IP countries (where traffic originates)
+ - Middle nodes: Proxy countries (intermediate routing points)
+ - Right nodes: Destination IP countries (final targets)
+
+ Parameters:
+ -----------
+ ntop : int
+ Number of top countries to display (others grouped as "other")
+
+ Returns:
+ --------
+ DataFrame
+ Aggregated IP flow counts grouped by source, proxy, and destination
+ """
IPs_col = {}
- labels = pd.Series( dtype = "string" )
- for IPid , dfcol in zip([ "SIP" , "DIP" , "PIP" ] , [ "Source IP country" , "Destination IP country" , "Proxy country" ]) :
- IPs_col[ IPid ] = df[ dfcol ].copy( deep = True )
- IPs_col[ f"{ IPid }labs" ] = pd.Series( IPs_col[ IPid ].value_counts().index[ : ntop ])
- bully = ( IPs_col[ IPid ].isin( IPs_col[ f"{IPid}labs" ]) | IPs_col[ IPid ].isna())
- IPs_col[ IPid ].loc[ ~ bully ] = "other"
- IPs_col[ f"{ IPid }labs" ] = f"{ IPid } " + pd.concat([ IPs_col[ f"{ IPid }labs" ] , pd.Series([ "other" ])])
- labels = pd.concat([ labels , IPs_col[ f"{ IPid }labs" ]])
- labels = list( labels.reset_index( drop = True ))
-
- aggregIPs = pd.DataFrame({
- "SIP" : IPs_col[ "SIP" ] ,
- "PIP" : IPs_col[ "PIP" ] ,
- "DIP" : IPs_col[ "DIP" ] ,
- })
- aggregIPs = aggregIPs.groupby( by = [
- "SIP" ,
- "PIP" ,
- "DIP"
- ]).size().to_frame( "count" )
+ labels = pd.Series(dtype="string")
+
+ # Process each IP type: Source (SIP), Destination (DIP), Proxy (PIP)
+ for IPid, dfcol in zip(
+ ["SIP", "DIP", "PIP"],
+ ["Source IP country", "Destination IP country", "Proxy country"],
+ ):
+ IPs_col[IPid] = df[dfcol].copy(deep=True)
+ IPs_col[f"{IPid}labs"] = pd.Series(IPs_col[IPid].value_counts().index[:ntop])
+ bully = IPs_col[IPid].isin(IPs_col[f"{IPid}labs"]) | IPs_col[IPid].isna()
+ IPs_col[IPid].loc[~bully] = "other"
+ IPs_col[f"{IPid}labs"] = f"{IPid} " + pd.concat(
+ [IPs_col[f"{IPid}labs"], pd.Series(["other"])]
+ )
+ labels = pd.concat([labels, IPs_col[f"{IPid}labs"]])
+ labels = list(labels.reset_index(drop=True))
+
+ # Aggregate traffic flows between countries
+ aggregIPs = pd.DataFrame(
+ {
+ "SIP": IPs_col["SIP"],
+ "PIP": IPs_col["PIP"],
+ "DIP": IPs_col["DIP"],
+ }
+ )
+ aggregIPs = aggregIPs.groupby(by=["SIP", "PIP", "DIP"]).size().to_frame("count")
- # computation of source , target , value
+ # Build Sankey diagram links
source = []
target = []
value = []
nlvl = aggregIPs.index.nlevels
- for idx , row in aggregIPs.iterrows() :
+ for idx, row in aggregIPs.iterrows():
row_labs = []
- if ( nlvl == 1 ) :
- row_labs.append( f"{ aggregIPs.index.name } { idx }" )
- else :
- for i , val in enumerate( idx ) :
- row_labs.append( f"{ aggregIPs.index.names[ i ] } { val }" )
- for i in range( 0 , nlvl - 1 ) :
- source.append( labels.index( row_labs[ i ]))
- target.append( labels.index( row_labs[ i + 1 ]))
- value.append( row.item() )
-
- # plot the sankey diagram
- n = len( labels )
+ if nlvl == 1:
+ row_labs.append(f"{aggregIPs.index.name} {idx}")
+ else:
+ for i, val in enumerate(idx):
+ row_labs.append(f"{aggregIPs.index.names[i]} {val}")
+ for i in range(0, nlvl - 1):
+ source.append(labels.index(row_labs[i]))
+ target.append(labels.index(row_labs[i + 1]))
+ value.append(row.item())
+
+ # Create Sankey diagram with Inferno color scale
+ n = len(labels)
colors = px.colors.sample_colorscale(
- px.colors.sequential.Inferno ,
- [ i / ( n - 1 ) for i in range( n )]
- )
- fig = go.Figure( data = [ go.Sankey(
- node = dict(
- pad = 15 ,
- thickness = 20 ,
- line = dict(
- color = "rgba( 0 , 0 , 0 , 0.1 )" ,
- width = 0.5
- ) ,
- label = labels ,
- color = colors ,
- ) ,
- link = dict(
- source = source ,
- target = target ,
- value = value
- ))])
+ px.colors.sequential.Inferno, [i / (n - 1) for i in range(n)]
+ )
+ fig = go.Figure(
+ data=[
+ go.Sankey(
+ node=dict(
+ pad=15,
+ thickness=20,
+ line=dict(color="rgba(0, 0, 0, 0.1)", width=0.5),
+ label=labels,
+ color=colors,
+ hovertemplate="%{label}
Total flows: %{value}"
+ ),
+ link=dict(
+ source=source,
+ target=target,
+ value=value,
+ hovertemplate="Flow
From: %{source.label}
To: %{target.label}
Count: %{value}"
+ ),
+ )
+ ]
+ )
fig.update_layout(
- title_text = "Sankey Diagram" ,
- # font_family = "Courier New" ,
- # font_color = "blue" ,
- font_size = 20 ,
- title_font_family = "Avenir" ,
- title_font_color = "black",
- )
+ title_text="Network Traffic Flow: Source → Proxy → Destination Countries",
+ title_font_size=18,
+ font_size=14,
+ title_font_family="Avenir",
+ title_font_color="black",
+ annotations=[
+ dict(x=0.01, y=1.05, text="Source Countries", showarrow=False, font_size=12),
+ dict(x=0.5, y=1.05, text="Proxy Countries", showarrow=False, font_size=12),
+ dict(x=0.99, y=1.05, text="Destination Countries", showarrow=False, font_size=12),
+ ]
+ )
fig.show()
-
+
return aggregIPs
-aggregIPs = sankey_diag_IPs( 10 )
-#%% Source Port
+
+# Generate IP traffic flow Sankey diagram with top 10 countries
+print("\n" + "=" * 60)
+print("IP TRAFFIC FLOW ANALYSIS")
+print("=" * 60)
+aggregIPs = sankey_diag_IPs(10)
+
+# %% [markdown]
+# ## Network Protocol and Port Analysis
+# This section analyzes network layer characteristics:
+# - Port classification (ephemeral vs registered)
+# - Protocol distribution (TCP, UDP, ICMP)
+# - Packet types and traffic categories
+
+# %% Source and Destination Port Analysis
+# =============================================================================
+# PORT ANALYSIS: EPHEMERAL vs REGISTERED PORTS
+# =============================================================================
+# Port Classification:
+# - Ephemeral ports (49152-65535): Dynamically assigned for outbound connections
+# - Registered ports (1024-49151): Assigned to specific services
+# - Well-known ports (0-1023): Reserved for common services (HTTP, SSH, etc.)
+#
+# Binary encoding: 1 = ephemeral port, 0 = registered/well-known port
+
+print("\n" + "=" * 60)
+print("PORT ANALYSIS")
+print("=" * 60)
+
+# Source Port Classification
col_name = "Source Port ephemeral"
-## create boolean value for ephemeral and assigned ports
-"""
- ephemeral port > 49151 = 1
- assigned/registered port <= 49151 = 0
-"""
-bully = df[ col_name ] > 49151
-df.loc[ bully , col_name ] = 1
-df.loc[ ~ bully , col_name ] = 0
-print( df[ col_name ].value_counts())
-# piechart_col( col_name )
-crosstab_col( col_name , "Attack Type" , "sourceport" , "attacktype" )
-
-# Destination Port
+print(f"\n--- {col_name} ---")
+print("Converting to binary: 1 = ephemeral (>49151), 0 = registered/well-known")
+bully = df[col_name] > 49151
+df.loc[bully, col_name] = 1
+df.loc[~bully, col_name] = 0
+print(df[col_name].value_counts())
+crosstab_col(col_name, "Attack Type", "sourceport", "attacktype")
+
+# Destination Port Classification
col_name = "Destination Port ephemeral"
-## create boolean value for ephemeral and assigned ports
-"""
- ephemeral port > 49151 = 1
- assigned/registered port <= 49151 = 0
-"""
-bully = df[ col_name ] > 49151
-df.loc[ bully , col_name ] = 1
-df.loc[ ~ bully , col_name ] = 0
-print( df[ col_name ].value_counts())
-# piechart_col( col_name )
-crosstab_col( col_name , "Attack Type" , "destport" , "attacktype" )
-
-# Protocol
+print(f"\n--- {col_name} ---")
+print("Converting to binary: 1 = ephemeral (>49151), 0 = registered/well-known")
+bully = df[col_name] > 49151
+df.loc[bully, col_name] = 1
+df.loc[~bully, col_name] = 0
+print(df[col_name].value_counts())
+crosstab_col(col_name, "Attack Type", "destport", "attacktype")
+
+# =============================================================================
+# PROTOCOL ANALYSIS
+# =============================================================================
+# Network protocols observed in the traffic:
+# - TCP: Connection-oriented, reliable delivery (web, email, file transfer)
+# - UDP: Connectionless, fast but unreliable (DNS, streaming, gaming)
+# - ICMP: Control messages and diagnostics (ping, traceroute)
+#
+# Binary encoding creates indicator columns for each protocol
+
+print("\n" + "=" * 60)
+print("PROTOCOL ANALYSIS")
+print("=" * 60)
+
col_name = "Protocol"
-"""
- UDP = { 1 if Protocol = "UDP" , 0 otherwise }
- TCP = { 1 if Protocol = "TCP" , 0 otherwise }
- IMCP = [ 0 , 0 ]
-"""
-print( df[ col_name ].value_counts())
-piechart_col( col_name )
-df = catvar_mapping( col_name , [ "UDP" , "ICMP" ])
-### cross table Protocol x Attack Type
-crosstab_col( col_name , "Attack Type" , col_name , "attacktype" )
-
-# Packet length
-fig = px.histogram( df , "Packet Length" )
+print(df[col_name].value_counts())
+piechart_col(col_name)
+
+# Create binary indicator columns for protocols
+if "Protocol UDP" not in df.columns:
+ df = catvar_mapping(col_name, ["UDP", "ICMP"])
+crosstab_col(col_name, "Attack Type", col_name, "attacktype")
+
+# =============================================================================
+# PACKET LENGTH DISTRIBUTION
+# =============================================================================
+# Packet length can indicate:
+# - Small packets: Control messages, ACKs, probes
+# - Medium packets: Typical web traffic
+# - Large packets: File transfers, streaming data
+# - Unusual sizes: Potential attack indicators
+
+print("\n" + "=" * 60)
+print("PACKET LENGTH ANALYSIS")
+print("=" * 60)
+
+fig = px.histogram(
+ df,
+ x="Packet Length",
+ title="Distribution of Network Packet Sizes",
+ labels={"Packet Length": "Packet Length (bytes)", "count": "Frequency"},
+ color_discrete_sequence=["#00CC96"]
+)
+fig.update_layout(
+ xaxis_title="Packet Length (bytes)",
+ yaxis_title="Number of Packets",
+ showlegend=False
+)
fig.show()
-# Packet Type
+# =============================================================================
+# PACKET TYPE ANALYSIS
+# =============================================================================
+# Packet Types:
+# - Control packets: Network management (SYN, ACK, FIN, RST)
+# - Data packets: Actual payload/content transmission
+#
+# Binary encoding: Control = 1, Data = 0
+
+print("\n" + "=" * 60)
+print("PACKET TYPE ANALYSIS")
+print("=" * 60)
+
col_name = "Packet Type"
-"""
- Control = 1
- Data = 0
-"""
-print( df[ col_name ].value_counts())
-df = catvar_mapping( col_name , [ "Control" ] , [ "Control" ])
-piechart_col( "Packet Type Control" )
+if col_name in df.columns:
+ print(df[col_name].value_counts())
+ df = catvar_mapping(col_name, ["Control"], ["Control"])
+ piechart_col("Packet Type Control")
+elif "Packet Type Control" in df.columns:
+ print("Packet Type already transformed to Packet Type Control")
+ piechart_col("Packet Type Control")
+
+# =============================================================================
+# TRAFFIC TYPE ANALYSIS
+# =============================================================================
+# Application layer protocols:
+# - DNS: Domain Name System queries/responses (port 53)
+# - HTTP: Web traffic (port 80)
+# - FTP: File Transfer Protocol (ports 20, 21)
+#
+# Binary encoding creates indicator columns for each traffic type
+
+print("\n" + "=" * 60)
+print("TRAFFIC TYPE ANALYSIS")
+print("=" * 60)
-# Traffic Type
col_name = "Traffic Type"
-"""
- DNS = { 1 if Traffic Type = "DNS" , 0 otherwise }
- HTTP = { 1 if Traffic Type = "HTTP" , 0 otherwise }
- FTP = [ 0 , 0 ]
-"""
-print( df[ col_name ].value_counts())
-df = catvar_mapping( col_name , [ "DNS" , "HTTP" ])
-piechart_col( col_name )
+print(df[col_name].value_counts())
+if "Traffic Type DNS" not in df.columns:
+ df = catvar_mapping(col_name, ["DNS", "HTTP"])
+piechart_col(col_name)
+
+# Malware Indicators
+# =============================================================================
+# SECURITY INDICATORS ANALYSIS
+# =============================================================================
+# These columns contain security-related flags and detection results
+
+print("\n" + "=" * 60)
+print("SECURITY INDICATORS ANALYSIS")
+print("=" * 60)
+# -----------------------------------------------------------------------------
# Malware Indicators
+# Indicators of Compromise (IoC) detected by security systems
+# IoC examples: malicious file hashes, suspicious domains, known attack patterns
+# Binary encoding: 1 = IoC detected, 0 = No IoC detected
+# -----------------------------------------------------------------------------
col_name = "Malware Indicators"
-print( df[ col_name ].value_counts())
-"""
- IoC Detected = 1
- pd.NA = 0
-"""
-df = catvar_mapping( col_name , [ "IoC Detected" ] , [ "/" ])
-piechart_col( col_name )
+print(f"\n--- {col_name} ---")
+print(df[col_name].value_counts())
+if df[col_name].dtype == 'object' or "IoC Detected" in df[col_name].astype(str).values:
+ df = catvar_mapping(col_name, ["IoC Detected"], ["/"])
+piechart_col(col_name, names=["No IoC Detected", "IoC Detected"])
+
+# -----------------------------------------------------------------------------
# Anomaly Scores
-fig = px.histogram( df , "Anomaly Scores" )
+# Numerical score indicating how anomalous/suspicious the traffic is
+# Higher scores suggest more deviation from normal behavior
+# -----------------------------------------------------------------------------
+print("\n--- Anomaly Scores ---")
+fig = px.histogram(
+ df,
+ x="Anomaly Scores",
+ title="Distribution of Anomaly Scores",
+ labels={"Anomaly Scores": "Anomaly Score", "count": "Frequency"},
+ color_discrete_sequence=["#EF553B"]
+)
+fig.update_layout(
+ xaxis_title="Anomaly Score (higher = more suspicious)",
+ yaxis_title="Number of Records",
+ showlegend=False
+)
fig.show()
+# -----------------------------------------------------------------------------
# Alert Trigger
+# Whether the traffic triggered a security alert
+# Binary encoding: 1 = Alert triggered, 0 = No alert
+# -----------------------------------------------------------------------------
+print("\n--- Alert Trigger ---")
col_name = "Alert Trigger"
-# print( df[ col_name ].value_counts())
-df = catvar_mapping( col_name , [ "Alert Triggered" ] , [ "/" ])
-piechart_col( col_name , names = [ "Alert triggered" , "Alert not triggered" ])
+if df[col_name].dtype == 'object' or "Alert Triggered" in df[col_name].astype(str).values:
+ df = catvar_mapping(col_name, ["Alert Triggered"], ["/"])
+piechart_col(col_name, names=["No Alert Triggered", "Alert Triggered"])
+# -----------------------------------------------------------------------------
# Attack Signature
+# Pattern matching results from signature-based detection systems
+# Known Pattern A vs Known Pattern B (different attack signatures)
+# Binary encoding: Pattern A = 1, Pattern B = 0
+# -----------------------------------------------------------------------------
+print("\n--- Attack Signature ---")
col_name = "Attack Signature"
-print( df[ "Attack Signature" ].value_counts())
-"""
- Pattern A = 1
- Pattern B = 0
-"""
-df = catvar_mapping( col_name , [ "Known Pattern A" ] , [ "patA" ])
-piechart_col( "Attack Signature patA" , [ "Pattern A" , "Pattern B" ])
-
-# Action taken
+if col_name in df.columns:
+ print(df["Attack Signature"].value_counts())
+ df = catvar_mapping(col_name, ["Known Pattern A"], ["patA"])
+ piechart_col("Attack Signature patA", ["Known Pattern A", "Known Pattern B"])
+elif "Attack Signature patA" in df.columns:
+ print("Attack Signature already transformed to Attack Signature patA")
+ piechart_col("Attack Signature patA", ["Known Pattern A", "Known Pattern B"])
+
+# -----------------------------------------------------------------------------
+# Action Taken
+# Response action by the security system
+# - Logged: Traffic recorded for analysis
+# - Blocked: Traffic denied/dropped
+# - Ignored: No action taken
+# -----------------------------------------------------------------------------
+print("\n--- Action Taken ---")
col_name = "Action Taken"
-print( df[ col_name ].value_counts())
-df = catvar_mapping( col_name , [ "Logged" , "Blocked" ])
-piechart_col( col_name )
-
+if col_name in df.columns:
+ print(df[col_name].value_counts())
+ df = catvar_mapping(col_name, ["Logged", "Blocked"])
+ piechart_col(col_name)
+elif "Action Taken Logged" in df.columns:
+ print("Action Taken already transformed")
+
+# -----------------------------------------------------------------------------
# Severity Level
+# Classification of threat severity
+# Ordinal encoding: Low = -1, Medium = 0, High = +1
+# This preserves the natural ordering for analysis
+# -----------------------------------------------------------------------------
+print("\n--- Severity Level ---")
col_name = "Severity Level"
-print( df[ col_name ].value_counts())
-"""
- Low = - 1
- Medium = 0
- High = + 1
-"""
-df.loc[ df[ col_name ] == "Low" , col_name ] = - 1
-df.loc[ df[ col_name ] == "Medium" , col_name ] = 0
-df.loc[ df[ col_name ] == "High" , col_name ] = + 1
-piechart_col( col_name , [ "Low" , "Medium" , "High" ])
+print(df[col_name].value_counts())
+
+df.loc[df[col_name] == "Low", col_name] = -1
+df.loc[df[col_name] == "Medium", col_name] = 0
+df.loc[df[col_name] == "High", col_name] = +1
+piechart_col(col_name, ["Low Severity", "Medium Severity", "High Severity"])
+
+# %% [markdown]
+# ## Device and User-Agent Analysis
+# This section parses User-Agent strings to extract:
+# - Browser information (family, version)
+# - Operating system details
+# - Device characteristics (mobile, tablet, PC, bot)
+
+# %% Device Information Extraction
+# =============================================================================
+# USER-AGENT PARSING AND DEVICE CLASSIFICATION
+# =============================================================================
+# The "Device Information" column contains User-Agent strings that reveal:
+# - Browser: Chrome, Firefox, Safari, Edge, IE, etc.
+# - Operating System: Windows, macOS, Linux, iOS, Android
+# - Device Type: Desktop PC, Mobile phone, Tablet
+# - Bot Detection: Automated crawlers vs human users
+#
+# This information helps identify:
+# - Attack vectors targeting specific platforms
+# - Bot-driven attacks vs human-initiated threats
+# - Vulnerable browser/OS combinations
+
+print("\n" + "=" * 60)
+print("DEVICE INFORMATION ANALYSIS")
+print("=" * 60)
-#%% Device Information
col_name = "Device Information"
-print( df[ col_name ].value_counts())
-col = df.columns.get_loc( col_name )
-df.insert( col + 1 , "Browser family" , value = pd.NA )
-df.insert( col + 2 , "Browser major" , value = pd.NA )
-df.insert( col + 3 , "Browser minor" , value = pd.NA )
-df.insert( col + 4 , "OS family" , value = pd.NA )
-df.insert( col + 5 , "OS major" , value = pd.NA )
-df.insert( col + 6 , "OS minor" , value = pd.NA )
-df.insert( col + 7 , "Device family" , value = pd.NA )
-df.insert( col + 8 , "Device brand" , value = pd.NA )
-df.insert( col + 9 , "Device type" , value = pd.NA )
-df.insert( col + 10 , "Device bot" , value = pd.NA )
-
-df[ "Browser family" ] = df[ col_name ].apply( lambda x : parse( x ).browser.family if parse( x ).browser.family is not None else pd.NA )
-df[ "Browser major" ] = df[ col_name ].apply( lambda x : parse( x ).browser.version[ 0 ] if parse( x ).browser.version[ 0 ] is not None else pd.NA )
-df[ "Browser minor" ] = df[ col_name ].apply( lambda x: parse( x ).browser.version[ 1 ] if parse( x ).browser.version[ 1 ] is not None else pd.NA )
-df[ "OS family" ] = df[ col_name ].apply( lambda x : parse( x ).os.family if parse( x ).os.family is not None else pd.NA )
-df[ "OS major" ] = df[ col_name ].apply( lambda x : parse( x ).os.version[ 0 ] if len( parse( x ).os.version ) > 0 and parse( x ).os.version[ 0 ] is not None else pd.NA )
-df[ "OS minor" ] = df[ col_name ].apply( lambda x : parse( x ).os.version[ 1 ] if len( parse( x ).os.version ) > 1 and parse( x ).os.version[ 1 ] is not None else pd.NA )
-df[ "OS patch" ] = df[ col_name ].apply( lambda x : parse( x ).os.version[ 2 ] if len( parse( x ).os.version ) > 2 and parse( x ).os.version[ 2 ] is not None else pd.NA )
-df[ "Device family" ] = df[ col_name ].apply (lambda x : parse( x ).device.family if parse( x ).device.family is not None else pd.NA )
-df[ "Device brand" ] = df[ col_name].apply( lambda x : parse( x ).device.brand if parse( x ).device.brand is not None else pd.NA )
-# do not agree with setting to not specified , why nnot leave it pd.NA ??
-# df[ "OS major" ] = df[ "OS_major" ].fillna( "not specified" )
-# df[ "OS minor" ] = df[ "OS_major" ].fillna( "not specified" )
-# df[ "OS patch" ] = df[ "OS_patch" ].fillna( "not specified" )
-# df[ "Device brand" ] = df[ "Device_brand" ].fillna( "not specified" )
-# device info
-def Device_type( ua_string ) :
- try :
- if not ua_string or pd.isna( ua_string ) :
+print(f"Unique User-Agent strings: {df[col_name].nunique()}")
+print("\nTop 10 User-Agent strings:")
+print(df[col_name].value_counts().head(10))
+
+# Parse User-Agent strings (skip if already processed)
+if "Browser family" not in df.columns:
+ print("\nParsing User-Agent strings...")
+ col = df.columns.get_loc(col_name)
+
+ # Create columns for parsed device information
+ device_info_cols = [
+ "Browser family", "Browser major", "Browser minor",
+ "OS family", "OS major", "OS minor",
+ "Device family", "Device brand", "Device type", "Device bot"
+ ]
+ for i, new_col in enumerate(device_info_cols, start=1):
+ if new_col not in df.columns:
+ df.insert(col + i, new_col, value=pd.NA)
+
+ # Extract browser information
+ df["Browser family"] = df[col_name].apply(
+ lambda x: parse(x).browser.family if parse(x).browser.family is not None else pd.NA
+ )
+ df["Browser major"] = df[col_name].apply(
+ lambda x: parse(x).browser.version[0]
+ if parse(x).browser.version[0] is not None
+ else pd.NA
+ )
+ df["Browser minor"] = df[col_name].apply(
+ lambda x: parse(x).browser.version[1]
+ if parse(x).browser.version[1] is not None
+ else pd.NA
+ )
+
+ # Extract operating system information
+ df["OS family"] = df[col_name].apply(
+ lambda x: parse(x).os.family if parse(x).os.family is not None else pd.NA
+ )
+ df["OS major"] = df[col_name].apply(
+ lambda x: parse(x).os.version[0]
+ if len(parse(x).os.version) > 0 and parse(x).os.version[0] is not None
+ else pd.NA
+ )
+ df["OS minor"] = df[col_name].apply(
+ lambda x: parse(x).os.version[1]
+ if len(parse(x).os.version) > 1 and parse(x).os.version[1] is not None
+ else pd.NA
+ )
+ df["OS patch"] = df[col_name].apply(
+ lambda x: parse(x).os.version[2]
+ if len(parse(x).os.version) > 2 and parse(x).os.version[2] is not None
+ else pd.NA
+ )
+
+ # Extract device information
+ df["Device family"] = df[col_name].apply(
+ lambda x: parse(x).device.family if parse(x).device.family is not None else pd.NA
+ )
+ df["Device brand"] = df[col_name].apply(
+ lambda x: parse(x).device.brand if parse(x).device.brand is not None else pd.NA
+ )
+ print("User-Agent parsing complete.")
+else:
+ print("Device information already extracted - skipping parsing.")
+
+# Note: Keeping NA values for missing information is preferred over
+# placeholder strings like "not specified" for proper statistical analysis
+
+# -----------------------------------------------------------------------------
+# Device Type Classification
+# Classify devices as Mobile, Tablet, or PC based on User-Agent
+# -----------------------------------------------------------------------------
+def Device_type(ua_string):
+ """
+ Classify device type from User-Agent string.
+
+ Returns:
+ str: "Mobile", "Tablet", "PC", or pd.NA if unknown
+ """
+ try:
+ if not ua_string or pd.isna(ua_string):
return pd.NA
- ua = ua_parse( ua_string )
- if getattr( ua , "is_mobile" , False ) :
+ ua = ua_parse(ua_string)
+ if getattr(ua, "is_mobile", False):
return "Mobile"
- if getattr( ua , "is_tablet" , False ) :
+ if getattr(ua, "is_tablet", False):
return "Tablet"
- if getattr( ua , "is_pc", False ) :
+ if getattr(ua, "is_pc", False):
return "PC"
- return pd.NA # replaced "Unknown" with pd.NA
- except :
- return pd.NA # replaced "Unknown" with pd.NA
-df[ "Device type" ] = df[ col_name ].apply( Device_type())
-# detection of bots
-df[ "Device bot" ] = df[ col_name ].apply( lambda x: ua_parse( x ).is_bot )
-
-#%% Network Segment
+ return pd.NA
+ except:
+ return pd.NA
+
+
+# Classify device types and detect bots
+if "Device type" not in df.columns or df["Device type"].isna().all():
+ print("Classifying device types...")
+ df["Device type"] = df[col_name].apply(Device_type)
+
+# Bot detection - identifies automated crawlers and scripts
+if "Device bot" not in df.columns or df["Device bot"].isna().all():
+ print("Detecting bot traffic...")
+ df["Device bot"] = df[col_name].apply(lambda x: ua_parse(x).is_bot)
+
+# %% [markdown]
+# ## Network Infrastructure Analysis
+# This section analyzes network segmentation and security system logs
+
+# %% Network Segment and Security Logs
+# =============================================================================
+# NETWORK SEGMENTATION ANALYSIS
+# =============================================================================
+# Network segments represent logical divisions of the network:
+# - Segment A, B, C: Different network zones (e.g., DMZ, internal, guest)
+# - Segmentation helps contain breaches and control traffic flow
+#
+# Binary encoding: segA = 1 if Segment A, segB = 1 if Segment B, else [0,0] for C
+
+print("\n" + "=" * 60)
+print("NETWORK SEGMENTATION ANALYSIS")
+print("=" * 60)
+
col_name = "Network Segment"
-print( df[ col_name ].value_counts())
-"""
- segA = { 1 if "Segment A" ; 0 otherwise }
- segB = { 1 if "Segment B" ; 0 otherwise }
- "Segment C" = [ 0 , 0 ]
-"""
-df = catvar_mapping( col_name , [ "Segment A" , "Segment B" ] , [ "segA" , "segB" ])
-piechart_col( col_name )
+print(df[col_name].value_counts())
+
+if "Network Segment segA" not in df.columns:
+ df = catvar_mapping(col_name, ["Segment A", "Segment B"], ["segA", "segB"])
+piechart_col(col_name)
+
+# =============================================================================
+# GEO-LOCATION DATA PARSING
+# =============================================================================
+# Parse "City, State" format into separate columns for geographic analysis
+
+print("\n" + "=" * 60)
+print("GEO-LOCATION DATA PARSING")
+print("=" * 60)
-# Geo-location Data
col_name = "Geo-location Data"
-print( df[ col_name ].value_counts())
-col = df.columns.get_loc( col_name )
-df.insert( col + 1 , "Geo-location City" , value = pd.NA )
-df.insert( col + 2 , "Geo-location State" , value = pd.NA )
-def geolocation_data( info ) :
- city , state = info.split( ", " )
- return pd.Series([ city , state ])
-df[[ "Geo-location City" , "Geo-location State" ]] = df[ "Geo-location Data" ].apply( lambda x : geolocation_data( x ))
+print(f"Unique locations: {df[col_name].nunique()}")
+print("\nTop 10 locations:")
+print(df[col_name].value_counts().head(10))
+
+
+def geolocation_data(info):
+ """Split 'City, State' string into separate components."""
+ city, state = info.split(", ")
+ return pd.Series([city, state])
+
+if "Geo-location City" not in df.columns:
+ print("Parsing geo-location data...")
+ col = df.columns.get_loc(col_name)
+ df.insert(col + 1, "Geo-location City", value=pd.NA)
+ df.insert(col + 2, "Geo-location State", value=pd.NA)
+ df[["Geo-location City", "Geo-location State"]] = df["Geo-location Data"].apply(
+ lambda x: geolocation_data(x)
+ )
+
+# =============================================================================
+# SECURITY SYSTEM LOGS ANALYSIS
+# =============================================================================
+# Firewall Logs: Records of traffic allowed/denied by firewall rules
+# IDS/IPS Alerts: Intrusion Detection/Prevention System alerts
+# Log Source: Where the log originated (Firewall vs Server)
+
+print("\n" + "=" * 60)
+print("SECURITY SYSTEM LOGS ANALYSIS")
+print("=" * 60)
+
+# -----------------------------------------------------------------------------
# Firewall Logs
+# Binary: 1 = Log data present, 0 = No log data
+# -----------------------------------------------------------------------------
+print("\n--- Firewall Logs ---")
col_name = "Firewall Logs"
-print( df[ col_name ].value_counts())
-"""
- Log Data = 1
- pd.NA = 0
-"""
-df = catvar_mapping( col_name , [ "Log Data" ] , [ "/" ])
-# piechart_col( col_name , [ "Log Data" , "No Log Data" ])
+print(df[col_name].value_counts())
+if df[col_name].dtype == 'object' or "Log Data" in df[col_name].astype(str).values:
+ df = catvar_mapping(col_name, ["Log Data"], ["/"])
+
+# -----------------------------------------------------------------------------
# IDS/IPS Alerts
+# Intrusion Detection/Prevention System alerts
+# Binary: 1 = Alert data present, 0 = No alert
+# -----------------------------------------------------------------------------
+print("\n--- IDS/IPS Alerts ---")
col_name = "IDS/IPS Alerts"
-print( df[ col_name ].value_counts())
-"""
- Alert Data = 1
- pd.NA = 0
-"""
-bully = df[ col_name ] == "Alert Data"
-df = catvar_mapping( col_name , [ "Alert Data" ] , [ "/" ])
-# piechart_col( col_name , [ "Alert Data" , "No Alert Data" ])
+print(df[col_name].value_counts())
+# Binary: 1 = Alert data present, 0 = No alert
+if df[col_name].dtype == 'object' or "Alert Data" in df[col_name].astype(str).values:
+ df = catvar_mapping(col_name, ["Alert Data"], ["/"])
+# -----------------------------------------------------------------------------
# Log Source
+# Origin of the log entry
+# Binary: Firewall = 1, Server = 0
+# -----------------------------------------------------------------------------
+print("\n--- Log Source ---")
col_name = "Log Source"
-print( df[ col_name ].value_counts())
-"""
- Firewall = 1
- Server = 0
-"""
-df = catvar_mapping( col_name , [ "Firewall" ] , [ "Firewall" ])
-# piechart_col( col_name , [ "Firewall" , "Server" ])
-crosstab_col( "Log Source Firewall" , "Firewall Logs" , "logsource" , "firewallogs" )
+if col_name in df.columns:
+ print(df[col_name].value_counts())
+ df = catvar_mapping(col_name, ["Firewall"], ["Firewall"])
+elif "Log Source Firewall" in df.columns:
+ print("Log Source already transformed to Log Source Firewall")
+# Generate cross-tabulation between log source and firewall logs
+crosstab_col("Log Source Firewall", "Firewall Logs", "logsource", "firewallogs")
-#%% seperat dfs for attack types
-df_attype = {}
-attypes = [ "Malware" , "Intrusion" , "DDoS" ]
-for attype in attypes :
- df_attype[ attype ] = df[ df[ "Attack Type"] == attype ]
+# %% [markdown]
+# ## Attack Type Segmentation
+# Create separate DataFrames for each attack type to enable
+# comparative analysis between Malware, Intrusion, and DDoS attacks
+# %% Separate DataFrames by Attack Type
+# =============================================================================
+# ATTACK TYPE SEGMENTATION
+# =============================================================================
+# Split dataset by attack type for comparative visualizations
+# This enables side-by-side analysis of attack characteristics
-#%% geo plot of "Attack Type" by "Anomaly Score"
+print("\n" + "=" * 60)
+print("ATTACK TYPE SEGMENTATION")
+print("=" * 60)
+
+df_attype = {}
+attypes = ["Malware", "Intrusion", "DDoS"]
+for attype in attypes:
+ df_attype[attype] = df[df["Attack Type"] == attype]
+ print(f"{attype}: {len(df_attype[attype]):,} records")
+
+
+# %% [markdown]
+# ## Geographic Distribution by Attack Type and Anomaly Score
+# Visualize where different attack types originate and target,
+# with color intensity representing the anomaly score
+
+# %% Geographic Plot: Attack Types with Anomaly Scores
+# =============================================================================
+# GEO-VISUALIZATION: ATTACK TYPES BY ANOMALY SCORE
+# =============================================================================
+# 6-panel geographic visualization:
+# - Rows: Malware, Intrusion, DDoS attacks
+# - Columns: Source IPs (left) and Destination IPs (right)
+# - Color: Anomaly score (Viridis scale - dark=low, bright=high)
+
+print("\n" + "=" * 60)
+print("GEOGRAPHIC ATTACK VISUALIZATION")
+print("=" * 60)
fig = subp(
- rows = 3 ,
- cols = 2 ,
- specs = [
- [{ "type" : "scattergeo" } , { "type" : "scattergeo" }] ,
- [{ "type" : "scattergeo" } , { "type" : "scattergeo" }] ,
- [{ "type" : "scattergeo" } , { "type" : "scattergeo" }] ,
- ] ,
- subplot_titles = (
- "Source IP locations" ,
- "Destination IP locations"
- )
- )
-for i , ( attype , symb ) in enumerate( zip( attypes , [ "diamond" , "diamond" , "diamond" ])) :
+ rows=3,
+ cols=2,
+ specs=[
+ [{"type": "scattergeo"}, {"type": "scattergeo"}],
+ [{"type": "scattergeo"}, {"type": "scattergeo"}],
+ [{"type": "scattergeo"}, {"type": "scattergeo"}],
+ ],
+ subplot_titles=(
+ "Malware - Source IPs", "Malware - Destination IPs",
+ "Intrusion - Source IPs", "Intrusion - Destination IPs",
+ "DDoS - Source IPs", "DDoS - Destination IPs"
+ ),
+)
+
+for i, (attype, symb) in enumerate(zip(attypes, ["diamond", "diamond", "diamond"])):
+ # Source IP locations (left column)
fig.add_trace(
go.Scattergeo(
- lat = df_attype[ attype ][ "Source IP latitude" ] ,
- lon = df_attype[ attype ][ "Source IP longitude" ] ,
- mode = "markers" ,
- marker = {
- "size" : 4 ,
- "symbol" : symb ,
- "color" : df_attype[ attype ][ "Anomaly Scores" ] ,
- "colorscale" : "Viridis" ,
- "cmin" : df_attype[ attype ][ "Anomaly Scores" ].min() ,
- "cmax" : df_attype[ attype ][ "Anomaly Scores" ].max() ,
- "colorbar" : { "title" : "Anomaly Score" }
- }
- ) ,
- row = i + 1 ,
- col = 1
- )
+ lat=df_attype[attype]["Source IP latitude"],
+ lon=df_attype[attype]["Source IP longitude"],
+ mode="markers",
+ name=f"{attype} Source",
+ marker={
+ "size": 4,
+ "symbol": symb,
+ "color": df_attype[attype]["Anomaly Scores"],
+ "colorscale": "Viridis",
+ "cmin": df_attype[attype]["Anomaly Scores"].min(),
+ "cmax": df_attype[attype]["Anomaly Scores"].max(),
+ "colorbar": {"title": "Anomaly
Score", "len": 0.25, "y": 0.85 - i * 0.33},
+ },
+ hovertemplate=f"{attype} Attack Origin
Lat: %{{lat:.2f}}
Lon: %{{lon:.2f}}
Anomaly Score: %{{marker.color:.2f}}"
+ ),
+ row=i + 1,
+ col=1,
+ )
+ # Destination IP locations (right column)
fig.add_trace(
go.Scattergeo(
- lat = df_attype[ attype ][ "Destination IP latitude" ] ,
- lon = df_attype[ attype ][ "Destination IP longitude" ] ,
- mode = "markers" ,
- marker = {
- "size" : 4 ,
- "symbol" : symb ,
- "color" : df_attype[ attype ][ "Anomaly Scores" ] ,
- "colorscale" : "Viridis" ,
- "cmin" : df_attype[ attype ][ "Anomaly Scores" ].min() ,
- "cmax" : df_attype[ attype ][ "Anomaly Scores" ].max() ,
- "colorbar" : { "title" : "Anomaly Score" }
- }
- ) ,
- row = i + 1 ,
- col = 2
- )
- i = i + 1
+ lat=df_attype[attype]["Destination IP latitude"],
+ lon=df_attype[attype]["Destination IP longitude"],
+ mode="markers",
+ name=f"{attype} Dest",
+ marker={
+ "size": 4,
+ "symbol": symb,
+ "color": df_attype[attype]["Anomaly Scores"],
+ "colorscale": "Viridis",
+ "cmin": df_attype[attype]["Anomaly Scores"].min(),
+ "cmax": df_attype[attype]["Anomaly Scores"].max(),
+ "colorbar": {"title": "Anomaly
Score", "len": 0.25, "y": 0.85 - i * 0.33, "x": 1.02},
+ "showscale": False, # Hide duplicate colorbar
+ },
+ hovertemplate=f"{attype} Attack Target
Lat: %{{lat:.2f}}
Lon: %{{lon:.2f}}
Anomaly Score: %{{marker.color:.2f}}"
+ ),
+ row=i + 1,
+ col=2,
+ )
+
fig.update_geos(
- # projection_type = "orthographic" ,
- showcountries = True ,
- showland = True ,
- # landcolor = "LightGreen"
+ showcountries=True,
+ showland=True,
+ landcolor="lightgray",
+ countrycolor="white"
)
fig.update_layout(
- height = 4000 ,
- margin = {
- "r" : 0 ,
- "t" : 10 ,
- "l" : 0 ,
- "b" : 0
- } ,
- title_text = "IP Address Locations" ,
- title_x = 0.5
+ height=1200,
+ margin={"r": 50, "t": 80, "l": 0, "b": 0},
+ title_text="Geographic Distribution of Attacks by Type and Anomaly Score",
+ title_x=0.5,
+ title_font_size=18,
+ showlegend=False,
)
fig.show()
-#%% Packet Length x Attack Types
+# %% [markdown]
+# ## Attack Characteristics Comparison
+# Compare packet lengths and anomaly scores across different attack types
+
+# %% Packet Length by Attack Type
+# =============================================================================
+# PACKET LENGTH DISTRIBUTION BY ATTACK TYPE
+# =============================================================================
+# Strip plot showing packet length distribution for each attack type
+# Helps identify if different attacks have characteristic packet sizes
+
+print("\n" + "=" * 60)
+print("PACKET LENGTH BY ATTACK TYPE")
+print("=" * 60)
fig = go.Figure()
-for i , ( attype , symb ) in enumerate( zip( attypes , [ "diamond" , "diamond" , "diamond" ])) :
+# Color palette for attack types
+colors = {"Malware": "#636EFA", "Intrusion": "#EF553B", "DDoS": "#00CC96"}
+
+for i, (attype, symb) in enumerate(zip(attypes, ["diamond", "diamond", "diamond"])):
fig.add_trace(
go.Scatter(
- x = df_attype[ attype ][ "Packet Length" ] ,
- y = [ i ] * df_attype[ attype ].shape[ 0 ] ,
- mode = "markers" ,
- name = attype ,
- marker = {
- "size" : 4 ,
- "symbol" : symb ,
- "opacity" : 0.1
- }
- ) ,
+ x=df_attype[attype]["Packet Length"],
+ y=[i] * df_attype[attype].shape[0],
+ mode="markers",
+ name=f"{attype} ({len(df_attype[attype]):,} records)",
+ marker={
+ "size": 4,
+ "symbol": symb,
+ "opacity": 0.15,
+ "color": colors[attype]
+ },
+ hovertemplate=f"{attype}
Packet Length: %{{x}} bytes"
+ ),
+ )
- )
- i = i + 1
+fig.update_layout(
+ title="Packet Length Distribution by Attack Type",
+ title_font_size=16,
+ xaxis_title="Packet Length (bytes)",
+ yaxis=dict(
+ tickmode='array',
+ tickvals=[0, 1, 2],
+ ticktext=attypes,
+ title="Attack Type"
+ ),
+ height=400,
+ showlegend=True,
+ legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="center", x=0.5)
+)
fig.show()
-# Anomaly Scores x Attack Types
+# =============================================================================
+# ANOMALY SCORE DISTRIBUTION BY ATTACK TYPE
+# =============================================================================
+# Strip plot showing anomaly score distribution for each attack type
+# Higher anomaly scores indicate more suspicious/unusual traffic patterns
+
+print("\n" + "=" * 60)
+print("ANOMALY SCORES BY ATTACK TYPE")
+print("=" * 60)
fig = go.Figure()
-for i , ( attype , symb ) in enumerate( zip( attypes , [ "diamond" , "diamond" , "diamond" ])) :
+for i, (attype, symb) in enumerate(zip(attypes, ["diamond", "diamond", "diamond"])):
fig.add_trace(
go.Scatter(
- x = df_attype[ attype ][ "Anomaly Scores" ] ,
- y = [ i ] * df_attype[ attype ].shape[ 0 ] ,
- mode = "markers" ,
- name = attype ,
- marker = {
- "size" : 4 ,
- "symbol" : symb ,
- "opacity" : 0.1
- }
- ) ,
+ x=df_attype[attype]["Anomaly Scores"],
+ y=[i] * df_attype[attype].shape[0],
+ mode="markers",
+ name=f"{attype} ({len(df_attype[attype]):,} records)",
+ marker={
+ "size": 4,
+ "symbol": symb,
+ "opacity": 0.15,
+ "color": colors[attype]
+ },
+ hovertemplate=f"{attype}
Anomaly Score: %{{x:.2f}}"
+ ),
+ )
- )
- i = i + 1
+fig.update_layout(
+ title="Anomaly Score Distribution by Attack Type",
+ title_font_size=16,
+ xaxis_title="Anomaly Score (higher = more suspicious)",
+ yaxis=dict(
+ tickmode='array',
+ tickvals=[0, 1, 2],
+ ticktext=attypes,
+ title="Attack Type"
+ ),
+ height=400,
+ showlegend=True,
+ legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="center", x=0.5)
+)
fig.show()
-#%% general crosstable
-
-def sankey_diag( cols_bully = [
- True , # "Source IP country"
- True , # "Destination IP country"
- True , # "Source Port ephemeral"
- True , # "Destination Port ephemeral"
- True , # "Protocol"
- True , # "Packet Type Control"
- True , # "Traffic Type"
- True , # "Malware Indicators"
- True , # "Alert Trigger"
- True , # "Attack Signature patA"
- True , # "Action Taken"
- True , # "Severity Level"
- True , # "Network Segment"
- True , # "Firewall Logs"
- True , # "IDS/IPS Alerts"
- True , # "Log Source Firewall"
- ] , ntop = 10 ) :
- cols = np.array([
- "Source IP country" ,
- "Destination IP country" ,
- "Source Port ephemeral" ,
- "Destination Port ephemeral" ,
- "Protocol" ,
- "Packet Type Control" ,
- "Traffic Type" ,
- "Malware Indicators" ,
- "Alert Trigger" ,
- "Attack Signature patA" ,
- "Action Taken" ,
- "Severity Level" ,
- "Network Segment" ,
- "Firewall Logs" ,
- "IDS/IPS Alerts" ,
- "Log Source Firewall"
- ])
- cols = cols[ np.array( cols_bully )]
-
- idx_ct = []
+# %% [markdown]
+# ## Multi-Variable Sankey Diagram
+# Visualize the flow of traffic characteristics leading to different attack types
+# This helps identify which combinations of features are associated with each attack
+
+# %% General Cross-Table Sankey Diagram
+# =============================================================================
+# MULTI-VARIABLE SANKEY DIAGRAM GENERATOR
+# =============================================================================
+# Creates a Sankey diagram showing how categorical variable values
+# flow toward different attack types. Useful for understanding
+# which feature combinations characterize each attack type.
+
+
+def sankey_diag(
+ cols_bully=[
+ True, # "Source IP country"
+ True, # "Destination IP country"
+ True, # "Source Port ephemeral"
+ True, # "Destination Port ephemeral"
+ True, # "Protocol"
+ True, # "Packet Type Control"
+ True, # "Traffic Type"
+ True, # "Malware Indicators"
+ True, # "Alert Trigger"
+ True, # "Attack Signature patA"
+ True, # "Action Taken"
+ True, # "Severity Level"
+ True, # "Network Segment"
+ True, # "Firewall Logs"
+ True, # "IDS/IPS Alerts"
+ True, # "Log Source Firewall"
+ ],
+ ntop=10,
+):
+ """
+ Generate a Sankey diagram showing feature value flows to attack types.
+
+ Parameters:
+ -----------
+ cols_bully : list of bool
+ Boolean flags indicating which columns to include in the diagram
+ ntop : int
+ Number of top countries to show (others grouped as "other")
+
+ Returns:
+ --------
+ DataFrame
+ Cross-tabulation percentages used to build the diagram
+ """
+ cols = np.array(
+ [
+ "Source IP country",
+ "Destination IP country",
+ "Source Port ephemeral",
+ "Destination Port ephemeral",
+ "Protocol",
+ "Packet Type Control",
+ "Traffic Type",
+ "Malware Indicators",
+ "Alert Trigger",
+ "Attack Signature patA",
+ "Action Taken",
+ "Severity Level",
+ "Network Segment",
+ "Firewall Logs",
+ "IDS/IPS Alerts",
+ "Log Source Firewall",
+ ]
+ )
+ cols = cols[np.array(cols_bully)]
+
+ idx_ct = []
labels = []
- if "Source IP country" in cols :
- SIP = df[ "Source IP country" ].copy( deep = True )
+ if "Source IP country" in cols:
+ SIP = df["Source IP country"].copy(deep=True)
SIP.name = "SIP"
- SIPlabs = pd.Series( SIP.value_counts().index[ : ntop ])
- bully = ( SIP.isin( SIPlabs ) | SIP.isna())
- SIP.loc[ ~ bully ] = "other"
- SIPlabs = "SIP " + pd.concat([ SIPlabs , pd.Series([ "other" ])])
- labels.extend( SIPlabs.to_list())
- idx_ct = idx_ct + [ SIP ]
- cols = cols[ cols != "Source IP country" ]
- if "Destination IP country" in cols :
- DIP = df[ "Destination IP country" ].copy( deep = True )
+ SIPlabs = pd.Series(SIP.value_counts().index[:ntop])
+ bully = SIP.isin(SIPlabs) | SIP.isna()
+ SIP.loc[~bully] = "other"
+ SIPlabs = "SIP " + pd.concat([SIPlabs, pd.Series(["other"])])
+ labels.extend(SIPlabs.to_list())
+ idx_ct = idx_ct + [SIP]
+ cols = cols[cols != "Source IP country"]
+ if "Destination IP country" in cols:
+ DIP = df["Destination IP country"].copy(deep=True)
DIP.name = "DIP"
- DIPlabs = pd.Series( DIP.value_counts().index[ : ntop ])
- bully = ( DIP.isin( DIPlabs ) | DIP.isna())
- DIP.loc[ ~ bully ] = "other"
- DIPlabs = "DIP " + pd.concat([ DIPlabs , pd.Series([ "other" ])])
- labels.extend( DIPlabs.to_list())
- idx_ct = idx_ct + [ DIP ]
- cols = cols[ cols != "Destination IP country" ]
-
+ DIPlabs = pd.Series(DIP.value_counts().index[:ntop])
+ bully = DIP.isin(DIPlabs) | DIP.isna()
+ DIP.loc[~bully] = "other"
+ DIPlabs = "DIP " + pd.concat([DIPlabs, pd.Series(["other"])])
+ labels.extend(DIPlabs.to_list())
+ idx_ct = idx_ct + [DIP]
+ cols = cols[cols != "Destination IP country"]
+
# build cross table with Attack Type in columns and multi-index of variables in index
- idx_ct = idx_ct + [ df[ col ] for col in cols ]
- print( idx_ct )
- crosstabs = pd.crosstab(
- index = idx_ct ,
- columns = df[ "Attack Type" ]
- )
-
+ idx_ct = idx_ct + [df[col] for col in cols]
+ print(idx_ct)
+ crosstabs = pd.crosstab(index=idx_ct, columns=df["Attack Type"])
+
# compute labels
- for c in np.append( cols , "Attack Type" ) :
- vals = df[ c ].unique()
- for v in vals :
- labels.append( f"{ c } { v }" )
+ for c in np.append(cols, "Attack Type"):
+ vals = df[c].unique()
+ for v in vals:
+ labels.append(f"{c} {v}")
# computation of source , target , value
source = []
target = []
value = []
nlvl = crosstabs.index.nlevels
- for idx , row in crosstabs.iterrows() :
+ for idx, row in crosstabs.iterrows():
row_labs = []
- if ( nlvl == 1 ) :
- row_labs.append( f"{ crosstabs.index.name } { idx }" )
- else :
- for i , val in enumerate( idx ) :
- row_labs.append( f"{ crosstabs.index.names[ i ] } { val }" )
- for attype in crosstabs.columns :
- val = row[ attype ]
- for i in range( 0 , nlvl - 1 ) :
- source.append( labels.index( row_labs[ i ]))
- target.append( labels.index( row_labs[ i + 1 ]))
- value.append( val )
- source.append( labels.index( row_labs[ - 1 ]))
- target.append( labels.index( f"Attack Type { attype }" ))
- value.append( val )
-
- # plot the sankey diagram
- n = len( labels )
+ if nlvl == 1:
+ row_labs.append(f"{crosstabs.index.name} {idx}")
+ else:
+ for i, val in enumerate(idx):
+ row_labs.append(f"{crosstabs.index.names[i]} {val}")
+ for attype in crosstabs.columns:
+ val = row[attype]
+ for i in range(0, nlvl - 1):
+ source.append(labels.index(row_labs[i]))
+ target.append(labels.index(row_labs[i + 1]))
+ value.append(val)
+ source.append(labels.index(row_labs[-1]))
+ target.append(labels.index(f"Attack Type {attype}"))
+ value.append(val)
+
+ # Plot the Sankey diagram with Inferno color scale
+ n = len(labels)
colors = px.colors.sample_colorscale(
- px.colors.sequential.Inferno ,
- [ i / ( n - 1 ) for i in range( n )]
- )
- fig = go.Figure( data = [ go.Sankey(
- node = dict(
- pad = 15 ,
- thickness = 20 ,
- line = dict(
- color = "rgba( 0 , 0 , 0 , 0.1 )" ,
- width = 0.5
- ) ,
- label = labels ,
- color = colors ,
- ) ,
- link = dict(
- source = source ,
- target = target ,
- value = value
- ))])
+ px.colors.sequential.Inferno, [i / (n - 1) for i in range(n)]
+ )
+ fig = go.Figure(
+ data=[
+ go.Sankey(
+ node=dict(
+ pad=15,
+ thickness=20,
+ line=dict(color="rgba(0, 0, 0, 0.1)", width=0.5),
+ label=labels,
+ color=colors,
+ hovertemplate="%{label}
Total: %{value}"
+ ),
+ link=dict(
+ source=source,
+ target=target,
+ value=value,
+ hovertemplate="Flow from %{source.label} to %{target.label}
Count: %{value}"
+ ),
+ )
+ ]
+ )
fig.update_layout(
- title_text = "Sankey Diagram" ,
- # font_family = "Courier New" ,
- # font_color = "blue" ,
- font_size = 20 ,
- title_font_family = "Avenir" ,
- title_font_color = "black",
- )
+ title_text="Feature Value Flow to Attack Types",
+ title_font_size=18,
+ font_size=14,
+ title_font_family="Avenir",
+ title_font_color="black",
+ )
fig.show()
-
+
+ # Return normalized cross-tabulation (percentages)
crosstabs = crosstabs / crosstabs.sum().sum() * 100
-
+
return crosstabs
-crosstabs = sankey_diag([
- False , # "Source IP country"
- False , # "Destination IP country"
- False , # "Source Port ephemeral"
- False , # "Destination Port ephemeral"
- True , # "Protocol"
- False , # "Packet Type Control"
- True , # "Traffic Type"
- True , # "Malware Indicators"
- False , # "Alert Trigger"
- False , # "Attack Signature patA"
- False , # "Action Taken"
- False , # "Severity Level"
- False , # "Network Segment"
- False , # "Firewall Logs"
- True , # "IDS/IPS Alerts"
- False , # "Log Source Firewall"
- ])
-
-
-#%%
-
-
-def paracat_diag( cols_bully = [
- True , # "Source IP country"
- True , # "Destination IP country"
- True , # "Source Port ephemeral"
- True , # "Destination Port ephemeral"
- True , # "Protocol"
- True , # "Packet Type Control"
- True , # "Traffic Type"
- True , # "Malware Indicators"
- True , # "Alert Trigger"
- True , # "Attack Signature patA"
- True , # "Action Taken"
- True , # "Severity Level"
- True , # "Network Segment"
- True , # "Firewall Logs"
- True , # "IDS/IPS Alerts"
- True , # "Log Source Firewall"
- ] ,
- colorvar = "Attack Type" ,
- ntop = 10 ,
- ) :
-
- cols = np.array([
- "Source IP country" ,
- "Destination IP country" ,
- "Source Port ephemeral" ,
- "Destination Port ephemeral" ,
- "Protocol" ,
- "Packet Type Control" ,
- "Traffic Type" ,
- "Malware Indicators" ,
- "Alert Trigger" ,
- "Attack Signature patA" ,
- "Action Taken" ,
- "Severity Level" ,
- "Network Segment" ,
- "Firewall Logs" ,
- "IDS/IPS Alerts" ,
- "Log Source Firewall"
- ])
- cols = cols[ np.array( cols_bully )]
-
+
+# Generate Sankey diagram with selected features
+# Selected: Protocol, Traffic Type, Malware Indicators, IDS/IPS Alerts
+print("\n" + "=" * 60)
+print("MULTI-VARIABLE SANKEY ANALYSIS")
+print("=" * 60)
+print("Features included: Protocol, Traffic Type, Malware Indicators, IDS/IPS Alerts")
+
+crosstabs = sankey_diag(
+ [
+ False, # "Source IP country"
+ False, # "Destination IP country"
+ False, # "Source Port ephemeral"
+ False, # "Destination Port ephemeral"
+ True, # "Protocol" - INCLUDED
+ False, # "Packet Type Control"
+ True, # "Traffic Type" - INCLUDED
+ True, # "Malware Indicators" - INCLUDED
+ False, # "Alert Trigger"
+ False, # "Attack Signature patA"
+ False, # "Action Taken"
+ False, # "Severity Level"
+ False, # "Network Segment"
+ False, # "Firewall Logs"
+ True, # "IDS/IPS Alerts" - INCLUDED
+ False, # "Log Source Firewall"
+ ]
+)
+
+
+# %% [markdown]
+# ## Parallel Categories Diagram
+# Interactive visualization showing relationships between categorical
+# variables and attack types. Lines connect category values, with
+# color indicating the selected variable's values.
+
+# %% Parallel Categories Diagram
+# =============================================================================
+# PARALLEL CATEGORIES DIAGRAM
+# =============================================================================
+# Creates an interactive parallel categories plot showing how
+# different categorical feature values relate to attack types.
+# The diagram allows exploration of multi-dimensional categorical relationships.
+
+
+def paracat_diag(
+ cols_bully=[
+ True, # "Source IP country"
+ True, # "Destination IP country"
+ True, # "Source Port ephemeral"
+ True, # "Destination Port ephemeral"
+ True, # "Protocol"
+ True, # "Packet Type Control"
+ True, # "Traffic Type"
+ True, # "Malware Indicators"
+ True, # "Alert Trigger"
+ True, # "Attack Signature patA"
+ True, # "Action Taken"
+ True, # "Severity Level"
+ True, # "Network Segment"
+ True, # "Firewall Logs"
+ True, # "IDS/IPS Alerts"
+ True, # "Log Source Firewall"
+ ],
+ colorvar="Attack Type",
+ ntop=10,
+):
+ cols = np.array(
+ [
+ "Source IP country",
+ "Destination IP country",
+ "Source Port ephemeral",
+ "Destination Port ephemeral",
+ "Protocol",
+ "Packet Type Control",
+ "Traffic Type",
+ "Malware Indicators",
+ "Alert Trigger",
+ "Attack Signature patA",
+ "Action Taken",
+ "Severity Level",
+ "Network Segment",
+ "Firewall Logs",
+ "IDS/IPS Alerts",
+ "Log Source Firewall",
+ ]
+ )
+ cols = cols[np.array(cols_bully)]
+
dims_var = {}
- if "Source IP country" in cols :
- SIP = df[ "Source IP country" ].copy( deep = True )
+ if "Source IP country" in cols:
+ SIP = df["Source IP country"].copy(deep=True)
SIP.name = "SIP"
- SIPlabs = pd.Series( SIP.value_counts().index[ : ntop ])
- bully = ( SIP.isin( SIPlabs ) | SIP.isna())
- SIP.loc[ ~ bully ] = "other"
- SIPlabs = "SIP " + pd.concat([ SIPlabs , pd.Series([ "other" ])])
- cols = cols[ cols != "Source IP country" ]
- dims_var[ "SIP" ] = go.parcats.Dimension(
- values = SIP ,
+ SIPlabs = pd.Series(SIP.value_counts().index[:ntop])
+ bully = SIP.isin(SIPlabs) | SIP.isna()
+ SIP.loc[~bully] = "other"
+ SIPlabs = "SIP " + pd.concat([SIPlabs, pd.Series(["other"])])
+ cols = cols[cols != "Source IP country"]
+ dims_var["SIP"] = go.parcats.Dimension(
+ values=SIP,
# categoryorder = "category ascending" ,
- label = "Source IP country"
- )
- cols = np.append( cols , "SIP" )
- if "Destination IP country" in cols :
- DIP = df[ "Destination IP country" ].copy( deep = True )
+ label="Source IP country",
+ )
+ cols = np.append(cols, "SIP")
+ if "Destination IP country" in cols:
+ DIP = df["Destination IP country"].copy(deep=True)
DIP.name = "DIP"
- DIPlabs = pd.Series( DIP.value_counts().index[ : ntop ])
- bully = ( DIP.isin( DIPlabs ) | DIP.isna())
- DIP.loc[ ~ bully ] = "other"
- DIPlabs = "DIP " + pd.concat([ DIPlabs , pd.Series([ "other" ])])
- cols = cols[ cols != "Destination IP country" ]
- dims_var[ "DIP" ] = go.parcats.Dimension(
- values = DIP ,
+ DIPlabs = pd.Series(DIP.value_counts().index[:ntop])
+ bully = DIP.isin(DIPlabs) | DIP.isna()
+ DIP.loc[~bully] = "other"
+ DIPlabs = "DIP " + pd.concat([DIPlabs, pd.Series(["other"])])
+ cols = cols[cols != "Destination IP country"]
+ dims_var["DIP"] = go.parcats.Dimension(
+ values=DIP,
# categoryorder = "category ascending" ,
- label = "Destination IP country"
- )
- cols = np.append( cols , "DIP" )
- for col in cols[( cols != "SIP" ) & ( cols != "DIP" )] :
- print( col )
- dims_var[ col ] = go.parcats.Dimension(
- values = df[ col ] ,
+ label="Destination IP country",
+ )
+ cols = np.append(cols, "DIP")
+ for col in cols[(cols != "SIP") & (cols != "DIP")]:
+ print(col)
+ dims_var[col] = go.parcats.Dimension(
+ values=df[col],
# categoryorder = "category ascending" ,
- label = col
- )
-
+ label=col,
+ )
+
dim_attypes = go.parcats.Dimension(
- values = df[ "Attack Type" ],
- label = "Attack Type",
+ values=df["Attack Type"],
+ label="Attack Type",
# categoryarray = [ "Malware" , "Intrusion" , "DDoS" ] ,
- ticktext = [ "Malware" , "Intrusion" , "DDoS" ]
- )
-
- dims = [ dims_var[ col ] for col in cols ]
- dims.append( dim_attypes )
-
- if colorvar == "SIP" :
+ ticktext=["Malware", "Intrusion", "DDoS"],
+ )
+
+ dims = [dims_var[col] for col in cols]
+ dims.append(dim_attypes)
+
+ if colorvar == "SIP":
colorvar = SIP
- elif colorvar == "DIP" :
+ elif colorvar == "DIP":
colorvar = DIP
- elif ( colorvar in cols ) or ( colorvar == "Attack Type" ) :
- colorvar = df[ colorvar ]
- else :
- ValueError( "colorvar must be in cols" )
+ elif (colorvar in cols) or (colorvar == "Attack Type"):
+ colorvar = df[colorvar]
+ else:
+ ValueError("colorvar must be in cols")
catcolor = colorvar.unique()
- catcolor_n = catcolor.shape[ 0 ]
- color = colorvar.map({ cat : i for i , cat in enumerate( catcolor )})
- positions = [ i / ( catcolor_n - 1 ) if ( catcolor_n > 1 ) else 0 for i in range( 0 , catcolor_n )]
+ catcolor_n = catcolor.shape[0]
+ color = colorvar.map({cat: i for i, cat in enumerate(catcolor)})
+ positions = [
+ i / (catcolor_n - 1) if (catcolor_n > 1) else 0 for i in range(0, catcolor_n)
+ ]
palette = px.colors.sequential.Viridis
- colors = [ px.colors.sample_colorscale( palette , p )[ 0 ] for p in positions ]
- colorscale = [[ positions[ i ] , colors[ i ]] for i in range( 0 , catcolor_n )]
-
- fig = go.Figure( data = [ go.Parcats(
- dimensions = dims ,
- line = {
- "color" : color ,
- "colorscale" : colorscale ,
- "shape" : "hspline" ,
- } ,
- hoveron = "color" ,
- hoverinfo = "count+probability" ,
- labelfont = { "size" : 18 , "family" : "Times" } ,
- tickfont = { "size" : 16 , "family" : "Times" } ,
- arrangement = "freeform" ,
- )])
+ colors = [px.colors.sample_colorscale(palette, p)[0] for p in positions]
+ colorscale = [[positions[i], colors[i]] for i in range(0, catcolor_n)]
+
+ fig = go.Figure(
+ data=[
+ go.Parcats(
+ dimensions=dims,
+ line={
+ "color": color,
+ "colorscale": colorscale,
+ "shape": "hspline",
+ },
+ hoveron="color",
+ hoverinfo="count+probability",
+ labelfont={"size": 18, "family": "Times"},
+ tickfont={"size": 16, "family": "Times"},
+ arrangement="freeform",
+ )
+ ]
+ )
fig.show()
-paracat_diag([
- False , # "Source IP country"
- False , # "Destination IP country"
- False , # "Source Port ephemeral"
- False , # "Destination Port ephemeral"
- True , # "Protocol"
- False , # "Packet Type Control"
- True , # "Traffic Type"
- False , # "Malware Indicators"
- False , # "Alert Trigger"
- True , # "Attack Signature patA"
- False , # "Action Taken"
- True , # "Severity Level"
- True , # "Network Segment"
- False , # "Firewall Logs"
- False , # "IDS/IPS Alerts"
- False , # "Log Source Firewall"
- ] ,
- colorvar = "Attack Signature patA" ,
- )
+# Generate parallel categories diagram
+# Selected features: Protocol, Traffic Type, Attack Signature, Severity Level, Network Segment
+# Color: Attack Signature Pattern A (to see how signature types flow through other features)
+print("\n" + "=" * 60)
+print("PARALLEL CATEGORIES DIAGRAM")
+print("=" * 60)
+print("Features: Protocol, Traffic Type, Attack Signature, Severity Level, Network Segment")
+print("Color coding: Attack Signature Pattern (A vs B)")
+
+paracat_diag(
+ [
+ False, # "Source IP country"
+ False, # "Destination IP country"
+ False, # "Source Port ephemeral"
+ False, # "Destination Port ephemeral"
+ True, # "Protocol" - INCLUDED
+ False, # "Packet Type Control"
+ True, # "Traffic Type" - INCLUDED
+ False, # "Malware Indicators"
+ False, # "Alert Trigger"
+ True, # "Attack Signature patA" - INCLUDED
+ False, # "Action Taken"
+ True, # "Severity Level" - INCLUDED
+ True, # "Network Segment" - INCLUDED
+ False, # "Firewall Logs"
+ False, # "IDS/IPS Alerts"
+ False, # "Log Source Firewall"
+ ],
+ colorvar="Attack Signature patA",
+)
+
+
+# %% [markdown]
+# ## Statistical Analysis: Correlation and Chi-Square Tests
+# Measure the strength of association between categorical variables
+# and the target variable (Attack Type)
+
+# %% Matthews Correlation Coefficients
+# =============================================================================
+# MATTHEWS CORRELATION COEFFICIENT (MCC) ANALYSIS
+# =============================================================================
+# The Matthews Correlation Coefficient (MCC) measures the quality of
+# binary classifications. Values range from -1 to +1:
+# - +1: Perfect prediction
+# - 0: No better than random
+# - -1: Total disagreement
+#
+# For multi-class, this generalizes to the Phi coefficient.
+
+print("\n" + "=" * 60)
+print("MATTHEWS CORRELATION COEFFICIENTS")
+print("=" * 60)
+print("Measuring correlation between each feature and Attack Type")
+print("(Values close to 0 indicate no linear correlation)\n")
+
+
+def catvar_corr(col, target="Attack Type"):
+ """Calculate Matthews correlation coefficient between a feature and target."""
+ corr = matthews_corrcoef(df[target], df[col].astype(str))
+ print(f" {col:35} : {corr:+.4f}")
+
+
+catvars = np.array(
+ [
+ "Source IP country",
+ "Destination IP country",
+ "Source Port ephemeral",
+ "Destination Port ephemeral",
+ "Protocol",
+ "Packet Type Control",
+ "Traffic Type",
+ "Malware Indicators",
+ "Alert Trigger",
+ "Attack Signature patA",
+ "Action Taken",
+ "Severity Level",
+ "Network Segment",
+ "Firewall Logs",
+ "IDS/IPS Alerts",
+ "Log Source Firewall",
+ ]
+)
+for c in catvars:
+ catvar_corr(c)
+
+
+# %% [markdown]
+# ## Chi-Square Test of Independence
+# Test whether categorical variables are independent of Attack Type
-#%% coefficients computation
-
-# matthews corrcoef
-
-def catvar_corr( col , target = "Attack Type") :
- corr = matthews_corrcoef( df[ target ], df[ col ].astype( str ))
- print( f"phi corr between { target } and { col } = { corr }" )
-catvars = np.array([
- "Source IP country" ,
- "Destination IP country" ,
- "Source Port ephemeral" ,
- "Destination Port ephemeral" ,
- "Protocol" ,
- "Packet Type Control" ,
- "Traffic Type" ,
- "Malware Indicators" ,
- "Alert Trigger" ,
- "Attack Signature patA" ,
- "Action Taken" ,
- "Severity Level" ,
- "Network Segment" ,
- "Firewall Logs" ,
- "IDS/IPS Alerts" ,
- "Log Source Firewall"
- ])
-for c in catvars :
- catvar_corr( c )
-
-#%% chi 2
+# %% Chi-Square Independence Test
+# =============================================================================
+# CHI-SQUARE TEST OF INDEPENDENCE
+# =============================================================================
+# Tests whether there is a significant association between Protocol and Attack Type
+# - H0: Variables are independent (no association)
+# - H1: Variables are not independent (association exists)
+#
+# If p-value < 0.05, we reject H0 and conclude significant association
+
+print("\n" + "=" * 60)
+print("CHI-SQUARE TEST: Protocol vs Attack Type")
+print("=" * 60)
from scipy.stats import chi2_contingency
-# obs = np.array([[10, 10, 20], [20, 20, 20]])
-df_catvar = df[[
- "Attack Type",
- "Source Port ephemeral" ,
- "Destination Port ephemeral" ,
- "Protocol" ,
- "Packet Type Control" ,
- "Traffic Type" ,
- "Malware Indicators" ,
- "Alert Trigger" ,
- "Attack Signature patA" ,
- "Action Taken" ,
- "Severity Level" ,
- "Network Segment" ,
- "Firewall Logs" ,
- "IDS/IPS Alerts" ,
- "Log Source Firewall"
- ]]
-res = chi2_contingency( df_catvar.values.T[ 1 : ].astype( str ))
-print( res.statistic )
-print( res.pvalue )
-print( res.dof )
-print( res.expected_freq )
-
-#%% mca
+# Prepare categorical variables for analysis
+df_catvar = df[
+ [
+ "Attack Type",
+ "Source Port ephemeral",
+ "Destination Port ephemeral",
+ "Protocol",
+ "Packet Type Control",
+ "Traffic Type",
+ "Malware Indicators",
+ "Alert Trigger",
+ "Attack Signature patA",
+ "Action Taken",
+ "Severity Level",
+ "Network Segment",
+ "Firewall Logs",
+ "IDS/IPS Alerts",
+ "Log Source Firewall",
+ ]
+]
+
+# Encode categorical columns as integers for contingency table
+df_catvar_encoded = df_catvar.copy()
+for col in df_catvar_encoded.columns:
+ if df_catvar_encoded[col].dtype == 'object':
+ df_catvar_encoded[col] = pd.Categorical(df_catvar_encoded[col]).codes
+
+# Perform chi-square test
+res = chi2_contingency(pd.crosstab(df_catvar_encoded['Attack Type'], df_catvar_encoded['Protocol']))
+print(f"Chi-square statistic: {res.statistic:.4f}")
+print(f"P-value: {res.pvalue:.6f}")
+print(f"Degrees of freedom: {res.dof}")
+print(f"\nExpected frequencies:")
+print(res.expected_freq)
+
+if res.pvalue < 0.05:
+ print("\n=> Significant association detected (p < 0.05)")
+else:
+ print("\n=> No significant association (p >= 0.05)")
+
+
+# %% [markdown]
+# ## Multiple Correspondence Analysis (MCA)
+# Dimensionality reduction technique for categorical variables
+# Similar to PCA but for categorical data
+
+# %% Multiple Correspondence Analysis
+# =============================================================================
+# MULTIPLE CORRESPONDENCE ANALYSIS (MCA)
+# =============================================================================
+# MCA is a data analysis technique for nominal categorical data,
+# used to detect and represent underlying structures in a data set.
+# It's the categorical equivalent of Principal Component Analysis (PCA).
+#
+# Key outputs:
+# - Eigenvalues: Amount of variance explained by each component
+# - Component coordinates: Position of category levels in reduced space
+
+print("\n" + "=" * 60)
+print("MULTIPLE CORRESPONDENCE ANALYSIS (MCA)")
+print("=" * 60)
+
+# Initialize MCA with 3 components
mca = prince.MCA(
n_components=3,
n_iter=3,
copy=True,
check_input=True,
- engine='sklearn',
- random_state=42
+ engine="sklearn",
+ random_state=42,
)
-df_catvar = df[[
- "Attack Type",
- "Source Port ephemeral" ,
- "Destination Port ephemeral" ,
- "Protocol" ,
- "Packet Type Control" ,
- "Traffic Type" ,
- "Malware Indicators" ,
- "Alert Trigger" ,
- "Attack Signature patA" ,
- "Action Taken" ,
- "Severity Level" ,
- "Network Segment" ,
- "Firewall Logs" ,
- "IDS/IPS Alerts" ,
- "Log Source Firewall"
- ]]
+# Select categorical variables for MCA
+df_catvar = df[
+ [
+ "Attack Type",
+ "Source Port ephemeral",
+ "Destination Port ephemeral",
+ "Protocol",
+ "Packet Type Control",
+ "Traffic Type",
+ "Malware Indicators",
+ "Alert Trigger",
+ "Attack Signature patA",
+ "Action Taken",
+ "Severity Level",
+ "Network Segment",
+ "Firewall Logs",
+ "IDS/IPS Alerts",
+ "Log Source Firewall",
+ ]
+]
+
+# Fit MCA model
mca = mca.fit(df_catvar)
+# Alternative MCA approaches for comparison
one_hot = pd.get_dummies(df_catvar)
-mca_no_one_hot = prince.MCA(one_hot=False)
-mca_no_one_hot = mca_no_one_hot.fit(one_hot)
-mca_without_correction = prince.MCA(correction=None)
-
-mca_with_benzecri_correction = prince.MCA(correction='benzecri')
-mca_with_greenacre_correction = prince.MCA(correction='greenacre')
+# MCA with one_hot=False requires positive values (add 1 to avoid zeros)
+one_hot_positive = one_hot + 1
-mca.eigenvalues_summary
+mca_no_one_hot = prince.MCA(one_hot=False)
+mca_no_one_hot = mca_no_one_hot.fit(one_hot_positive)
-#%% SARIMA analysis on Attack type
+# Different correction methods for eigenvalue adjustment
+mca_without_correction = prince.MCA(correction=None)
+mca_with_benzecri_correction = prince.MCA(correction="benzecri")
+mca_with_greenacre_correction = prince.MCA(correction="greenacre")
+
+# Display MCA results
+print("\nMCA Eigenvalues Summary:")
+print("(Shows variance explained by each component)")
+print(mca.eigenvalues_summary)
+
+
+# %% [markdown]
+# ## Time Series Analysis: Attack Patterns Over Time
+# Analyze temporal patterns in attack occurrences using:
+# - Daily attack counts by type
+# - Autocorrelation Function (ACF) and Partial Autocorrelation Function (PACF)
+# - Rolling averages for trend detection
+
+# %% Time Series Analysis - Daily Attack Counts
+# =============================================================================
+# TIME SERIES ANALYSIS: DAILY ATTACK PATTERNS
+# =============================================================================
+# Aggregate attacks by day and analyze temporal patterns
+# This helps identify:
+# - Seasonal patterns (weekly, monthly cycles)
+# - Trend changes over time
+# - Anomalous periods with unusual attack volumes
+
+print("\n" + "=" * 60)
+print("TIME SERIES ANALYSIS: DAILY ATTACK COUNTS")
+print("=" * 60)
+
+# Aggregate attacks by day
+Attacks_pday = df.copy(deep=True)
+Attacks_pday["date_dd"] = Attacks_pday["date"].dt.floor("d")
+Attacks_pday = (
+ Attacks_pday.groupby(["date_dd", "Attack Type"]).size().unstack().iloc[1:-1,]
+)
-Attacks_pday = df.copy( deep = True )
-Attacks_pday[ "date_dd" ] = Attacks_pday[ "date" ].dt.floor( "d" )
-Attacks_pday = Attacks_pday.groupby([ "date_dd" , "Attack Type" ]).size().unstack().iloc[ 1 : - 1 , ]
+print(f"Time series length: {len(Attacks_pday)} days")
+print(f"Date range: {Attacks_pday.index.min()} to {Attacks_pday.index.max()}")
-# plot n attacks per day
+# -----------------------------------------------------------------------------
+# Daily Attack Count Time Series Plot
+# Shows raw daily counts for each attack type
+# -----------------------------------------------------------------------------
fig = subp(
- rows = 3 ,
- cols = 1 ,
- subplot_titles = (
- "Malware" ,
- "Intrusion" ,
- "DDos" ,
- )
- )
+ rows=3,
+ cols=1,
+ subplot_titles=(
+ "Malware Attacks per Day",
+ "Intrusion Attempts per Day",
+ "DDoS Attacks per Day",
+ ),
+ vertical_spacing=0.08
+)
+
+# Malware time series
fig.add_trace(
go.Scatter(
- x = Attacks_pday.index ,
- y = Attacks_pday[ "Malware" ] ,
- ) ,
- row = 1 ,
- col = 1 ,
- )
+ x=Attacks_pday.index,
+ y=Attacks_pday["Malware"],
+ mode="lines",
+ name="Malware",
+ line=dict(color="#636EFA"),
+ hovertemplate="Malware
Date: %{x}
Count: %{y}"
+ ),
+ row=1,
+ col=1,
+)
+
+# Intrusion time series
fig.add_trace(
go.Scatter(
- x = Attacks_pday.index ,
- y = Attacks_pday[ "Intrusion" ] ,
- ) ,
- row = 2 ,
- col = 1 ,
- )
+ x=Attacks_pday.index,
+ y=Attacks_pday["Intrusion"],
+ mode="lines",
+ name="Intrusion",
+ line=dict(color="#EF553B"),
+ hovertemplate="Intrusion
Date: %{x}
Count: %{y}"
+ ),
+ row=2,
+ col=1,
+)
+
+# DDoS time series
fig.add_trace(
go.Scatter(
- x = Attacks_pday.index ,
- y = Attacks_pday[ "DDoS" ] ,
- ) ,
- row = 3 ,
- col = 1 ,
- )
+ x=Attacks_pday.index,
+ y=Attacks_pday["DDoS"],
+ mode="lines",
+ name="DDoS",
+ line=dict(color="#00CC96"),
+ hovertemplate="DDoS
Date: %{x}
Count: %{y}"
+ ),
+ row=3,
+ col=1,
+)
+
+fig.update_layout(
+ height=800,
+ title_text="Daily Attack Counts by Type",
+ title_font_size=18,
+ showlegend=True,
+ legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="center", x=0.5)
+)
+fig.update_xaxes(title_text="Date", row=3, col=1)
+fig.update_yaxes(title_text="Count")
+fig.show()
-# plot ACF & PACF
+# -----------------------------------------------------------------------------
+# ACF and PACF Analysis
+# Autocorrelation helps identify time series patterns:
+# - ACF: Correlation between observations at different lags
+# - PACF: Direct correlation at each lag, removing intermediate effects
+# These help determine ARIMA model parameters (p, d, q)
+# -----------------------------------------------------------------------------
+print("\n--- Autocorrelation Analysis ---")
fig = subp(
- rows = 3 ,
- cols = 2 ,
- subplot_titles = (
- "Malware ACF" ,
- "Malware PACF" ,
- "Intrusion ACF" ,
- "Intrusion PACF" ,
- "DDoS ACF" ,
- "DDoS PACF" ,
- )
- )
+ rows=3,
+ cols=2,
+ subplot_titles=(
+ "Malware - Autocorrelation (ACF)",
+ "Malware - Partial Autocorrelation (PACF)",
+ "Intrusion - Autocorrelation (ACF)",
+ "Intrusion - Partial Autocorrelation (PACF)",
+ "DDoS - Autocorrelation (ACF)",
+ "DDoS - Partial Autocorrelation (PACF)",
+ ),
+ vertical_spacing=0.1,
+ horizontal_spacing=0.08
+)
+
from statsmodels.tsa.stattools import pacf
from statsmodels.tsa.stattools import acf
-import plotly.graph_objects as go
Attacktype_TSanalysis = {}
nlags = 100
-for i , attacktype in enumerate([ "Malware" , "Intrustion" , "DDoS" ]) :
- Attacktype_TSanalysis[ f"{ attacktype }_ACF" ] = acf( Attacks_pday[ "Malware" ] , nlags = nlags )
- Attacktype_TSanalysis[ f"{ attacktype }_PACF" ] = pacf( Attacks_pday[ "Malware" ] , nlags = nlags )
- fig.add_trace(
- go.Scatter(
- x = list( range( 0 , nlags + 1 )) ,
- y = Attacktype_TSanalysis[ f"{ attacktype }_ACF" ] ,
- mode = "lines" ,
- name = "ACF" ,
- ) ,
- row = i + 1 ,
- col = 1 ,
- )
- fig.add_trace(
- go.Scatter(
- x = list( range( 0 , nlags + 1 )) ,
- y = Attacktype_TSanalysis[ f"{ attacktype }_PACF" ] ,
- mode = "lines" ,
- name = "PACF" ,
- ) ,
- row = i + 1,
- col = 2 ,
- )
-fig.show()
-
-#%%
-
-df.to_csv( "data/df.csv" , sep = "|" )
-
-
-
-
-
-
-
-
-
-
-
-
+# Color scheme for attack types
+ts_colors = {"Malware": "#636EFA", "Intrusion": "#EF553B", "DDoS": "#00CC96"}
+for i, attacktype in enumerate(["Malware", "Intrusion", "DDoS"]):
+ # Calculate ACF and PACF
+ Attacktype_TSanalysis[f"{attacktype}_ACF"] = acf(
+ Attacks_pday[attacktype], nlags=nlags
+ )
+ Attacktype_TSanalysis[f"{attacktype}_PACF"] = pacf(
+ Attacks_pday[attacktype], nlags=nlags
+ )
+ # Plot ACF
+ fig.add_trace(
+ go.Scatter(
+ x=list(range(0, nlags + 1)),
+ y=Attacktype_TSanalysis[f"{attacktype}_ACF"],
+ mode="lines",
+ name=f"{attacktype} ACF",
+ line=dict(color=ts_colors[attacktype]),
+ hovertemplate=f"{attacktype} ACF
Lag: %{{x}}
Correlation: %{{y:.3f}}"
+ ),
+ row=i + 1,
+ col=1,
+ )
+ # Plot PACF
+ fig.add_trace(
+ go.Scatter(
+ x=list(range(0, nlags + 1)),
+ y=Attacktype_TSanalysis[f"{attacktype}_PACF"],
+ mode="lines",
+ name=f"{attacktype} PACF",
+ line=dict(color=ts_colors[attacktype]),
+ hovertemplate=f"{attacktype} PACF
Lag: %{{x}}
Correlation: %{{y:.3f}}"
+ ),
+ row=i + 1,
+ col=2,
+ )
+fig.update_layout(
+ height=900,
+ title_text="Autocorrelation Analysis for Attack Time Series",
+ title_font_size=18,
+ showlegend=False
+)
+fig.update_xaxes(title_text="Lag (days)")
+fig.update_yaxes(title_text="Correlation")
+fig.show()
+# %% Save Processed Dataset
+# =============================================================================
+# SAVE PROCESSED DATASET
+# =============================================================================
+# Export the processed DataFrame with all engineered features
+print("\n" + "=" * 60)
+print("SAVING PROCESSED DATASET")
+print("=" * 60)
+df.to_csv("data/df.csv", sep="|")
+print("Dataset saved to data/df.csv")
+print(f"Total records: {len(df):,}")
+print(f"Total columns: {len(df.columns)}")
+# %% [markdown]
+# ## Rolling Average Trend Analysis
+# Smooth the daily time series using rolling averages to identify trends
+# %% Rolling Average Analysis
+# =============================================================================
+# ROLLING AVERAGE TREND ANALYSIS
+# =============================================================================
+# Apply a 30-day rolling average to smooth out daily fluctuations
+# and reveal underlying trends in attack patterns
-#%%
+print("\n" + "=" * 60)
+print("ROLLING AVERAGE TREND ANALYSIS")
+print("=" * 60)
-rw = 30
+rw = 30 # 30-day rolling window
+print(f"Using {rw}-day rolling average window")
tr1 = go.Scatter(
- x = Attacks_pday.index ,
- y = Attacks_pday[ "Malware" ].rolling( rw ).mean() ,
- line_color = "blue" ,
+ x=Attacks_pday.index,
+ y=Attacks_pday["Malware"].rolling(rw).mean(),
+ name=f"Malware ({rw}-day MA)",
+ line=dict(color="#636EFA", width=2),
+ hovertemplate="Malware
Date: %{x}
30-day Avg: %{y:.1f}"
)
tr2 = go.Scatter(
- x = Attacks_pday.index ,
- y = Attacks_pday[ "Intrusion" ].rolling( rw ).mean() ,
- line_color = "red" ,
- # yaxis = "y2"
+ x=Attacks_pday.index,
+ y=Attacks_pday["Intrusion"].rolling(rw).mean(),
+ name=f"Intrusion ({rw}-day MA)",
+ line=dict(color="#EF553B", width=2),
+ hovertemplate="Intrusion
Date: %{x}
30-day Avg: %{y:.1f}"
)
tr3 = go.Scatter(
- x = Attacks_pday.index ,
- y = Attacks_pday[ "DDoS" ].rolling( rw ).mean() ,
- line_color = "#000000" ,
- # yaxis = "y2"
+ x=Attacks_pday.index,
+ y=Attacks_pday["DDoS"].rolling(rw).mean(),
+ name=f"DDoS ({rw}-day MA)",
+ line=dict(color="#00CC96", width=2),
+ hovertemplate="DDoS
Date: %{x}
30-day Avg: %{y:.1f}"
)
+# Create combined rolling average plot
fig = subp()
fig.add_trace(tr1)
fig.add_trace(tr2)
fig.add_trace(tr3)
+fig.update_layout(
+ title_text=f"Attack Trends: {rw}-Day Rolling Average by Attack Type",
+ title_font_size=18,
+ xaxis_title="Date",
+ yaxis_title="Average Daily Attacks",
+ legend=dict(
+ orientation="h",
+ yanchor="bottom",
+ y=1.02,
+ xanchor="center",
+ x=0.5,
+ title="Attack Type"
+ ),
+ hovermode="x unified"
+)
fig.show()
-#%%
-px.line(
- Attacks_pday ,
- x = Attacks_pday.index ,
- y = Attacks_pday[ "DDoS" ].rolling( 15 ).mean() ,
- mode = "line" ,
- title = "Number of DDoS attacks MA per day"
-)
+# %% DDoS Short-Term Trend (15-day MA)
+# =============================================================================
+# DDoS SHORT-TERM TREND ANALYSIS
+# =============================================================================
+# 15-day rolling average for more responsive trend detection
+
+print("\n--- DDoS 15-Day Moving Average ---")
-#%%
-Attacks_pmonth = df.copy( deep = True )
-Attacks_pmonth[ "date_mm" ] = Attacks_pmonth[ "date" ].dt.ceil( "d" )
-Attacks_pmonth = Attacks_pmonth.groupby([ "date_mm" , "Attack Type" ]).size().unstack().iloc[ 1 : - 1 , ]
-px.line(
- Attacks_pmonth ,
- x = Attacks_pmonth.index ,
- y = "DDoS" ,
- title = "Number of DDoS attacks per month"
+fig = px.line(
+ Attacks_pday,
+ x=Attacks_pday.index,
+ y=Attacks_pday["DDoS"].rolling(15).mean(),
+ title="DDoS Attack Trend: 15-Day Rolling Average",
+ labels={"y": "15-Day Average Attacks", "x": "Date"}
+)
+fig.update_traces(
+ line=dict(color="#00CC96", width=2),
+ hovertemplate="DDoS
Date: %{x}
15-day Avg: %{y:.1f}"
+)
+fig.update_layout(
+ xaxis_title="Date",
+ yaxis_title="Average Daily DDoS Attacks",
+ showlegend=False
)
+fig.show()
+
+
+# %% Monthly Attack Aggregation
+# =============================================================================
+# MONTHLY ATTACK AGGREGATION
+# =============================================================================
+# Aggregate attacks by month for longer-term pattern analysis
+print("\n" + "=" * 60)
+print("MONTHLY ATTACK ANALYSIS")
+print("=" * 60)
+Attacks_pmonth = df.copy(deep=True)
+Attacks_pmonth["date_mm"] = Attacks_pmonth["date"].dt.ceil("d")
+Attacks_pmonth = (
+ Attacks_pmonth.groupby(["date_mm", "Attack Type"]).size().unstack().iloc[1:-1,]
+)
+
+fig = px.line(
+ Attacks_pmonth,
+ x=Attacks_pmonth.index,
+ y="DDoS",
+ title="Monthly DDoS Attack Volume",
+ labels={"y": "Number of Attacks", "date_mm": "Date"}
+)
+fig.update_traces(
+ line=dict(color="#00CC96", width=2),
+ hovertemplate="DDoS
Date: %{x}
Count: %{y}"
+)
+fig.update_layout(
+ xaxis_title="Date",
+ yaxis_title="Number of DDoS Attacks",
+ showlegend=False
+)
+fig.show()
+print("\n" + "=" * 60)
+print("ANALYSIS COMPLETE")
+print("=" * 60)
+# %%