From b7d27449fc72cbcfc1a7498771b854bcca5c4d76 Mon Sep 17 00:00:00 2001 From: mikezelenskyy Date: Wed, 1 Apr 2026 15:19:56 +0200 Subject: [PATCH 1/4] feat(gooddata-pandas): add Arrow IPC execution path via for_exec_def_arrow --- packages/gooddata-pandas/pyproject.toml | 5 +- .../src/gooddata_pandas/__init__.py | 10 + .../src/gooddata_pandas/arrow_convertor.py | 561 +++++++ .../src/gooddata_pandas/arrow_types.py | 21 + .../src/gooddata_pandas/dataframe.py | 145 +- .../src/gooddata_pandas/result_convertor.py | 2 +- .../fixtures/arrow/dim_m_c/dataframe.parquet | Bin 0 -> 3975 bytes .../fixtures/arrow/dim_m_c/meta.json | 58 + .../fixtures/arrow/dim_m_c/result.arrow | Bin 0 -> 3386 bytes .../fixtures/arrow/dim_m_cs/dataframe.parquet | Bin 0 -> 10232 bytes .../fixtures/arrow/dim_m_cs/meta.json | 84 + .../fixtures/arrow/dim_m_cs/result.arrow | Bin 0 -> 4658 bytes .../arrow/dim_m_csy/dataframe.parquet | Bin 0 -> 45421 bytes .../fixtures/arrow/dim_m_csy/meta.json | 117 ++ .../fixtures/arrow/dim_m_csy/result.arrow | Bin 0 -> 8386 bytes .../fixtures/arrow/dim_r_cm/dataframe.parquet | Bin 0 -> 7497 bytes .../fixtures/arrow/dim_r_cm/meta.json | 87 ++ .../fixtures/arrow/dim_r_cm/result.arrow | Bin 0 -> 7730 bytes .../arrow/dim_r_csm/dataframe.parquet | Bin 0 -> 21637 bytes .../fixtures/arrow/dim_r_csm/meta.json | 113 ++ .../fixtures/arrow/dim_r_csm/result.arrow | Bin 0 -> 18738 bytes .../arrow/dim_r_csym/dataframe.parquet | Bin 0 -> 101884 bytes .../fixtures/arrow/dim_r_csym/meta.json | 146 ++ .../fixtures/arrow/dim_r_csym/result.arrow | Bin 0 -> 79634 bytes .../fixtures/arrow/dim_r_m/dataframe.parquet | Bin 0 -> 2739 bytes .../fixtures/arrow/dim_r_m/meta.json | 59 + .../fixtures/arrow/dim_r_m/result.arrow | Bin 0 -> 3234 bytes .../fixtures/arrow/dim_rc_m/dataframe.parquet | Bin 0 -> 3548 bytes .../fixtures/arrow/dim_rc_m/meta.json | 87 ++ .../fixtures/arrow/dim_rc_m/result.arrow | Bin 0 -> 4754 bytes .../arrow/dim_rcs_m/dataframe.parquet | Bin 0 -> 4638 bytes .../fixtures/arrow/dim_rcs_m/meta.json | 114 ++ .../fixtures/arrow/dim_rcs_m/result.arrow | Bin 0 -> 7850 bytes .../arrow/dim_rcs_ym/dataframe.parquet | Bin 0 -> 12616 bytes .../fixtures/arrow/dim_rcs_ym/meta.json | 148 ++ .../fixtures/arrow/dim_rcs_ym/result.arrow | Bin 0 -> 16170 bytes .../arrow/dim_rs_cm/dataframe.parquet | Bin 0 -> 8673 bytes .../fixtures/arrow/dim_rs_cm/meta.json | 114 ++ .../fixtures/arrow/dim_rs_cm/result.arrow | Bin 0 -> 9394 bytes .../arrow/dim_rs_cym/dataframe.parquet | Bin 0 -> 35807 bytes .../fixtures/arrow/dim_rs_cym/meta.json | 147 ++ .../fixtures/arrow/dim_rs_cym/result.arrow | Bin 0 -> 31762 bytes .../flat_attrs_and_metrics/dataframe.parquet | Bin 0 -> 4384 bytes .../arrow/flat_attrs_and_metrics/meta.json | 128 ++ .../arrow/flat_attrs_and_metrics/result.arrow | Bin 0 -> 59234 bytes .../dataframe/fixtures/arrow/manifest.json | 362 +++++ .../arrow/metrics_only/dataframe.parquet | Bin 0 -> 1985 bytes .../fixtures/arrow/metrics_only/meta.json | 29 + .../fixtures/arrow/metrics_only/result.arrow | Bin 0 -> 2418 bytes .../single_metric_many_rows/dataframe.parquet | Bin 0 -> 5073 bytes .../arrow/single_metric_many_rows/meta.json | 154 ++ .../single_metric_many_rows/result.arrow | Bin 0 -> 14074 bytes .../arrow/tot_d0_grand/dataframe.parquet | Bin 0 -> 6064 bytes .../fixtures/arrow/tot_d0_grand/meta.json | 115 ++ .../fixtures/arrow/tot_d0_grand/result.arrow | Bin 0 -> 25010 bytes .../arrow/tot_d0_sub/dataframe.parquet | Bin 0 -> 5874 bytes .../fixtures/arrow/tot_d0_sub/meta.json | 126 ++ .../fixtures/arrow/tot_d0_sub/result.arrow | Bin 0 -> 31874 bytes .../arrow/tot_d0_sub_grand/dataframe.parquet | Bin 0 -> 6149 bytes .../fixtures/arrow/tot_d0_sub_grand/meta.json | 126 ++ .../arrow/tot_d0_sub_grand/result.arrow | Bin 0 -> 32002 bytes .../tot_d0grand_d1grand/dataframe.parquet | Bin 0 -> 16333 bytes .../arrow/tot_d0grand_d1grand/meta.json | 148 ++ .../arrow/tot_d0grand_d1grand/result.arrow | Bin 0 -> 29858 bytes .../arrow/tot_d0grand_d1sub/dataframe.parquet | Bin 0 -> 18952 bytes .../arrow/tot_d0grand_d1sub/meta.json | 148 ++ .../arrow/tot_d0grand_d1sub/result.arrow | Bin 0 -> 31218 bytes .../arrow/tot_d0sub_d1grand/dataframe.parquet | Bin 0 -> 16165 bytes .../arrow/tot_d0sub_d1grand/meta.json | 159 ++ .../arrow/tot_d0sub_d1grand/result.arrow | Bin 0 -> 37490 bytes .../arrow/tot_d0sub_d1sub/dataframe.parquet | Bin 0 -> 18796 bytes .../fixtures/arrow/tot_d0sub_d1sub/meta.json | 159 ++ .../arrow/tot_d0sub_d1sub/result.arrow | Bin 0 -> 39090 bytes .../arrow/tot_d1_grand/dataframe.parquet | Bin 0 -> 28763 bytes .../fixtures/arrow/tot_d1_grand/meta.json | 151 ++ .../fixtures/arrow/tot_d1_grand/result.arrow | Bin 0 -> 27450 bytes .../arrow/tot_d1_sub/dataframe.parquet | Bin 0 -> 33015 bytes .../fixtures/arrow/tot_d1_sub/meta.json | 151 ++ .../fixtures/arrow/tot_d1_sub/result.arrow | Bin 0 -> 32138 bytes .../arrow/tot_d1_sub_grand/dataframe.parquet | Bin 0 -> 33283 bytes .../fixtures/arrow/tot_d1_sub_grand/meta.json | 151 ++ .../arrow/tot_d1_sub_grand/result.arrow | Bin 0 -> 32522 bytes .../arrow/totals_both_dims/dataframe.parquet | Bin 0 -> 9205 bytes .../fixtures/arrow/totals_both_dims/meta.json | 160 ++ .../arrow/totals_both_dims/result.arrow | Bin 0 -> 64218 bytes .../totals_grand_col_sum/dataframe.parquet | Bin 0 -> 79839 bytes .../arrow/totals_grand_col_sum/meta.json | 160 ++ .../arrow/totals_grand_col_sum/result.arrow | Bin 0 -> 64202 bytes .../dataframe.parquet | Bin 0 -> 72934 bytes .../totals_grand_col_two_row_labels/meta.json | 163 ++ .../result.arrow | Bin 0 -> 72026 bytes .../totals_grand_row_sum/dataframe.parquet | Bin 0 -> 9205 bytes .../arrow/totals_grand_row_sum/meta.json | 160 ++ .../arrow/totals_grand_row_sum/result.arrow | Bin 0 -> 64202 bytes .../dataframe.parquet | Bin 0 -> 18469 bytes .../totals_grand_row_two_col_labels/meta.json | 159 ++ .../result.arrow | Bin 0 -> 72026 bytes .../arrow/totals_multi_agg/dataframe.parquet | Bin 0 -> 3958 bytes .../fixtures/arrow/totals_multi_agg/meta.json | 126 ++ .../arrow/totals_multi_agg/result.arrow | Bin 0 -> 31474 bytes .../totals_subtotal_col/dataframe.parquet | Bin 0 -> 87217 bytes .../arrow/totals_subtotal_col/meta.json | 160 ++ .../arrow/totals_subtotal_col/result.arrow | Bin 0 -> 71386 bytes .../totals_subtotal_row/dataframe.parquet | Bin 0 -> 9310 bytes .../arrow/totals_subtotal_row/meta.json | 171 ++ .../arrow/totals_subtotal_row/result.arrow | Bin 0 -> 71386 bytes .../two_dim_metrics_in_cols/dataframe.parquet | Bin 0 -> 11031 bytes .../arrow/two_dim_metrics_in_cols/meta.json | 159 ++ .../two_dim_metrics_in_cols/result.arrow | Bin 0 -> 12602 bytes .../two_dim_metrics_in_rows/dataframe.parquet | Bin 0 -> 13413 bytes .../arrow/two_dim_metrics_in_rows/meta.json | 86 + .../two_dim_metrics_in_rows/result.arrow | Bin 0 -> 4754 bytes .../wide_few_rows_many_cols/dataframe.parquet | Bin 0 -> 79032 bytes .../arrow/wide_few_rows_many_cols/meta.json | 158 ++ .../wide_few_rows_many_cols/result.arrow | Bin 0 -> 62570 bytes .../test_dataframe_for_exec_def_arrow.py | 504 ++++++ packages/gooddata-sdk/pyproject.toml | 4 + .../gooddata_sdk/catalog/export/service.py | 33 + .../tests/export/test_export_service.py | 23 + uv.lock | 1377 +++++++++-------- 120 files changed, 7083 insertions(+), 645 deletions(-) create mode 100644 packages/gooddata-pandas/src/gooddata_pandas/arrow_convertor.py create mode 100644 packages/gooddata-pandas/src/gooddata_pandas/arrow_types.py create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_c/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_c/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_c/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_csy/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_csy/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_csy/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csm/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csm/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csm/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_m/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_m/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_m/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_ym/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_ym/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_ym/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cym/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cym/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cym/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/manifest.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/single_metric_many_rows/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/single_metric_many_rows/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/single_metric_many_rows/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_both_dims/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_both_dims/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_both_dims/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_sum/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_sum/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_sum/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_sum/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_sum/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_sum/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_col/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_col/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_col/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/dataframe.parquet create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json create mode 100644 packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/result.arrow create mode 100644 packages/gooddata-pandas/tests/dataframe/test_dataframe_for_exec_def_arrow.py diff --git a/packages/gooddata-pandas/pyproject.toml b/packages/gooddata-pandas/pyproject.toml index 3627ab9d8..80dd5ebe2 100644 --- a/packages/gooddata-pandas/pyproject.toml +++ b/packages/gooddata-pandas/pyproject.toml @@ -32,7 +32,6 @@ dependencies = [ "gooddata-sdk~=1.62.0", "pandas>=2.0.0,<3.0.0", ] - classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", @@ -47,6 +46,9 @@ classifiers = [ "Typing :: Typed", ] +[project.optional-dependencies] +arrow = ["pyarrow>=23.0.1"] + [project.urls] Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.62.0" Source = "https://github.com/gooddata/gooddata-python-sdk" @@ -63,6 +65,7 @@ test = [ "python-dotenv~=1.0.0", "pyyaml", "tests_support", + "pyarrow>=16.1.0", ] [tool.ty.analysis] diff --git a/packages/gooddata-pandas/src/gooddata_pandas/__init__.py b/packages/gooddata-pandas/src/gooddata_pandas/__init__.py index 261259e0b..e0e542a96 100644 --- a/packages/gooddata-pandas/src/gooddata_pandas/__init__.py +++ b/packages/gooddata-pandas/src/gooddata_pandas/__init__.py @@ -1,6 +1,16 @@ # (C) 2021 GoodData Corporation from gooddata_pandas._version import __version__ +from gooddata_pandas.arrow_types import TypesMapper + +try: + from gooddata_pandas.arrow_convertor import convert_arrow_table_to_dataframe +except ImportError: + + def convert_arrow_table_to_dataframe(*args, **kwargs): + raise ImportError("pyarrow is required for Arrow support. Install it with: pip install gooddata-pandas[arrow]") + + from gooddata_pandas.dataframe import DataFrameFactory from gooddata_pandas.good_pandas import GoodPandas from gooddata_pandas.result_convertor import LabelOverrides diff --git a/packages/gooddata-pandas/src/gooddata_pandas/arrow_convertor.py b/packages/gooddata-pandas/src/gooddata_pandas/arrow_convertor.py new file mode 100644 index 000000000..9c4b6dabc --- /dev/null +++ b/packages/gooddata-pandas/src/gooddata_pandas/arrow_convertor.py @@ -0,0 +1,561 @@ +# (C) 2026 GoodData Corporation +from __future__ import annotations + +import json +from typing import Callable + +import pandas + +from gooddata_pandas.arrow_types import TypesMapper + +try: + import pyarrow as pa +except ImportError as _exc: + raise ImportError( + "pyarrow is required for Arrow support. Install it with: pip install gooddata-pandas[arrow]" + ) from _exc + +# Strings-only mapper: Arrow-backed StringDtype for both string variants. +# Memory and speed win on string columns; all other types stay as default +# (float64, object) — fully backward compatible with the JSON execution path. +_ARROW_STRINGS_MAPPER: dict = { + pa.string(): pandas.StringDtype("pyarrow"), + pa.large_string(): pandas.StringDtype("pyarrow"), +} + +# Schema metadata keys written by the GoodData /binary endpoint. +_META_XTAB = "x-gdc-xtab-v1" +_META_MODEL = "x-gdc-model-v1" +_META_VIEW = "x-gdc-view-v1" + +# Control columns present in every GoodData Arrow table. +_COL_ROW_TYPE = "__row_type" +_COL_TOTAL_REF_PREFIX = "__total_ref" + +# Data-field name prefixes (metric_group_N / grand_total_N). +_FIELD_METRIC_GROUP = "metric_group_" +_FIELD_GRAND_TOTAL = "grand_total_" + +# gdc field-metadata type discriminator values. +_GDC_TYPE_METRIC = "metric" +_GDC_TYPE_TOTAL = "total" + +_REQUIRED_SCHEMA_KEYS = (_META_XTAB, _META_MODEL, _META_VIEW) + + +def _parse_schema_metadata(table: pa.Table) -> dict: + """ + Decode and return all GoodData schema metadata keys from an Arrow table. + + Raises ValueError when metadata is absent or either required key is missing. + Both x-gdc-xtab-v1 and x-gdc-model-v1 must be present to build a DataFrame; + without them the index, column names, and metric titles cannot be reconstructed. + """ + if not table.schema.metadata: + raise ValueError( + "Arrow table has no schema metadata. Expected GoodData metadata keys: " + ", ".join(_REQUIRED_SCHEMA_KEYS) + ) + schema_meta = {k.decode(): json.loads(v) for k, v in table.schema.metadata.items()} + missing = [k for k in _REQUIRED_SCHEMA_KEYS if k not in schema_meta] + if missing: + raise ValueError( + f"Arrow table schema metadata is missing required key(s): {', '.join(missing)}. " + "The table must originate from the GoodData /binary execution endpoint." + ) + return schema_meta + + +def _get_row_types(table: pa.Table) -> list: + """ + Return the __row_type column as a Python list. + + Raises ValueError when the column is absent — it is a required control column + in every GoodData Arrow table (0=data, 1/2=total). + """ + if _COL_ROW_TYPE not in table.schema.names: + raise ValueError( + f"Arrow table is missing required control column '{_COL_ROW_TYPE}'. " + "The table must originate from the GoodData /binary execution endpoint." + ) + return table.column(_COL_ROW_TYPE).to_pylist() + + +def _label_ref_to_id_map(xtab_meta: dict) -> dict[str, str]: + """Map 'l0', 'l1', ... to actual label local IDs.""" + return {ref: info["labelId"] for ref, info in xtab_meta["labelMetadata"].items()} + + +def _label_title(label_id: str, model_meta: dict) -> str | None: + """Get the display title for a label from model metadata.""" + info = model_meta["labels"].get(label_id, {}) + return info.get("labelTitle") or info.get("attributeTitle") or label_id + + +def _metric_title(metric_idx: int, model_meta: dict, xtab_meta: dict) -> str: + """ + Get the display title for a metric by its Arrow index (0 = m0, 1 = m1, ...). + + Matches the JSON-path behaviour: use the model metadata title when present, + otherwise fall back to the local identifier. + """ + local_ids = model_meta["requestedShape"]["metrics"] + local_id = local_ids[metric_idx] + info = model_meta["metrics"].get(local_id, {}) + return info.get("title") or local_id + + +def _build_inline_index( + table: pa.Table, + row_label_refs: list[str], + label_ref_to_id: dict[str, str], + model_meta: dict, + xtab_meta: dict, + resolved_mapper: Callable | None = None, +) -> pandas.Index | None: + """ + Build the pandas index from Arrow row attribute columns. + + Arrow rows encode either normal data (row_type=0) or totals (row_type=2). + For total rows the primary label column contains the lowercase aggregation + function name (e.g. 'sum'); secondary label columns that cover deeper levels + may be empty string — both are filled with the uppercased aggregation name. + + Returns None when there are no row attribute labels (e.g. metrics-only results). + """ + if not row_label_refs: + return None + + col_ids = [label_ref_to_id[ref] for ref in row_label_refs] + row_types = _get_row_types(table) + + # Build a per-row aggregation-name lookup for total rows. + # totalsMetadata maps "t0", "t1", ... → {aggregation: "sum", ...} + # __total_ref column (may carry a Unicode suffix) maps each row to the + # indices of the totals it belongs to. + totals_meta = xtab_meta.get("totalsMetadata", {}) + total_ref_vals: list = [None] * table.num_rows + if totals_meta: + for field in table.schema: + if field.name.startswith(_COL_TOTAL_REF_PREFIX): + total_ref_vals = table.column(field.name).to_pylist() + break + + # Precompute per-row aggregation name and kept-label set for total rows. + agg_for_row: list[str | None] = [None] * table.num_rows + kept_labels_for_row: list[frozenset] = [frozenset()] * table.num_rows + for i, rt in enumerate(row_types): + if rt == 0: + continue + + refs = total_ref_vals[i] + if not refs: + continue + key = f"t{refs[0]}" + entry = totals_meta.get(key, {}) + agg = entry.get("aggregation") + agg_for_row[i] = agg.upper() if agg else None + kept_labels_for_row[i] = frozenset(entry.get("rowLabels", [])) + + arrays: list[list] = [] + for ref, lid in zip(row_label_refs, col_ids): + values = table.column(lid).to_pylist() + processed = [] + for i, v in enumerate(values): + if row_types[i] != 0 and isinstance(v, str): + if ref in kept_labels_for_row[i]: + # Outer label kept as real attribute value in a subtotal row. + processed.append(v) + elif v == "": + # Aggregated level left empty by the server — fill with agg name. + processed.append(agg_for_row[i] if agg_for_row[i] else v) + else: + # Aggregation function marker (e.g. 'sum') — uppercase it. + processed.append(v.upper()) + else: + processed.append(v) + arrays.append(processed) + + names = [_label_title(lid, model_meta) for lid in col_ids] + + # Apply resolved_mapper to the string arrays if provided. + string_dtype = resolved_mapper(pa.string()) if resolved_mapper else None + typed_arrays = [pandas.array(arr, dtype=string_dtype) for arr in arrays] if string_dtype else arrays + + # A single-level MultiIndex is indistinguishable from a flat Index for the + # JSON-path output, so return a plain Index in that case. + if len(col_ids) == 1: + return pandas.Index(typed_arrays[0], name=names[0]) + return pandas.MultiIndex.from_arrays(typed_arrays, names=names) + + +def _build_field_index( + data_fields: list, + col_label_refs: list[str], + label_ref_to_id: dict[str, str], + model_meta: dict, + xtab_meta: dict, +) -> pandas.Index: + """ + Build the pandas index from Arrow field (column) metadata. + + Each data field (metric_group_N or grand_total_N) encodes one combination of + column-attribute label values plus a metric, stored in the 'gdc' field metadata key. + + For metric_group_N: + gdc = {"type": "metric", "index": N, "label_values": [...], ...} + → tuple: (*label_values, metric_title) + + For grand_total_N (subtotals): + gdc = {"type": "total", "agg_function": "sum", "metric_index": N, + "label_values": [...], ...} + where label_values may be partial (covers only the outer label levels). + → tuple: (*label_values, AGG, ..., AGG, metric_title) + (remaining levels padded with the uppercased aggregation name) + + When there are no column labels (metrics-only dimension) the index is a flat + Index of metric titles rather than a MultiIndex. + """ + n_col_labels = len(col_label_refs) + col_label_ids = [label_ref_to_id[ref] for ref in col_label_refs] + + tuples: list = [] + for field in data_fields: + gdc = json.loads(field.metadata[b"gdc"]) + label_values: list = list(gdc.get("label_values", [])) + + if gdc["type"] == _GDC_TYPE_METRIC: + m_title = _metric_title(gdc["index"], model_meta, xtab_meta) + else: # "total" + m_title = _metric_title(gdc["metric_index"], model_meta, xtab_meta) + agg = gdc["agg_function"].upper() + # Pad remaining column-label levels with the aggregation name + label_values = label_values + [agg] * (n_col_labels - len(label_values)) + + if n_col_labels == 0: + tuples.append(m_title) + else: + tuples.append(tuple(label_values) + (m_title,)) + + if n_col_labels == 0: + # No column attribute labels — just a flat Index of metric names + return pandas.Index(tuples, name=None) + + names = [_label_title(lid, model_meta) for lid in col_label_ids] + [None] + return pandas.MultiIndex.from_tuples(tuples, names=names) + + +def _wrap_for_columns(idx: pandas.Index | None) -> pandas.Index | None: + """ + Wrap a plain flat Index as 1-tuples when it is used as the DataFrame column + index. The JSON-path output always uses at least 1-tuples for column labels + so that the shape is consistent regardless of how many attribute levels are + present. MultiIndex (2+ levels) and None (→ RangeIndex) are returned as-is. + """ + if idx is None or isinstance(idx, pandas.MultiIndex): + return idx + return pandas.Index([(v,) for v in idx]) + + +def compute_row_totals_indexes(table: pa.Table, execution_dims: list) -> list[list[int]]: + """ + Compute row_totals_indexes compatible with DataFrameMetadata from an Arrow table. + + Returns a list with one inner list per header column in the output-row dimension, + matching the JSON-path DataFrameMetadata.row_totals_indexes format (one slot per + dimension header, including the measureGroup placeholder which always → []). + + Non-transposed case (Arrow rows = output rows): + Every Arrow row with __row_type != 0 is a total row; it appears in the + total-indexes list for every attribute-level header in the row dimension. + + Transposed / metrics-only case (Arrow fields = output rows): + Total rows are grand_total_N fields. A field is total at level j only when + j >= len(gdc["label_values"]), i.e. that label level is being aggregated. + """ + schema_meta = _parse_schema_metadata(table) + xtab_meta = schema_meta[_META_XTAB] + is_transposed = schema_meta[_META_VIEW]["isTransposed"] + + row_label_refs: list[str] = xtab_meta["computedShape"]["rows"] + col_label_refs: list[str] = xtab_meta["computedShape"]["cols"] + label_ref_to_id = _label_ref_to_id_map(xtab_meta) + id_to_ref = {v: k for k, v in label_ref_to_id.items()} + + use_field_rows = is_transposed or not row_label_refs + output_row_refs = col_label_refs if use_field_rows else row_label_refs + output_row_ref_set = set(output_row_refs) + + # Find which execution dimension contains the output-row attribute refs. + # Use attributeHeader["label"]["id"] (GoodData label object ID) which matches + # the labelId values in the Arrow labelMetadata — not localIdentifier, which is + # the user-given alias and may differ. + def _label_ids_in_dim(dim: dict) -> set: + return {h["attributeHeader"]["label"]["id"] for h in dim.get("headers", []) if "attributeHeader" in h} + + if output_row_refs: + ref_label_ids = {label_ref_to_id[r] for r in output_row_refs} + row_dim = next( + (dim for dim in execution_dims if ref_label_ids <= _label_ids_in_dim(dim)), + execution_dims[0] if execution_dims else {}, + ) + else: + # Metrics-only: the dimension containing measureGroupHeaders is the output-row dim. + row_dim = next( + (dim for dim in execution_dims if any("measureGroupHeaders" in h for h in dim.get("headers", []))), + execution_dims[0] if execution_dims else {}, + ) + + if use_field_rows: + # Output rows are the data fields in schema order. + all_data_fields = [ + f for f in table.schema if f.name.startswith(_FIELD_METRIC_GROUP) or f.name.startswith(_FIELD_GRAND_TOTAL) + ] + + result: list[list[int]] = [] + attr_level = 0 # position within output_row_refs + for header in row_dim.get("headers", []): + if "measureGroupHeaders" in header: + result.append([]) + else: + label_id = header["attributeHeader"]["label"]["id"] + ref = id_to_ref.get(label_id) + if ref is None or ref not in output_row_ref_set: + result.append([]) + else: + j = attr_level + total_idxs = [ + k + for k, f in enumerate(all_data_fields) + if (gdc := json.loads(f.metadata[b"gdc"]))["type"] == _GDC_TYPE_TOTAL + and j >= len(gdc.get("label_values", [])) + ] + result.append(total_idxs) + attr_level += 1 + return result + + else: + # Output rows are Arrow rows; every total row (row_type != 0) is listed + # in the total-indexes for every attribute level. + row_types = _get_row_types(table) + total_row_idxs = [i for i, rt in enumerate(row_types) if rt != 0] + + result = [] + for header in row_dim.get("headers", []): + if "measureGroupHeaders" in header: + result.append([]) + else: + label_id = header["attributeHeader"]["label"]["id"] + ref = id_to_ref.get(label_id) + if ref is None or ref not in output_row_ref_set: + result.append([]) + else: + result.append(total_row_idxs) + return result + + +def _compute_primary_labels_from_inline( + table: pa.Table, + label_refs: list[str], + label_ref_to_id: dict[str, str], + xtab_meta: dict, +) -> dict[int, dict[str, str]]: + """Build primary_labels mapping from Arrow row-attribute columns. + + For each attribute level j the result maps primary_label_value → display_label_value + for every data row (row_type==0). Total rows are excluded because their column + values are aggregation-function markers, not real attribute values. + + When primaryLabelId == labelId the mapping is identity ({v: v}). + When they differ the function looks for a separate Arrow column named + primaryLabelId; failing that it falls back to identity. + """ + result: dict[int, dict[str, str]] = {} + label_meta = xtab_meta.get("labelMetadata", {}) + row_types = _get_row_types(table) + data_row_mask = [rt == 0 for rt in row_types] + + for j, ref in enumerate(label_refs): + info = label_meta.get(ref, {}) + label_id = label_ref_to_id.get(ref, info.get("labelId", "")) + primary_label_id = info.get("primaryLabelId", label_id) + + display_vals = table.column(label_id).to_pylist() + + if label_id == primary_label_id: + mapping: dict[str, str] = { + v: v for v, is_data in zip(display_vals, data_row_mask) if is_data and isinstance(v, str) + } + elif primary_label_id in table.schema.names: + primary_vals = table.column(primary_label_id).to_pylist() + mapping = { + p: d + for p, d, is_data in zip(primary_vals, display_vals, data_row_mask) + if is_data and isinstance(p, str) and isinstance(d, str) + } + else: + # Fallback: identity (primary label data not present in table) + mapping = {v: v for v, is_data in zip(display_vals, data_row_mask) if is_data and isinstance(v, str)} + + result[j] = mapping + return result + + +def _compute_primary_labels_from_fields( + all_data_fields: list, + n_col_labels: int, +) -> dict[int, dict[str, str]]: + """Build primary_labels mapping from Arrow field (column) metadata. + + Each metric_group field carries gdc.label_values (display) and + gdc.primary_label_values (primary) for every column-label level. Total + (grand_total) fields are skipped, matching the JSON-path behaviour where + totalHeader rows do not contribute to primary_attribute_labels_mapping. + """ + result: dict[int, dict[str, str]] = {} + if n_col_labels == 0: + return result + + for field in all_data_fields: + gdc = json.loads(field.metadata[b"gdc"]) + if gdc["type"] != _GDC_TYPE_METRIC: + continue + label_values: list = gdc.get("label_values", []) + primary_label_values: list = gdc.get("primary_label_values", []) + for j in range(min(n_col_labels, len(label_values), len(primary_label_values))): + display = label_values[j] + primary = primary_label_values[j] + if not isinstance(display, str) or not isinstance(primary, str): + continue + if j not in result: + result[j] = {} + result[j][primary] = display + + return result + + +def compute_primary_labels( + table: pa.Table, +) -> tuple[dict[int, dict[str, str]], dict[int, dict[str, str]]]: + """ + Compute primary_labels_from_index and primary_labels_from_columns from an Arrow table. + + Mirrors the primary_attribute_labels_mapping built by the JSON execution path so that + DataFrameMetadata is fully populated by the Arrow path too. + + Returns: + (primary_labels_from_index, primary_labels_from_columns) + """ + schema_meta = _parse_schema_metadata(table) + xtab_meta = schema_meta[_META_XTAB] + is_transposed = schema_meta[_META_VIEW]["isTransposed"] + + label_ref_to_id = _label_ref_to_id_map(xtab_meta) + row_label_refs: list[str] = xtab_meta["computedShape"]["rows"] + col_label_refs: list[str] = xtab_meta["computedShape"]["cols"] + + all_data_fields = [ + f for f in table.schema if f.name.startswith(_FIELD_METRIC_GROUP) or f.name.startswith(_FIELD_GRAND_TOTAL) + ] + + inline_primary = ( + _compute_primary_labels_from_inline(table, row_label_refs, label_ref_to_id, xtab_meta) if row_label_refs else {} + ) + field_primary = _compute_primary_labels_from_fields(all_data_fields, len(col_label_refs)) + + # Mirror convert_arrow_table_to_dataframe's orientation logic: + # isTransposed or no inline → field cols become output rows (index) + if is_transposed or not row_label_refs: + return field_primary, inline_primary + return inline_primary, field_primary + + +def convert_arrow_table_to_dataframe( + table: pa.Table, + self_destruct: bool = False, + types_mapper: TypesMapper = TypesMapper.DEFAULT, + custom_mapping: dict | None = None, +) -> pandas.DataFrame: + """ + Convert a pyarrow Table returned by the GoodData /binary execution endpoint + into a pandas DataFrame matching the output of the JSON-based execution path. + + Arrow table structure + --------------------- + Control columns: + __row_type int8 0=data row, 2=total/grand-total row + __total_ref list (present only when totals exist) indices being summed + + Row attribute columns: + One column per label in computedShape.rows, named by the label local ID. + For total rows (row_type=2) the value is the lowercase aggregation function + name (e.g. 'sum') — we uppercase it. + + Data columns (in schema order, may be interleaved): + metric_group_N double regular data — gdc metadata has type="metric" + grand_total_N double subtotals — gdc metadata has type="total" + + Transposition + ------------- + The server may place either the output-row dimension or the output-column + dimension as Arrow rows. x-gdc-view-v1.isTransposed records which choice was + made: + + isTransposed=False: + Arrow rows → output rows (inline_index) + Arrow cols → output columns (field_index) + data matrix stays as-is + + isTransposed=True: + Arrow rows → output columns (inline_index) + Arrow cols → output rows (field_index) + data matrix is transposed + + When there are no row attribute labels (inline_index is None) the field + dimension always becomes the output rows regardless of isTransposed. + """ + if types_mapper is TypesMapper.DEFAULT: + resolved_mapper: Callable | None = None + elif types_mapper is TypesMapper.ARROW_STRINGS: + resolved_mapper = _ARROW_STRINGS_MAPPER.get + elif types_mapper is TypesMapper.CUSTOM: + if custom_mapping is None: + raise ValueError("custom_mapping must be provided when types_mapper=TypesMapper.CUSTOM") + resolved_mapper = custom_mapping.get + else: + raise ValueError("Unknown types_mapper value") + + schema_meta = _parse_schema_metadata(table) + xtab_meta = schema_meta[_META_XTAB] + model_meta = schema_meta[_META_MODEL] + is_transposed = schema_meta[_META_VIEW]["isTransposed"] + + label_ref_to_id = _label_ref_to_id_map(xtab_meta) + + # Collect all data columns in their original schema order. + # metric_group_N and grand_total_N may be interleaved (e.g. for subtotals + # grouped by the outer dimension label), so preserve schema ordering. + all_data_fields = [ + f for f in table.schema if f.name.startswith(_FIELD_METRIC_GROUP) or f.name.startswith(_FIELD_GRAND_TOTAL) + ] + + data_field_names = [f.name for f in all_data_fields] + data_matrix = ( + table.select(data_field_names) + .to_pandas(self_destruct=self_destruct, types_mapper=resolved_mapper) + .to_numpy(dtype=float, na_value=float("nan")) + ) # shape: (n_arrow_rows, n_data_cols) + + # computedShape.rows → label refs for Arrow row attribute columns + # computedShape.cols → label refs encoded in field metadata + row_label_refs: list[str] = xtab_meta["computedShape"]["rows"] + col_label_refs: list[str] = xtab_meta["computedShape"]["cols"] + + inline_index = _build_inline_index(table, row_label_refs, label_ref_to_id, model_meta, xtab_meta, resolved_mapper) + field_index = _build_field_index(all_data_fields, col_label_refs, label_ref_to_id, model_meta, xtab_meta) + + # When there are no row attribute labels (inline_index is None) the server + # packs everything into the field dimension; always use field_index as rows. + if is_transposed or inline_index is None: + return pandas.DataFrame(data_matrix.T, index=field_index, columns=_wrap_for_columns(inline_index)) + + return pandas.DataFrame(data_matrix, index=inline_index, columns=_wrap_for_columns(field_index)) diff --git a/packages/gooddata-pandas/src/gooddata_pandas/arrow_types.py b/packages/gooddata-pandas/src/gooddata_pandas/arrow_types.py new file mode 100644 index 000000000..8d7167f12 --- /dev/null +++ b/packages/gooddata-pandas/src/gooddata_pandas/arrow_types.py @@ -0,0 +1,21 @@ +# (C) 2026 GoodData Corporation +from __future__ import annotations + +from enum import Enum + + +class TypesMapper(Enum): + """ + Controls how Arrow column types are mapped to pandas dtypes during conversion. + + DEFAULT — no remapping; produces float64 and object strings, identical to + the JSON execution path. Safe default, fully backward compatible. + ARROW_STRINGS — strings use Arrow-backed StringDtype (lower memory, faster); + all numeric types unchanged. Recommended next step for services. + CUSTOM — use the custom_mapping dict passed alongside. Raises ValueError + if custom_mapping is not provided. + """ + + DEFAULT = "default" + ARROW_STRINGS = "arrow_strings" + CUSTOM = "custom" diff --git a/packages/gooddata-pandas/src/gooddata_pandas/dataframe.py b/packages/gooddata-pandas/src/gooddata_pandas/dataframe.py index d431a95e5..75b531ab2 100644 --- a/packages/gooddata-pandas/src/gooddata_pandas/dataframe.py +++ b/packages/gooddata-pandas/src/gooddata_pandas/dataframe.py @@ -1,7 +1,10 @@ # (C) 2021 GoodData Corporation from __future__ import annotations -from typing import Callable, Literal, Union +from typing import TYPE_CHECKING, Callable, Literal, Union + +if TYPE_CHECKING: + import pyarrow as pa import pandas from gooddata_api_client import models @@ -16,7 +19,20 @@ ResultSizeDimensions, ) +from gooddata_pandas.arrow_types import TypesMapper from gooddata_pandas.data_access import compute_and_extract + +try: + from gooddata_pandas.arrow_convertor import ( + compute_primary_labels, + compute_row_totals_indexes, + convert_arrow_table_to_dataframe, + ) + + _ARROW_AVAILABLE = True +except ImportError: + _ARROW_AVAILABLE = False + from gooddata_pandas.result_convertor import ( _DEFAULT_PAGE_SIZE, DataFrameMetadata, @@ -51,6 +67,12 @@ class DataFrameFactory: - for_exec_def(self, exec_def: ExecutionDefinition, label_overrides: Optional[LabelOverrides] = None, result_size_dimensions_limits: ResultSizeDimensions = (), result_size_bytes_limit: Optional[int] = None, page_size: int = _DEFAULT_PAGE_SIZE,) -> Tuple[pandas.DataFrame, DataFrameMetadata]: + - for_exec_def_arrow(self, exec_def: ExecutionDefinition, + on_execution_submitted: Optional[Callable[[Execution], None]] = None) + -> Tuple[pandas.DataFrame, DataFrameMetadata]: + - for_arrow_table(self, table: pa.Table, + execution_response: Optional[BareExecutionResponse] = None) + -> Tuple[pandas.DataFrame, DataFrameMetadata]: - for_exec_result_id(self, result_id: str, label_overrides: Optional[LabelOverrides] = None, result_cache_metadata: Optional[ResultCacheMetadata] = None, result_size_dimensions_limits: ResultSizeDimensions = (), @@ -282,7 +304,8 @@ def for_created_visualization( pandas.DataFrame: A DataFrame instance. """ execution_definition = self._sdk.compute.build_exec_def_from_chat_result( - created_visualizations_response, is_cancellable=is_cancellable + created_visualizations_response, + is_cancellable=is_cancellable, ) return self.for_exec_def( exec_def=execution_definition, @@ -376,6 +399,124 @@ def for_exec_def( grand_totals_position=grand_totals_position, ) + def for_exec_def_arrow( + self, + exec_def: ExecutionDefinition, + on_execution_submitted: Callable[[Execution], None] | None = None, + self_destruct: bool = False, + types_mapper: TypesMapper = TypesMapper.DEFAULT, + custom_mapping: dict | None = None, + ) -> tuple[pandas.DataFrame, DataFrameMetadata]: + """ + Creates a DataFrame from an execution definition using the Arrow IPC binary format. + + Compared to for_exec_def(), this skips the page-by-page JSON deserialization and + converts the result in one shot via pyarrow, which is significantly faster for large results. + + Returns the same ``(DataFrame, DataFrameMetadata)`` tuple as :meth:`for_exec_def` so that + callers can switch between the two paths without changing their code. + + Requires pyarrow to be installed (pip install gooddata-pandas[arrow]). + + Args: + exec_def (ExecutionDefinition): Execution definition. + on_execution_submitted (Optional[Callable[[Execution], None]]): Callback fired after + the execution is submitted to the backend. + self_destruct (bool): If True, Arrow buffers are freed during conversion, reducing + peak native memory at the cost of not being able to reuse the table. + types_mapper (TypesMapper): Controls how Arrow types are mapped to pandas dtypes. + ``TypesMapper.DEFAULT`` (default) — no mapping; produces float64 and object + strings, identical to the JSON execution path. + ``TypesMapper.ARROW_STRINGS`` — strings use Arrow-backed StringDtype (lower + memory, faster); all numeric types unchanged. + ``TypesMapper.CUSTOM`` — uses ``custom_mapping`` dict; raises ValueError if + ``custom_mapping`` is not provided. + custom_mapping (Optional[dict]): Arrow type → pandas dtype mapping dict. + Only used when ``types_mapper=TypesMapper.CUSTOM``, ignored otherwise. + + Returns: + Tuple[pandas.DataFrame, DataFrameMetadata] + + """ + if not _ARROW_AVAILABLE: + raise ImportError( + "pyarrow is required to use for_exec_def_arrow(). Install it with: pip install gooddata-pandas[arrow]" + ) + + execution = self._sdk.compute.for_exec_def(workspace_id=self._workspace_id, exec_def=exec_def) + + if on_execution_submitted is not None: + on_execution_submitted(execution) + + exec_response = execution.bare_exec_response + table = exec_response.read_result_arrow() + df = convert_arrow_table_to_dataframe( + table, self_destruct=self_destruct, types_mapper=types_mapper, custom_mapping=custom_mapping + ) + row_totals_indexes = compute_row_totals_indexes(table, exec_response.dimensions) + primary_labels_from_index, primary_labels_from_columns = compute_primary_labels(table) + metadata = DataFrameMetadata( + row_totals_indexes=row_totals_indexes, + column_totals_indexes=[], + execution_response=exec_response, + primary_labels_from_index=primary_labels_from_index, + primary_labels_from_columns=primary_labels_from_columns, + ) + return df, metadata + + def for_arrow_table( + self, + table: pa.Table, + execution_response: BareExecutionResponse | None = None, + self_destruct: bool = False, + types_mapper: TypesMapper = TypesMapper.DEFAULT, + custom_mapping: dict | None = None, + ) -> tuple[pandas.DataFrame, DataFrameMetadata]: + """ + Creates a DataFrame from an already-obtained PyArrow Table. + + Use this when you have fetched Arrow IPC bytes yourself (e.g. from the raw export + REST API or a future Flight RPC endpoint) and converted them to a ``pa.Table``. + For the common case of submitting an execution and reading the result in one call, + use :meth:`for_exec_def_arrow` instead. + + Args: + table: PyArrow Table as returned by the GoodData binary execution endpoint. + execution_response: Optional ``BareExecutionResponse`` from the execution that + produced this table. When provided, ``DataFrameMetadata.row_totals_indexes`` + is computed accurately and ``DataFrameMetadata.execution_response`` is + populated. When omitted, ``row_totals_indexes`` is an empty list and + ``execution_response`` is ``None`` in the returned metadata. + self_destruct: If True, Arrow buffers are freed during conversion, reducing + peak native memory at the cost of not being able to reuse the table. + types_mapper: Controls how Arrow types are mapped to pandas dtypes. + custom_mapping: Arrow type → pandas dtype mapping dict. + Only used when ``types_mapper=TypesMapper.CUSTOM``. + + Returns: + Tuple[pandas.DataFrame, DataFrameMetadata] + """ + if not _ARROW_AVAILABLE: + raise ImportError( + "pyarrow is required to use for_arrow_table(). Install it with: pip install gooddata-pandas[arrow]" + ) + + df = convert_arrow_table_to_dataframe( + table, self_destruct=self_destruct, types_mapper=types_mapper, custom_mapping=custom_mapping + ) + row_totals_indexes = ( + compute_row_totals_indexes(table, execution_response.dimensions) if execution_response is not None else [] + ) + primary_labels_from_index, primary_labels_from_columns = compute_primary_labels(table) + metadata = DataFrameMetadata( + row_totals_indexes=row_totals_indexes, + column_totals_indexes=[], + execution_response=execution_response, + primary_labels_from_index=primary_labels_from_index, + primary_labels_from_columns=primary_labels_from_columns, + ) + return df, metadata + def for_exec_result_id( self, result_id: str, diff --git a/packages/gooddata-pandas/src/gooddata_pandas/result_convertor.py b/packages/gooddata-pandas/src/gooddata_pandas/result_convertor.py index fdc953979..5c7f08588 100644 --- a/packages/gooddata-pandas/src/gooddata_pandas/result_convertor.py +++ b/packages/gooddata-pandas/src/gooddata_pandas/result_convertor.py @@ -442,7 +442,7 @@ class DataFrameMetadata: row_totals_indexes: list[list[int]] column_totals_indexes: list[list[int]] - execution_response: BareExecutionResponse + execution_response: BareExecutionResponse | None primary_labels_from_index: dict[int, dict[str, str]] primary_labels_from_columns: dict[int, dict[str, str]] diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_c/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_c/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..52b9f49c325a1ebf23fff5a56a38c39b92c9bcfd GIT binary patch literal 3975 zcmcIn%WoQI5MMiv?O2ZFMg@Unr3f|HksOzYaYK|y{=jBgVr+wJ7PhX)zJRs&L11~T zBj3_&u+Pve>H z*}7RwYnn8vv9Lrm*lz+X+~2whXGfq#f!wyGuv-A?A@zIDbHj> ztjZeinxR}X*Ty}U7Z(z$VOABrvaodBmd!0LY^btm)(u?|8zJ*FAX1l#}wwYjlKj!{nEb!G- z;K}6tS(J1Dxc%Nz#G)iNGmQ1Tg4mDu{3`xdk^rlv` zP85c4026}cnr!kCZ}Ncgz%T1y4zq*-_dZJAxamJWJ`HRrqJhzKhUHKX#a31g-dtUA z#@46k3r=sU>hTi9*h_nO%11>oxCgMsTMweUQ%0fpsopy5>FOGVJg9xU;J6VE4m$bl zto56bk@TBzuP*bZQ78OV6`{_<3;;cA7GJL$ZJd2et~V4z$I@_UIk+7315tXN?pH2H zmLvXS$}@{{xo!5A{VMT1yZizESd}C~C=37ia~Gi%6t5tVRZyZrWbycbzKw+&C;Cif z-F}8E@j~k0n&@;-m5*HXXR_590 zAy=rD1v($**iJcdw(9>4CW@B(QsK;R;e46XsgtRWuu^>-y#KzsT z^U=VrDy!Jh8KHWRpa1Ncek(}9#qw{X2g z>m&w^XY&m%8EY2Vkcx9;l!~5XJ8ChKvxIQ8R*Yoy&4k?}kxl|1l1KgZ9g3$Zv7xq{ zj|JsI-1et&4FP(+b&w@}7TA2S$mXgNy@9y|_MJv~w~c!-5W_AV10I|o=a9`Pe*9nc z+>r{oLjkz?ioQGT^mtX!a#b;OPL1@uDW=qZo)6_Q$YVjzH-r@MHPy#Y!i6@T8)uKt znqNFaqvF%^O`gSbvS;_u8DFcY)qpeS^td}uqLzo=$E@!BHF!2{6$|Mo;hr9k!o4L# zM1mt}c}ondEkVJv$yk})mG!lUgJK%ks=1C@g(qVqN1P70)A#r&s#(1 z(?jP;>TrI<%oEF2t6Pr>Bn8DwAVec1;ul0OSz?E>c6`JB*Sqm$!=08yS8IYM;(dbq z0`Hxo-5>0sg6>crUyZNdZ_4Hku~xf5UZTG4OVVe*KE3u$;MH}HM<*FiBicyp(7JdZdhRkl~qupaZn)%V`sXYG;~kRc30l`qGygSUC%^{aaIUcJw%niMA| zC(e#B)&gAJ%vg>Q^s{ZOhiztk7y-I6EBq{`nUsINo5ltQG5)8Eu>Q&fn$lroK?RO2d!2@?z1Ti0P@OmV@q@v<|6<3L> zjFt@358Y_#I7uDz_;?#Bhr3Ee{%oSeCndC%(o$VuhtiRACGPNQ6u4*cD zBoLvfsnjori*<9#1H4Ycnr@L*;RY6zRBjNjaZU?|b#zMGoP~KLEF9y=giRBo!OY}k zY6e+hZ0ky17L_}z)54bjTRjIq>Ad)H2@Mw4Wh~IPDoVt9-FaUu7+pFGkC4-gz=s&q z{0z=14rDi-sjI*~;7%X`)x~sKxf;o&Uf$2xCh&d-l5P&Vd(!c*py(;n_(lmK`ZZ51 z>Z57T-#Ry1t6%H)j+FIFO0D0A0;%TwS{3(1MMbiPoBF5>#YCb!DI>=24gK}P zfA_Xa}J<>j}9r#I^d-&}cB*gJjc!NjxPVq@UWA5ZT7U3huw-q3H)-xp~6=^Jkf zlTh4sK3k;v5ibYKqKZAbaye5wL`P?oa!PTc%2HtDTl_uV;`_Lli~4`2{{d{!7PkNZ literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..cfe8b750c13d1c9b1d7e7d74767351a521c3489d GIT binary patch literal 10232 zcmd5?TWlL?6`rJN*3EX=Y>ABx5g3bgQf=GVPSe(_R`O&L-|D!rv-OQj@OZ|TWM=I8 z7CTkns8sQ?fDq~fiv-Igw+PkjIc0;zpiA?;hG?E_i?yDuQlneoIk^N$^8 z)wEdcc>JF;=R5zo|I@D1Nw0On>a>0(24B=EikiOs=-t|tDd#(Z4|ZpM7TWl6z)D$9 zS#4*4K5d<}PR`mbD#dP5d2Q6Z$tp!rC!FJOofsQCHg3eZ{b6G7zrXt^@FlqU=c^x^ z;HVV4Mdd{ta&Tnz|TkStT_-z33 zzH#+|364s!TU1`eAyzkbgIN2S;;Dlg)YtHW`CNK69AAkP@P1XUGqU-~C5rkWVYlTl4bFjWk+P0c zaG8d$%cmzDZfXMHwZMbju0g&#?tVN5*kpUdU?*3p(Xa=Glm`0AG55V=08Ms0geF%< zgeD`cpAQ=Jz2ojrCIFr6gNRP9j)*=q6*Ta7UUEOgp@wXa2v4q#2v2UlAGsRz#}@Zp zj5xAsB09M`BDy9QO>KT}%KhX7z>+-_Vae4IVa>~fX1kxf?B07Ba3MkD9(-V@9WBT; z+cmZF!&lsQUIAFL#o~6!)e*O=uS^C*?~U2s8*|@z)&2N0fJ`=DL?%~9L>^c&HMV{{ z?Y=t=&}2VGXmWK#X#J*5&3*5b`^js)P3t?fx@rCD0mvtN^_wj9@@{`QX1hP;{`QP} z@3XTP2DEM>jBGB4TB&W{nz2o|Ew-mKpoe|3mY2AE!~V{xn=YlX6skf?lp3x#onLhk z&BpchGftPnq4XhMX1wW=@*)q9xR`vCFIDSZ7w{D;yufXmQ54Y4X169k)PnwA<#>EX zYKgV(KB3BPLI1~fk#FX?d@~OiH(k60>@ag6;PtnHXD_*K-8uv7DwHzDG@AKlt3fJa zq#l7XeJdHvqaTR+DMV^HjMJcTQK;sd7tWLB(-1WFlUjnHGnXDpGmsplm4Wq0)#_*7 zL0aiKpSe;4M^ZDrhB6>O?~kUN{)d+U6@S*^>%f>2@Wc^F7wR;YFJ^?G#&lN;VcG%8gISAE`do^u`- zv_!S&X^H0+&n>!cQTCH`GI=firt<#7{@Ar3e@bgKO()5K?ehU-U*U9rq}7ufTd;YCGB;|wnXO{5k7<0hi zX%IfCl%#~O)8<0u8Y>ngh$AT(N;UGCoKO%CyN@L7UGU{HQ6a|^YI3|t%V3jax!@h5 zr<7_I!h$v?MKgAId!!Uy=n8x^>4s>>dBA12Q|Pk$uS9U;4z?6SV4 zT6S?w_6g*AE9-+iNhhSMN-mRm1HK&bS+iU+*qp2bhWKmdpawvUda_t+LckyD_+t## zync7xO_pno75gLSA#g)&iHiksM)W{GtaeN_3da91E%@C5%NQCmvd+X z^3PikmtIh<^?SKcvdu0=2E~D?{%K95W_5*}sjz?R z_ipyw^Q=b(o04&1o(Jn(Cb`YRY$)gc3+#DvKWA|EB=a@n^}}3}6!@UOk%O6p4PM&G zcrVHGjhT(PH1tfLe;a07oGndeB!49@LO)VwDAOL6fw?sz#-TR_JrLhGJ3&wD)Ur~v zjI%b*-Y~DgeYDLfGc3+LyZN-gCC|BAkxp!jZmq!#jB|NkPnfBsc#ZX)mu0L~&hN&y z)+$B$JdwpiL$7w?QN@F&hz1-lXdfOgq6r4*2|Q*n_*eX^C8V#!-ca{jI!GSk z>*eY9iuBOMeR*wzycp6o@e=CU&urGz^|1ugT4>Ah!qDrxJ^8Cjkgmu=l_-IKpeEBRxL_Z;#={;a_H$CH=O)F$&X`ac%y=@-G| zypCB9?=!;qJ_0_8ei99`_W=F%XIK!G1!K@5{8m0td*siRE0oywe|Q+>5A|yoMXkgC`THLszR`yO literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json new file mode 100644 index 000000000..bb3571a41 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json @@ -0,0 +1,84 @@ +{ + "result_id": "8168440bbfd910f40c33e06a804cb116bcf0f201:734518631e68f6b8d7415109b3dc2397635b3b39501cd9688d29005f76cdd125", + "row_totals_indexes": [ + [] + ], + "primary_labels_from_index": {}, + "primary_labels_from_columns": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + }, + "1": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + } + }, + "dimensions": [ + { + "headers": [ + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_m_cs/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..780898463540117377e52be19d94aecc55e3ac60 GIT binary patch literal 4658 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json new file mode 100644 index 000000000..af67d53bc --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json @@ -0,0 +1,87 @@ +{ + "result_id": "7d21dde2d76befdec0a32017aede0a68f9811a6d:01ba1a7231afda52d099d9e03b3ca595b72000e7eeeeb9ecdb32470bb7a1f236", + "row_totals_indexes": [ + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + } + }, + "primary_labels_from_columns": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_cm/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..643711226f7329103f0f3cd715321a41bee6457b GIT binary patch literal 7730 zcmeHMU2GIp6uvA=X=)*rtZ0lO%|HyA#dJXhn_#9A1fvL)63|kY>F%)IIJ>jX&i03; zfd_fOkl>RkK4BnAfuoVK;Muip}3tblT*k+CL5rGd?5b!--^M+;>}&>05{3)S?JpGKgU|6Hg)@V;jJ~0rE6o8|u8I zDc!1;m0C$M!6oui#z>|VW8gI+y%LvN1t}~krfDR*bEaB4%qQs>$f)4$SiQAF3QGw? zN#``hNSXsuD_UCETB;*yYQ)xVtyVOpkFrBIQi^Fw4~C(Y9?!+h>@zXNR1>;^dCREk z=PFu)Yh8}x0RXHLS`^JMAQaI`KmbKbg#}~W;4pIxrpQaCWfRLvB?4hdH{z-hRZ@B` z4O2M0(s~+iZnMV2l8}-XEetPQ*dh&LDMNiHr)EtxzNtqc*W}&BJITjb+%ta{g!Dcr z*C||%k(f^VgCxB6?;51dH5X6+66~%eDLt-gOM0=-hi?}O@6WLI*&fvPK3k`nN?b7& z(nV|Gzs?@>PfsrQY{Uvot2H&HrcJ0SsVxAemh@o`EmFFmz2D2M;-$D#TP|{^raqY( zHp->a{J^-(c~S(1Tczn{Pcof=QXs}mLr>EV2uo}A6uDr1&W!82A$4IQQ#TbYTVy9b zc`Ab=SJsUwf|`m*U9RVV6FuQInAvg@o8$PY-&DG}o7na{Zv2=JdR|IqJ8*Kd89l4w zg8ByFN-+Yk2Og@TAyNZXA8G-xN})o7rI6EaBXRDi~-jBR~1;7 zmtws!U98Y&N+4BYjYD4_R&1+ESl{9p1FZXR7wb6eQqix^TUbr-kzFrgj_r1P6Y6UG z%1;hi{oJhcb2dfpVMaO?ZZrd zjZE#=$2ryjTX4S$%*#qK4`GgJVJ_p>5-?M5;S#oD%pvIQ!%TjzfO#&*8esEq{}gff z5`0zB&r2=LyKLX?#~dOKcUI|V=M`AN$u5t3Zt248!%F^bnaaO)xKRi3knZ!?V?bEP zX7d={#6lRMV!ekZ(W;0a_ZWH)iG98wx=agy8K1k@rgpf?{n58csKja{1Dge?UWA8usL=aA8pVAvO7CN` zWh0*1Tvw20kj_}Puogz7_dbhIf~PO&N9}O|gH z78LSLc0d6c35h`MD z&>pAK%zqhMmyGw}Q|NWwFnd%bYi`nWX3ysI+iAToy#<6FC?5}u%TH}P@a^W{Y5Dfz zZ3kMH{~|A=^7&Hv_?n5GC(~!;4-XzZxKBRA$N$_jB9D!Zj^0fD=J2%-FW7r*;)49B zz3%B-i?^M+I4)1@3>{Cr`i-0q9bfbCz6seTGm_u6`>eyivfos%8R?*`N5vKH}O56_oGj~;CzQpU2^!b+{9NO{NT*L_xi@+`_XZZCp7k@ zC3oer!%z6GPX6fdll-;F&ob3-p8ZKCd?OFtcKCnaIJ{s^!!?H=#N_q8uLxjb&Zpq4NBf9Fe@@Q;=@{=edX0gFkYTmS$7 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csm/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csm/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..415bdef02902dc98247c71b546fb8c62859acee7 GIT binary patch literal 21637 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..41ee96dea9ce4c5abfe2ad8e134077f54e998b3a GIT binary patch literal 101884 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 VCIA0_tD%9C+Wt^UhuKy2{{UD&)LsAp literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json new file mode 100644 index 000000000..73b34d61e --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json @@ -0,0 +1,146 @@ +{ + "result_id": "252184a2fc8d93830942a935322a1187ea8fd6a2:c9853f896b8ed29bad9fa440d00c49558e0a06731742b202ecddd6babdfa4932", + "row_totals_indexes": [ + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + } + }, + "primary_labels_from_columns": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + }, + "1": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + }, + "2": { + "2022": "2022", + "2023": "2023", + "2024": "2024", + "2025": "2025", + "2026": "2026" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "year", + "label": { + "id": "date.year", + "type": "label" + }, + "labelName": "Date - Year", + "attribute": { + "id": "date.year", + "type": "attribute" + }, + "attributeName": "Date - Year", + "granularity": "YEAR", + "primaryLabel": { + "id": "date.year", + "type": "label" + }, + "format": { + "locale": "en-US", + "pattern": "y", + "timezone": "Etc/UTC" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_r_csym/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..c1f66cba4bea4a02544a39e5783a6f1352eb7496 GIT binary patch literal 79634 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 YbmtxArqJ^@!2kRmT}J;b>Hke$16b|e4*&oF literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..34411d19b1e9423792132dc44862e8695ec12956 GIT binary patch literal 3548 zcmcgveP|o!89&*vt=ideMoyE!6zy0Qg*l!+tRxESxRY#Ir^t#W$2#fe;oX;|lkY>7 zPFBudXc!dI5oqWiW9eTT8*9g)3oMMR|8!d!fsu@iC0kMon>RDo56WO|VS|l5?|ZT= zMQ%sg*kRqh@AEwG@A*9+_efr13SsgPd3A`qJd`CVlK2!sTy{NJhwFRxUHY~6gR8H; zewQBq-FNE$-1#Ma^yP(}x5B@tkFP%W^OZxd(K}m5U#^_}8NCgPZ@>8C5r2@s{~P*) z;OcW{PW^GjyL9B)9h!jaTd%%B7j8cO%&mzJ=%~vz_oE06NLx3I`}CdLw{L&->H8z} z^ef-^75z^B=Hs6je~Tswa)yjd1EWcDlpLM%y7!KI-BEM_f`3j5(5aM6Id5?bP?flJut=*-8?AvPNPc-uN zw@bHhCd@Z)VcJLU{A47keKGzJlYdYDGY#o@|N5O>Cl7!51MNz?#p{0`p|2pGi1`n8 z9@3D*CtrX1A&p$Vx%+Dj`NPR~4~P|!fb(>Jtb@}35NnmJWyx_|)7eX7V7#cxZKY{F z2Fsk;u&RpCv_@dFY__bb>occUj19wV8;3x|fgKcqA_MzHI7tK#A-Q*~0|a(QXeZah zW5m_ZK0o_BoP{i}l3&S^ZtQvHh8xV1nrT&4qcQ>Oc}F;wo)=_!gdoW=B$yvwo(Ae(o?$u%N>RXKw-qEI1Rdj)L6Xf_4L*DV=v3f(5 zlw;G!9l?>{v2zVsY4{o4Y#A1o9|ptGf>KdU;|U@=1>htSxs!sWRLq9m5qc=!lrI|~ zrpR$$j2NBt^`etQ9?J7z*mG|?X7C|q`pp^J%pNBi~b&`S|z3cM4=L)>y4%`@<8f=6CJkM`kzTPnQ zAiGJ$pt~;5JFdWY#{(}thCmM}^dRu1p)RoJYZD$S;PzaZfPlQCb-|E@ruQEs+mvd^ z%7rz_)LOdHq|W%iL^<`Prv21jS*b6>#xYsL_6oM#rVK$>;Ed7IG_Y7#6-{32mpPu+ zEW3^jsTTCIDJuxvXz6vkt1!hH^g5F3iY3T`C4l)hr5IoiZv#5Jaz1t9G=pJFUu9<>$a(0kakD`Yb3iskPu)? z`0=VS5O%jc2D06&`R{$=f;SYwG8?!lG*xT}4IA}D-4+@RvyJk-sWh4}myk3Po(au_ zD5w$D@!qSPiOxi+i-h+uQz)F{&NySx`_qZfqbpRIXBZ|AA9S5%m{}%KVNwiJVUiUr zOC;&T|(wN|9Jq-VOXe;#5stKw0{^M4QnV107LblnWiD0+{0)8? z`v%)^TPemvN-2SHSv{@_da))avEJfKg(_f#%FFCYHr-TtE>;sGg}SIq7_V3?EM(7D z)b&!hkGo`peaeCy?D1mMvq`xv=~|6nmYQcB|GK~xn|vzXjf+()hLp|##}y-++)zI( z4qm^oSuW)xIfv%~aqvwsk_zQ&d5j@)#ZZ|mRON;FZjRQM+m+s&BH!nunGL?gR`OhU z6LJ;G*zG#29+YPs&yu7UG)YY)L@pi{jr{+gbAK-l=CfblE_1Psaw)eir?ocpz)9%8 zun0AQnrcp*v9MT5#Cm&1jAWkTxm?K6hc$U21sH{Dw-3{yCh84QPgxzzo}R{iG{|cs z2el{~Vl)%OxJIHX>V>Kl?&(FN*b=zhCJ()f`T%;~lG0i)_sz0i*UHh4sBsavB{MZi zFM_|gjW|Qin*x`y%O&s)d)7$AU~P+03Hy=tqAfY^C*+5<7nf(-*&3swegWG(o)Ny3 z*%G*T3uDyS)}lST#Tp?P0A=_jI=NniH5wX8JT!P%F>`o`pqa!-OE901CclD(X(a59 zDmaC<^ZU6%TP9b7L!Xn-XoFoMQNU6O-SPavTV?@0R`jBQIKmSAi?0)H|1JA>cvd?onMZ`SS~F%Cbn Jm*D@pe*+LBF`obc literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json new file mode 100644 index 000000000..a4f6c8c38 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json @@ -0,0 +1,87 @@ +{ + "result_id": "1a132f74b2f105794f4c866fda71947c4c5b6aad:ac26f4a76e5d13d75bb49f52eebddfa318ca576a65dec1c1b4587b1e16a613ae", + "row_totals_indexes": [ + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "primary_labels_from_columns": {}, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rc_m/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..19a2cf6e889e05e150764a1f2827b64373b74527 GIT binary patch literal 4754 zcmeHLU1%It6uxP;Nl4R@>RJOzkV%vXo06?aYp^n*3I5iQWNW3HuugU-o3%4L>+EcP zx(&@s!9LX|X~c(!par28EE0VwS|K2bL`=|>f{hljt%zV-RA|@l+<@vTJNMHMJ=dP-W|{Wc0M7$NGjfI+|=jd6>=^%8TR=fXNz#apA&|mxc?w zq88;089c%BYa8-utQ8s7YFaVfXdOYW*WAwKUaAne)&rEewqJL&nC56?kI}||m*&~} z87Nn}4Bga|jx-{m=&QzX-UzN1UFrs9R8gL9u<0)pLL*|5F_ZkGDQwPS!Lc08NPGO| zo6QtHqcxAlY{R*jL1mzD8VD432~#5U;Q=1_t@*f*Ioco(JDa>ys0ll;o>da*5WdEA z%1Z0_nulPFj#De}jwJL^!MhpzZ{V!Xp&dp03}dPlFQ9IrKvhzWIfYh(c0U>soxRBF zNZhtEsmLzIP+HjIXvA9&-WJ)v4~QHVl|nGVu|zVakMUCF)~QbLG)SH;z;GLnNFY2g z;IZ5Fxe8U(hemquVhymaid8eJq4ms<86si(G{pr-E4LE0af~VEcVa= zbE?Hy#EEoVLL=SepG%z29TcIvkK*ekcl?^1JT39C#0J>tC3l?PFV`pKrWQ&D54q!4 z<=ok#b$9Hp(>D61Tze(kzaG1C*28MKK;I_OJp%II?1OT=Q{rxks>Cjd&q(Z+7?K#4 z7?Bv27?i*8+7`tj5A#H>p=2w(i%-3gj{cvngzIddAFRs zS7M{Yha?6iJ}QxF7Ez}F=K9?y$A=^iN_<&jM&h`{Ns0Rm%Nb52Mgre6IS>Jh^f$_^tYI|H)4e_%5g` zNBn2v&wiq2vGCTrAM*7>OJAwCTKZ46@BWU@Z$Gi3l3UZ~FR8sVjmKxV+)^JQ`e2s| zaYxQ2m(=;Wxw)gqmN@^%uYaNb)HBn#wf36&#?;i*33XB33j=;RwWuDy-ZOJ2vY>gBh3`K^u{hQIIs&$s$-xX(KH|Dyf` DskN@q literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5083647cf55242cc6fdfcb5d1a6c0857fb289ad GIT binary patch literal 4638 zcmcgwe{2)?6~7C1a!$iY8Rt1u#8NLYMl-2nClI5u-q}g)GmeuO;$KUlcfN~#&fVGA z=NKntqgvU*MuAc2SV0|YyOmWNqGhYlq*m2RRi+iGEq@?Qo!YUgWzbDkN2{&te!TD5 z33ePNv30YYZ|?iv`@YY6@AJOzl#J4$9#TghY$Olq10+XcD=}piqwlA zS|>8I7pNVZnlC;6{t-%V3Ox8#>XGlk=jtoe?5b1V-<^4sn#A!`I!A@huHJLoLoZWn zCl37b!#9plA6enyr6~%(o1h;0t-gb}w&P)aYfE-mrf?te*E25|sLp2|q`-4_(>n!y ztJSjcc?zAie(+60zxC;D)E6L*zdUz_!q*VZ#joqFzRBx*sVB0Vnm6>nP677Js?&Q7 zyLDgQt3PY~+vc|@A4t0SlZH|2zB$SXAJ0GEr0}Do@8=(*-h+(xT>KgZ>$Ur{zo9T3 z*Zuvt;h^rSs<#r+cRzr&>%Q}Pig2EBfK&5*`hMaEo{L>};=svc29s_w-_=3vceWo;!J$;NgQ zfyxL_l!-vm0T5-xtV>8S40D`ofR)1=S5O@-18lqRFZw!Gwdd_%i(zFZ_f;{u6P57n)!h^->l^D|rx0Z`T}R7RfA)Uhuz&io-r9m##FN0yn|dE{ICrAVp`G~iw?C?III3}YR7dXy z4qxLgf%x%PzHfL{cXU=i*Sde=66FKG!DGwqn4mvRq?=wfm^$w~rnNhwF>3St;i|S9 z+4l1#Xhhcm&=%2HF9k~eLmE?LIzTpS*RgkZ6Zjbx`J#|l4e%JuRe^GcEi+*z+|;1|B6FydK|M4< z-WwnZ4ZQnj1Xy~cjG7Xa6jhVAfMH`uNQxPy3k$RZ2#G|1stU+#T zYOMN<<{|etSC{ zy0+>x=3OpSd*10MxaGv{mM2<~(nk+TrS2UbD3OpRGq;n}?D8%?ujQQ?K1+Y=e7AS-$E#*VL;%WY-0b(rV7 z2|ZUgk@+4Fl#guJ&I{VfS+l~*0{Bo0k^~l$q9F0xYh`8R?P@8D49x|&&>3Dp07^m5 zmKGElE)5qR$z?%hc~)h?eAX-|U=AYzogLpgw65R0YuAlnYNIgUxJbxPO*D&ii=vv8 zGOW73w?3*WMO9cR-CZ__u97M^Uvy!Y!e7GVQx4+>k+r$skS_wfH8$$fu5OoF#A?l_ zi&@i_bu2H|{`c5gv*iR<&E&L(lteDa=1Qm^vn4i{%M=mU@UF;Pq)3>ZifCa zSJ11K-Og^Oc^77Cp+ljO$j0)U!1TiMJJF|@9HMD@41UmOGfnr>?j#MeB<)FRGPk=% zUqr&e1%046P~O9;dC~L?O&4i62fvXM&p2$+9wafacW+>1sSx*ud!vrvH0KMeoH8tq zh;ELN{8HQ@O>-iXXFUFaSTqECS4r5S?MD-GNJ@zA8Qwc&=cB`7bW1VG$Q2)wE6agi z@P=oYbS4>b=0#2(QsY~g^^CW#hw~PZPnnH`^YI~9Ar|S8kR7Ll^PC6#DDD)TPbGR> zb|LE4bc_-%u#w<&+&eA?JhTY5YQiT?@;<4k`StjxV{%rCImgQSNZ1~Wgi^eB5ak1T zh6^!=Yl@BZDF};^!s8*)-peRGuA0~@`3oigLR^fPR1!XaHs%;t0-h<&e_WO%&KsIs z$jifI{7!cXVwC))VwMqal7}46bB-ZEc=%&z&6dnBmw6x2VpP$Qo` z&-kipim>gj67X1J28UG687}aiM1FIbtGYU)e6~9MQ}HO19EW#h>7b*K318yL$>4b7Kp6l*HF&60qeuCA#*u%+EnsbDtGKbLf zQFmW;?3}~DBOVFf0>}QkJBRK;eIG7u_rI!NccBC%C8Z z?4RaK8V`_<;+sUEnz`C6u7nAIQhB*gF$Q4~vs9+h8uz zw68KF&^$x)ZUil!7%Vi4mH};O!hD2rIEv;gdKlLxBMd{d(N?se!ATER?vF2Mhr8C3 z(8i}Hk4AH1(Rm-TuR8BR+rc2rny|t-{e5Ul2h(u!O9^xyc5Zh_lP1ur&0lRxd(p3P zIjo?1z$3&vR@M)r^ZiIPpe5na;?*9}8QQHqE`9HjX<$R;JcFE$qxlbYgV43aDj>+w zP5jdtq^y}~NI=su8uEp>wNk^Lp)pfOmd))b2!RiV%r4#*;4(* MT9;$kDEw#WU&RQ3B>(^b literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json new file mode 100644 index 000000000..f10298f1a --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json @@ -0,0 +1,114 @@ +{ + "result_id": "1a8b7699951a77013d24c89db382cb32bafbf792:8b91d5d74ef5f654fdfa1b020340191a76ff2cb852232448d443410ac6b65211", + "row_totals_indexes": [ + [], + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + }, + "2": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + } + }, + "primary_labels_from_columns": {}, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rcs_m/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..f665ee72be3a17e5b9ad44821a7af87f42018cdb GIT binary patch literal 7850 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

C`n1JQJc1KF9UbA1r0c*x>Tlm}7>}(jZ}K8&8OR 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2bbe5a49e3011513195f1af98945887b4f8775ce GIT binary patch literal 8673 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 HA9ws0RGVZh literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json new file mode 100644 index 000000000..9cebe61fa --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json @@ -0,0 +1,114 @@ +{ + "result_id": "9147700eadd529c86471843346d5dd8fb501c938:10dc80801be43bde938c4f07a7d9ebcb4ec3a72ec16a6e8148cc61fda78434da", + "row_totals_indexes": [ + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + } + }, + "primary_labels_from_columns": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cm/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..90f7f0a8da664591f08c4fb017b581eb5ac80026 GIT binary patch literal 9394 zcmeHNeT-CB6~A4!3)!v&$=D#Nh!3c1Gt^zMUmI&5ZfUnxz%FZw*_PqP5(c8P`-cBKkpmno_m?MZ<#ca_ct`xKI2D+lz|K5gT zv-*DIN_v;iHoRwN2ywG2pFUqKE>`a`@PgsmxqQkS8n@kC(#aTIom2QM&_s+TMnvqL zV(}UjNZ)Mmf|0U@?NrX_qL!oFqF`j*WZH5kzfM(mC5$dz6*nx;bCbh)&klcPC4G}w z8?t>X*Yz23W7M@W`IO}*y-A}BZ>hL6)tB^AB-Sgfm8gu=Y;fGP<;m7lal>&FwmX#b zEHBUgM!XCOlqhCj%PK#D$7{&`LS?^1z4p7TzRdfq>m>3cUheu4%dHPAV;(oQ~uMEbIZjMWPH zJ#Oe$#^OcsMT~%iaf`& zQn`|Ju<~>kvsA^tlctEKJB`7hyC9ql9G`RtK}xwt2=NKOPi*q6VeS%Q;9@ZEUXA*K zk<9gB#>-`$oQ)ZC13a?PpMtjINqa)Jy$bU4W(je8rVxAa>}vtXy#72U<=*TXTSQyY;Y{o-vo6&Ymy?+ZF zBT&xLvJp@xGYNYWmI*aI4~<(X3_Hq!A7el1Lp;$`5}`##uQ8ioll&w5w2t+6aJb|B z%LfNhEQv`FPnR(^iSd8ef%T>^)^nGO75-EOQYY2~{Ec8m|Eh&`J!5PV!yg1#k035J z^LnGi>Oqd;dICDWt=`vy*OONsLg?vg{fs14)=&BQ?17&Vj2JNe%c|$|tBkEl+;OQ6 zj5mZa9)ym|!dM}n^}&j?1!V-1YgGPWjh-G>3jlgLHQJbp=HdK;@>~P+Y{uFo=3?)z=iw8`Rn0svlbAQF-0px5JrDQSnP-13tdZnECK$JL*oa`I z{B~5!ZwpQ%&3MT7xndp=wuqTLhtCl)d?AwS&}qEY#E*RwtwXw>?|?6tg}*}118mh3 z9>@gvXTftiLuo&0y!q=9<-A552sy=pQ0$d?kI|WJAs*60M7l~hKlJT5WdB?uuj5a3 zq)+a~NC*9+b6_kKWwL=7HxXZqN86(F;m{Cvw?njkQ|#OD%w%lTfG`rlba5L3PkRNT zHgPrV(h0MT{S`BskyjzwvEPu?in5Fo+1P`92ic~5izbqnSEgTI^BvqU$e~)$`&9d0jt7n;VdB zPiJrD&MVmpW*|GV~8{9{@-n7 zM(mWGxZO@AakXP7dTlT7X6!`$6~2n9O<{TK*?SHwxMjk8>Am&=r*PQZcx&sipPzfu zB$i#3HlN*$nqDU5jLqhO z1zXQP+kKSv?%el``B^e_W{Zi|?I&)0-Hh$O^UVjA?DFkU{k;7zo20(|pO2aB*Wn%J z+i>rOC8t^c^txaAc6!OciY;vCwc%sZ??XQ^i=UD4YDkK?%Y=yy3@4`%-&?R>b$wPNmk3imznNzUJ;uEP;~jPI@&%nR-CeC4)~y=S}MV7*VcKaJRuF@BHvWReLlny8m&8$HAKQ zzcXpw79d(T+pv1K@QOW0uG!cHd>P-{@zAnBbMu&*IQ2Rftmmj?YUQ?#JLJY4@+59~ z!uR%-ZXO$V$b3hQGgjjcx$4h9>dFYmYjr){xI^~4OXCi?afd8_lc;`8;a{nj-bpp? zkSqTt(6~dEJGsbjJdHbK(YQmd@3(^Bezf}J6vza3sEs@1|F1jbEtqUp@c&i%FNyZm AZU6uP literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cym/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/dim_rs_cym/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f6a212b7f79f5ca20c58310dcd5ea8399fa40e99 GIT binary patch literal 35807 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..626dc9cb540f5c1d603417a9dd751ed3720d7771 GIT binary patch literal 4384 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/manifest.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/manifest.json new file mode 100644 index 000000000..d81fa4763 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/manifest.json @@ -0,0 +1,362 @@ +[ + { + "name": "flat_attrs_and_metrics", + "description": "Single dim with attributes and measureGroup \u2014 flat table", + "shape": [ + 96, + 1 + ], + "result_id": "b368f96bad3aabafcecd81967ea277fe6d8859c2:aa08106b70c03707a95d33dc734d7885bb767ac444eb992435fdfe853c0248b8", + "dir": "flat_attrs_and_metrics" + }, + { + "name": "two_dim_metrics_in_rows", + "description": "measureGroup in dim0 \u2192 each metric is a row; attributes fan out as columns", + "shape": [ + 2, + 17 + ], + "result_id": "833d5dcc7ca1d9f6925be1faf3914295ab1f61ff:d10d5d4fdb23733cf9d282d22a2d02e36c4e50fff89aa2272b5bd47a80158774", + "dir": "two_dim_metrics_in_rows" + }, + { + "name": "two_dim_metrics_in_cols", + "description": "Attributes in dim0 (rows), measureGroup in dim1 (columns) \u2014 most common layout", + "shape": [ + 48, + 8 + ], + "result_id": "b18770546d0c68ebb98977715330e74bc288fc8e:fa754b08b892de84419bd9fb61752ff6a99a09b4e94087ed9c0e0520d8fad370", + "dir": "two_dim_metrics_in_cols" + }, + { + "name": "wide_few_rows_many_cols", + "description": "Single attribute in dim0, multiple attributes + measureGroup in dim1 \u2192 wide DataFrame", + "shape": [ + 4, + 96 + ], + "result_id": "16c598b975e1507d58815eb8aa7c041fa87284ba:1c61fa90d6c69956cd02afaab527bf6ca9f76dab52dbac8e5a0a8f8df719c878", + "dir": "wide_few_rows_many_cols" + }, + { + "name": "metrics_only", + "description": "No attributes \u2014 single row of aggregate metric values", + "shape": [ + 2, + 1 + ], + "result_id": "b61cadaa274e2b47f4a335297fea1f14efe46ae3:776bd8dc42d379ac2c110bbd1d0c16f684c5e7bbd9375231796389e18c756cde", + "dir": "metrics_only" + }, + { + "name": "single_metric_many_rows", + "description": "Three attributes + one metric \u2014 tall narrow table", + "shape": [ + 182, + 1 + ], + "result_id": "66bdeaaa4837a60540327d66bd4ec209d03ab5b6:1d5f7db1a5d2647d22ac0c56f86ce68809eaff9e3a86ccaa0c91bbcb975fc8b4", + "dir": "single_metric_many_rows" + }, + { + "name": "totals_grand_col_sum", + "description": "Grand total appended as extra columns; single label in row dim", + "shape": [ + 5, + 96 + ], + "result_id": "f5e66ad5cab85354bd72e9ab144bbea7e972d8eb:c74b8d48294bfbce59209cbf3448373aac3656fb2c93619633c52162b065449b", + "dir": "totals_grand_col_sum" + }, + { + "name": "totals_grand_row_sum", + "description": "Grand total appended as extra rows; single label in col dim", + "shape": [ + 96, + 5 + ], + "result_id": "7de51a43ad35a2153e0119e6f6b8230836610564:3082f14cb207b4fce04f919c1e26cf687d4941629d1b52133e3adf68d2220922", + "dir": "totals_grand_row_sum" + }, + { + "name": "totals_grand_row_two_col_labels", + "description": "Grand total rows; column dim has two labels \u2014 tests index padding", + "shape": [ + 96, + 18 + ], + "result_id": "2ebc777bf4a36c259d026b4b1dd2aab2687d592e:ba8e78b3b8514409ab2993cdb12111ddcae68cdfd9cf877b7d9df0d22ea5ce10", + "dir": "totals_grand_row_two_col_labels" + }, + { + "name": "totals_grand_col_two_row_labels", + "description": "Grand total columns; row dim has two labels \u2014 tests column index padding", + "shape": [ + 18, + 96 + ], + "result_id": "f8391a785c705ef1b77d4ab01ce75fb327f9bdda:af49d03f2517804b2169ddcc2d94d03cce4374b810bf0598abbcb063b096a5eb", + "dir": "totals_grand_col_two_row_labels" + }, + { + "name": "totals_multi_agg", + "description": "SUM, MAX, AVG grand total rows for the same metric", + "shape": [ + 48, + 1 + ], + "result_id": "861756eb0873f8c0141566acb6403aa44431cb74:a184b3351edb46aa1f4a75725c3910a03f1994310544f234902875ad5599d484", + "dir": "totals_multi_agg" + }, + { + "name": "totals_subtotal_col", + "description": "Subtotal columns per region (outer attr); grand total also present", + "shape": [ + 5, + 106 + ], + "result_id": "c95057c39cd4696efb17246092ad78779ea1609c:a03d0ba9cb3c4c1d94f43abecd591bc7b43988b64b3dc19df410c2fa01b06b0f", + "dir": "totals_subtotal_col" + }, + { + "name": "totals_subtotal_row", + "description": "Subtotal rows per region (outer attr in row dim); grand total also present", + "shape": [ + 106, + 5 + ], + "result_id": "a06ba66f26441f10dc6ff037cae875c030af5d1c:a2fe59865e5d2f3f4c53c82099cf44e9d3a58e0d853fe6f975c1f6dd9babe4b2", + "dir": "totals_subtotal_row" + }, + { + "name": "dim_r_m", + "description": "dim0=[region], dim1=[measureGroup] \u2014 1 row attr, metrics in cols", + "shape": [ + 5, + 2 + ], + "result_id": "c28cd032661c390fe86d4fdbc81c6b21344a4c35:f25f85da5bb0610c481b84628109721e596b4a761de09e6fcc8627c510765679", + "dir": "dim_r_m" + }, + { + "name": "dim_rc_m", + "description": "dim0=[region, products.category], dim1=[measureGroup]", + "shape": [ + 17, + 2 + ], + "result_id": "1a132f74b2f105794f4c866fda71947c4c5b6aad:ac26f4a76e5d13d75bb49f52eebddfa318ca576a65dec1c1b4587b1e16a613ae", + "dir": "dim_rc_m" + }, + { + "name": "dim_rcs_m", + "description": "dim0=[region, products.category, order_status], dim1=[measureGroup]", + "shape": [ + 49, + 2 + ], + "result_id": "1a8b7699951a77013d24c89db382cb32bafbf792:8b91d5d74ef5f654fdfa1b020340191a76ff2cb852232448d443410ac6b65211", + "dir": "dim_rcs_m" + }, + { + "name": "dim_m_c", + "description": "dim0=[measureGroup], dim1=[products.category] \u2014 metrics in rows, 1 col attr", + "shape": [ + 2, + 4 + ], + "result_id": "d112ed32d89e491e5282d5e9d60a59fd176a2dd9:ba3f6632101fb9d1afb000c9bdac588c5a8d6d0c28a312516f69b743e0552aae", + "dir": "dim_m_c" + }, + { + "name": "dim_m_cs", + "description": "dim0=[measureGroup], dim1=[products.category, order_status]", + "shape": [ + 2, + 12 + ], + "result_id": "8168440bbfd910f40c33e06a804cb116bcf0f201:734518631e68f6b8d7415109b3dc2397635b3b39501cd9688d29005f76cdd125", + "dir": "dim_m_cs" + }, + { + "name": "dim_m_csy", + "description": "dim0=[measureGroup], dim1=[products.category, order_status, date.year]", + "shape": [ + 2, + 57 + ], + "result_id": "e0720d36b043b0ca22a0b9f28815270339eda948:a92a2acabe0c2451de87de371b267307d1916667f20a9344eee20e20a874ad46", + "dir": "dim_m_csy" + }, + { + "name": "dim_r_cm", + "description": "dim0=[region], dim1=[products.category, measureGroup]", + "shape": [ + 5, + 8 + ], + "result_id": "7d21dde2d76befdec0a32017aede0a68f9811a6d:01ba1a7231afda52d099d9e03b3ca595b72000e7eeeeb9ecdb32470bb7a1f236", + "dir": "dim_r_cm" + }, + { + "name": "dim_rs_cm", + "description": "dim0=[region, order_status], dim1=[products.category, measureGroup]", + "shape": [ + 13, + 8 + ], + "result_id": "9147700eadd529c86471843346d5dd8fb501c938:10dc80801be43bde938c4f07a7d9ebcb4ec3a72ec16a6e8148cc61fda78434da", + "dir": "dim_rs_cm" + }, + { + "name": "dim_r_csm", + "description": "dim0=[region], dim1=[products.category, order_status, measureGroup]", + "shape": [ + 5, + 24 + ], + "result_id": "e840c04777add8cdc63b7c3bc0cab8447c0fcd79:b6d9e8541e0dfb53b34a8c91d05503326598e6a4b4cf807aca4d7beabc194195", + "dir": "dim_r_csm" + }, + { + "name": "dim_rs_cym", + "description": "dim0=[region, order_status], dim1=[products.category, date.year, measureGroup]", + "shape": [ + 13, + 40 + ], + "result_id": "7aa4a1774eb3d188eb3e2c0af0a2dfaea6f6dbcd:e886af79248994cc2559a9f4b6056f46233e3719406bbe7918c1ebbf63308add", + "dir": "dim_rs_cym" + }, + { + "name": "dim_rcs_ym", + "description": "dim0=[region, products.category, order_status], dim1=[date.year, measureGroup]", + "shape": [ + 49, + 10 + ], + "result_id": "8621c83920954772a38ab6b2eb3d5500bcd6436a:fff8ce071234d802922a64a202729a22b76096f45d921b8050f4ea9676ed5730", + "dir": "dim_rcs_ym" + }, + { + "name": "dim_r_csym", + "description": "dim0=[region], dim1=[products.category, order_status, date.year, measureGroup]", + "shape": [ + 5, + 114 + ], + "result_id": "252184a2fc8d93830942a935322a1187ea8fd6a2:c9853f896b8ed29bad9fa440d00c49558e0a06731742b202ecddd6babdfa4932", + "dir": "dim_r_csym" + }, + { + "name": "tot_d0_sub", + "description": "Base A: subtotal per region (rolls up category) \u2192 extra rows in dim0", + "shape": [ + 44, + 4 + ], + "result_id": "471a1f126185445653203b3a99961a86aa43fa7f:e4fc71222a50bd7e597c370649044f8f2d0534fbd64534f5ed218a411670c1b5", + "dir": "tot_d0_sub" + }, + { + "name": "tot_d0_grand", + "description": "Base A: grand total of dim0 (all items) \u2192 extra column in dim1", + "shape": [ + 34, + 4 + ], + "result_id": "046b5321ff7293ab39a106c73ab6c9ede3344459:e33180d3ad88d45dd8b9fdf14ddbc500c2a6565b09e270d1e6b2552ac2010513", + "dir": "tot_d0_grand" + }, + { + "name": "tot_d0_sub_grand", + "description": "Base A: per-region subtotals AND grand total of dim0", + "shape": [ + 44, + 4 + ], + "result_id": "b176eed0e06b3a09067117ac796b2ea566ffb50e:174121ab8c2f4b3f22fb416a1c4889d1c48f003d97ea82f3f421d053ce896b10", + "dir": "tot_d0_sub_grand" + }, + { + "name": "tot_d1_sub", + "description": "Base B: subtotal per order_status (rolls up date.year) \u2192 extra columns in dim1", + "shape": [ + 18, + 36 + ], + "result_id": "fb96bd6e4389bee73169a7c2855764619e022951:db935b1704f31c9d3d1b7a8cd8bf10f4193f7fb38fe8823a0a5fee0828178574", + "dir": "tot_d1_sub" + }, + { + "name": "tot_d1_grand", + "description": "Base B: grand total of dim1 (all items) \u2192 extra row in dim0", + "shape": [ + 18, + 30 + ], + "result_id": "762f378153990758ecfb98810aa97252806ee805:914edd3051e3f6f098575eea773b7b18a22ee5a26021cc8d49d8692804b5d164", + "dir": "tot_d1_grand" + }, + { + "name": "tot_d1_sub_grand", + "description": "Base B: per-status subtotals AND grand total of dim1", + "shape": [ + 18, + 36 + ], + "result_id": "08779cd0d0dd5ca447f0355c28f4f8a86343c0ad:4bf16801c8c84c31f2f5f9cd64b007735039fab429775e8ebb476da34fe46fb9", + "dir": "tot_d1_sub_grand" + }, + { + "name": "tot_d0sub_d1sub", + "description": "Base C: subtotals in both dims (row subtotal per region + col subtotal per status)", + "shape": [ + 44, + 19 + ], + "result_id": "2fefcc49d264832da374b79c33fef5de71762a82:73d0d04b5ae977340ff0766fa7c7461e005938ec617bab7492403898e2af5ed1", + "dir": "tot_d0sub_d1sub" + }, + { + "name": "tot_d0sub_d1grand", + "description": "Base C: row subtotals per region + grand total of dim1 \u2192 extra col rows + SUM row", + "shape": [ + 44, + 16 + ], + "result_id": "c4164cdb94dd0e2fc80feafdb94a74a982784a69:23b0fdb627947ca736c4a3a15473e3337db1c2eafb5f70b41b2ca59f13ecfac6", + "dir": "tot_d0sub_d1grand" + }, + { + "name": "tot_d0grand_d1sub", + "description": "Base C: grand total of dim0 + col subtotals per status", + "shape": [ + 34, + 19 + ], + "result_id": "a4bbfa578896c6a860d27e6149af43cacea53060:35a1b2d5811084ae38fd4f4448efca7d9203714fe45ef40033e7c61c6a5e9a8d", + "dir": "tot_d0grand_d1sub" + }, + { + "name": "tot_d0grand_d1grand", + "description": "Base C: grand total of dim0 + grand total of dim1", + "shape": [ + 34, + 16 + ], + "result_id": "2dc12baa4d0baf56d4c429c5be750d93a82237ec:ff13f8c8a0efca035cc53cd877045b0f997d324bbd36a127e52c3166c870d220", + "dir": "tot_d0grand_d1grand" + }, + { + "name": "totals_both_dims", + "description": "Grand total rows AND grand total columns at the same time", + "shape": [ + 96, + 5 + ], + "result_id": "b592a3f77e55d5e3d4450891c0d5c1fbedcac173:f9ed5a4e4b8cf21716cc409cd87664ef7da3444d4f07c4864989916d420bf85f", + "dir": "totals_both_dims" + } +] diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1589d1acbcb8ed965f7d19cf5e901ae1987566d5 GIT binary patch literal 1985 zcmb7FOK;*<6uuCKrlTy8MN!F^``nvk49{8!&&=?^~{6&ib}_ZrXjW-+ziuwg4fM%5CL}1+>LH&Q(x)GY2V5 zGLy>umdN~(C>$5o|4+X;q7q_~2!>6V4nIrh3Md6Ugkj??!)h^<@ux)Qmqg*mWZ}=m z)0FNz%p&4f7cch^@F)b0)Z^p-(w-x4IOX3YIe*(HPk?T3wrgA z_%0*M5s*8Cv1y5KU{BP08E-k3Ig9!CHg=CZP|6Z-=vw;3FjqUBXk$|kh<%xswmLP{ zU^0d7FIn5trs{M~RP*NQbUKMh*10+Lt%*yl<9ozAKB zJU;o^pFjAVJO{XjF>b?;JYQnGhpR&@U_8XNA+=Sjcl;4CzP#~Q+aw?M@K6-$7cq`7 zjJ5Ktq)C-UjIGbbeNhMiuQJl4Hv}Uzq?vzG!uW{7lL@R=I$u{Z& zjG#ZT*$kfie4wZ zkRE2|J^6igDZW+~xYoE$F*K>m^`y?osK30?V(>Z|n)AjDAFa1W`cOR3_e?G?w8NHM z;yumj*rveyimce0a1hC*g9qy~q>2YUpMi!C=*C;B(;XXe?|}lEL62PT=6%d~8R`?A z)?ASUPTLhp-S9qVUe9feboY$vpdZ_?Zk!u)%2QV4#)T^JA$>PvadtAsVYAlY@9L=7 zy4&)!@*c%#T6-5K}KWaY9CVe(4rd>jPSm z2)GaJI3AMVGQmCQ;cA4NH_jNRif44uBjYW6x`be;b4czZtrtR|&KECGHt(s^??N+p grhDEq`iGEzd*So(UqP-2A1(6T`a6x#EBJW-2ZldHA^-pY literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/meta.json new file mode 100644 index 000000000..b707479a2 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/meta.json @@ -0,0 +1,29 @@ +{ + "result_id": "b61cadaa274e2b47f4a335297fea1f14efe46ae3:776bd8dc42d379ac2c110bbd1d0c16f684c5e7bbd9375231796389e18c756cde", + "row_totals_indexes": [ + [] + ], + "primary_labels_from_index": {}, + "primary_labels_from_columns": {}, + "dimensions": [ + { + "headers": [ + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/metrics_only/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..8c382b48f952545103756654e3d3cb9feba2b1bb GIT binary patch literal 2418 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e1a0d9edc56a1fcadc2759ed049b4f4a858ef26f GIT binary patch literal 6064 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 WRj6hI{5YZfPc52DQC;v`{l5Sl4^(6T literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json new file mode 100644 index 000000000..eeb8fdf9d --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json @@ -0,0 +1,115 @@ +{ + "result_id": "046b5321ff7293ab39a106c73ab6c9ede3344459:e33180d3ad88d45dd8b9fdf14ddbc500c2a6565b09e270d1e6b2552ac2010513", + "row_totals_indexes": [ + [], + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "primary_labels_from_columns": { + "0": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_grand/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..33d10f933ec6126a68d80eabefb30cce3528ef4e GIT binary patch literal 25010 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 J8T|ih_zy?4#<~Ci literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d6a534c85a332d90115541b485dc09c2ca8db6d9 GIT binary patch literal 5874 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json new file mode 100644 index 000000000..3386f0876 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json @@ -0,0 +1,126 @@ +{ + "result_id": "471a1f126185445653203b3a99961a86aa43fa7f:e4fc71222a50bd7e597c370649044f8f2d0534fbd64534f5ed218a411670c1b5", + "row_totals_indexes": [ + [], + [ + 8, + 9, + 18, + 19, + 28, + 29, + 32, + 33, + 42, + 43 + ], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "primary_labels_from_columns": { + "0": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..29845ed90049cd43d8624c6cc79cb1782c848a1b GIT binary patch literal 31874 zcmeHQeQ;FQb-!K{pjdSjS4pXx5_OGTrCmGvz&2)LcNy%KOlu%SO_%~%FVYGLue4(I z)<6WQlG=?t!8T*lRB@P=Bp!!mTt*FPhCh;wCm#*d;3+X~psr)fR3QWuSM^urI*Ix_ z=f3;yd-v_#_f`=9)AyLCeea!f?>)cYxu5UjuyXzSwI68{Viw!@jY2dE+7^i`#eDHL zu@FbtE}Q3FZ@}q1_xi+qI+ptwj`vObYEfuE_yv&(&?iwsWxATq- zo#{-PEU6UpAY|o+{R`E_@@^P!w+DzZr>2J7C;Kw_Fz{uA_PI zb+?XJt4y2s>_MAAyV!X>TFUkPrS3xU`g_oxSO4qm>~u=DnF;*5ZRXB`lkd(ud9tk7 z%74S{CFEY80o=y!C>Ht)0}hN!7g_DVGMQvS!k&OZ`+^)>fSEQmLHYjN)Y< z>35>TPUP#{*oG=wa;l!mdJiY{lapXN+s#!9zJ~#*c-|$P=C^Kzr}GYXsOh0fKQZgD zD}x1;^2kr;P9B+4?#RBY)IW%xxoUf1v-{gzOQqfIbfy{xP;g!2Rv^T$d+lJSli$M4 zK&*Ruc6KSQ)7bG&?8E84p-%MjLxZKE0!9g^Tq&Rl`O@CgSJ)xbz7N;$xxCG{ zelR1%=pP8N`}c(ye6J8r3)MF8u?z`Obi?#m?J^fR-w7`!h>*7y+^wIQQpY}9A?#@$?7 zs}M*k9>Y#tjh>vH-RB;E62IsL?@L_| zmM|A7anrwPPUab$Q2p_9atqFhlSA04tOLknzk7Tiexo>1?Jx!{t?oo)F0^>OydT)Y zyiiNG^CJ03i8Vjeyi5X{zpkJf3fbB*RV!5na~;c=mr<9CucBPXJ>H66j~BO#$fP5j z@9X4fkmE6?dNuHA>iOX^*dD+QHqmVWb*95sA8ug0De*_A>cQO+!2JaBh=tqcT_2jc z;LgDI5N>pdwQyg@cvIrG(;D{#d{*1v?Tq_g*T;_`k3si1kKZ}?o5wcv3=(Z#tr<>Y5eD+{NKKu@$Yqgz887ybdUSy=6`Q;8|{3p z>TmCjus?)d`o7iX`$dd7CDK2t2m8$d?4!sd7IwSuHK0hxYgIq?2G}3MF8yxBKA$nC z#FFPV_JtAioaOK>&2ye`eSI(T7;}$ljQ9HYOF#Ehi=rCU!&4z@ym6of_yXMMIiPjS zPctVevEqgJ+}w;Z{oEWx9*Ub!$KdAT=71h{dkykbbboO>@P)bId7zb>+nAG-`0#}0 zCUU%Jzlpg~e~`wZ(mO7f8s1OFMH7u-hYdZBoE2IVSVJ{5zPi|aGuQ={h84zPuJ z;r_zPi{v9E{%TV55qa%dm_oU+##lTmFmDQ|yK3IuF?$agQuU9qgRnncrs_kdFepG$kapWv=%k-_ADxM~DOIck3EzJ!4OaZ9lDpgEqN_R2-Z@9v3wsU!Ydmwq-U<6d*rngC*w-*-wEroMy&+;9xeUIgwbD3tYV*gD#{u`4 z#yzk7U;1^Ve&PUuq#%nKc04Dh4ph1Pa4z`S7o^RxK;(0dSmex{Iz;^(0l{9N3; z(1+e$jeJVF?d%7}Fh4v$wDR*H^O6#ezohwz96#FRdQ$bB4M;lzUgk1>Xdtm}vR762 zj~`>OCBOmNE3YZr?DNEj8GA~6`M>JnK&~kj2aQM@i-RitM^#X9eD9;o&%puM65@dR zks2I)hOwu_;c3l5^!O26Co~~#tUk2LI>FCD)ch%|tJ}aBYzSee@uST?Z+w_B!~g$X z5BA_Xp%H0gVUO_t#bDnL8$#Hn->vh<2N^Tk|H~Tt4BB$d`D2@0Cme9wd;`*sy2rcl z>x~~V)(L)J#+*M{lla@fLD&@HLe>LoU-&3x!jFJL1-hp^K;&apqP2N}=_2zc3D4LLA8YV4Yii znX#wDw_dYzK<_mKp1I>?1e!ajaiIliM{rJKV@(bs>Vw7R_zcpHxg1d2@cM^KKfhG3cGZ|&dMbgr+c;zp^&1$4o-2CdFQ+U|zmB>@k^=1k-hPmN+rInkr%t=c8az=AwKBow^ zo#m37eQsUpM%vx(algOb#28l;4Br$f8naK?KbB0vjsSkNRi0C}+UJyK88`61Q3rlJ z#G-cN;YZq7_^b3CmlQwj2;rxGqZWR~4gCMB@lOJqe_j#tKOR&Nel>n}BdvpT>O1Rw zUrFPSno*gWy53Ks{19#$Gg|F)$>$kwO1%DN9k}rz!jF3s(#FDF)9-V~{T#{<;g+oo-Z)WLdyhGD(rynV@VEO(*c0MG`rkTl zdYc;7fp>gYsOCb&_-POU;d|S$DunW_21cq^A_x+kK3J`mdek`?~`)nLeEQ| zeVpXMNAF#e zFB`Bgz|Pxc?yo@cv%Pp9ob0BpLA(nk(wAEej8$Ad5A_7^kKqD|tE+|l`R`s3Twxk{h)$>>m>6Zf?B${+8U;;4JB%G>9jH@m;% zhWw}@KW)e-3^_X+*Hr$r7NM<~{{okLuH>zTe4QcRV90kG@)1LR(2yT8cbJ#Xf#;NOt1HsrmAe9(~ZGvs52{HP&+(vVLW@^glKA-$}CP1)b* zo;UMVeE(p`mmBg8hWsu=K4Qp64f!EMK5ocQ81mDGe8!Ng2B++Ab{mGm*W#Wl`D#PH z&X5lp@|}i!%#a^6^}qCYU?Swnu8A@4QhqlSE+ zAs;v7M-BODLq1{1-GRfif1w;mgtEWIJy-Zz4f#4lzQK_1G~^?O{GcH}WXO*h@)L%9 z+K|r}^2Kiduk3Gj&lSF`Azy9C$&IbpUANOIZ|dBw-okCRN^I3vcBu4k^|`WFm2aNE z)%KX>nf93Hrv6)fZrXFH&);f1W_dO|sMuV^)%?e+=#~TB9#jcZQKiSHe!St6K;CE$ zN!zOYKv$ty=)S#B?87JXh3@qQr&1m$bmOy3lDo}Q+;`!FN0;2PBm3>wS~iu2pUQ5( zbUlrNN;?jP^m=I9R?eg(if>B2mp^6IBe(89^PTLAAA{q*5zdeNaN!?6nx%4QzHuZ=Zd|nEFGKk$J~lQ)ZXkAn$wNfPG-rkM>hOJ2nYLV?Ei0CcFFZQy_@~<`Bf*mUw!D%=R7-=9=DH`Bdqs>EvKZPkN;grkMrvp zV*hXd?n&8CelOf#alINFX8D7gPH{awyv9~;LAIaH@5_F&_&1?)rF{kNpSLYIA@h4* zI6oRU9y<3R_oE$Go#Xr}-~Li4Kcz>!uKMYD=4I_i|H;#f;+guHZI8Se*?y_LzL60t z>Ar@*)`-0UcQ@!RN(0X5{teAS-;cj7d?eQ#Ptr^G*amSggf@M@L!MJi8%mqRuF>Ie zRQMDxs*Q?hlEki2!Gip^3MtkE1xu+fWYF3qb`7FE(d}R}5KM?zi*fshY_$2BH&B4|EqqpNY@cv*&61#@(^(L`v zYP|na<=H+5=W=7w)p+?apyq$aBZ*yOdBwE-n@7HF8w>MMDAx1sFBttLzb~J}uBjQj zC5c_b<3$p?hGIbL`v*zvn(FJuBz8>_yGG5eCNS>QTsJ4NYeW*e#y5|Q@y&>eJrwxx z!Tv&gRdxRwI*DD=C6d@Ra!uoX3qjwBwA;Rg5F&|PlfOD hJc-^n^zPTnxJH(F6MfzE|0{OQX?(A>lK=1V{{wbzP?Z1x literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..34ccb6e49f2c634845b6d090d84a292d1cfe7d9f GIT binary patch literal 6149 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3f78fbde0824b3da7a7e8e5c4bcfa3e45f7aff3e GIT binary patch literal 18952 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≥YvHcI~JeVie%q4otVp@;f&!E2F zeR|&|^T+wVaIBo--5K(e`CT@ko+ci77e8;Bd}XyQfB2lYa{<}m$tC1JeV)V5jlMp) zUpe(z@aJ18H}vOI%T&Cw&hw5DgWjO^KW-oC`>pjT&zCQ&!g+o^y&wH0>H1S@e>pDZ z1tZChr`+=b$vv-x{OyBRahz+~*SDHK^y{^oX?^%^KkDPc@Qo^e+)lSWae(rvuj_63 z<978x*Ed!EIQ~%+D`_3-cv|7#^K(oc;p_n4_VYIiIzWv+2X4cX;eHP|`6|OdeQ%6| zKX6nFv1{M|^SkY_Uv%Fy*tadnHdgA6XmXn`ZqxQ;qUwK z_uTpM3pfqG0ZfYSdlmySDTR|i_qwC|o~geL&jWcx@_Q(;pJg~d^sqGLIXr*=k?(6B z-S>=akw4R@zisK;!oFY8eb3-?E%@D6bl)?O1I7JQU^^|w{Y2w_7}0&t$md#&c|m^P zCinLV;}_qSruvu{-S>*{1osX z+uXK=I3G@OD+9gOR{LFdblo^`{uSN#48Qw`?t2#9_YD7o#tGVI2GM=b{%`g@YuAgh Jd-4Bz{$FLtROtW! literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..908eca6f712374b66be37db1a3f0e512662d4e50 GIT binary patch literal 16165 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json new file mode 100644 index 000000000..425c00740 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json @@ -0,0 +1,159 @@ +{ + "result_id": "c4164cdb94dd0e2fc80feafdb94a74a982784a69:23b0fdb627947ca736c4a3a15473e3337db1c2eafb5f70b41b2ca59f13ecfac6", + "row_totals_indexes": [ + [], + [ + 8, + 9, + 18, + 19, + 28, + 29, + 32, + 33, + 42, + 43 + ], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "primary_labels_from_columns": { + "0": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + }, + "1": { + "2022": "2022", + "2023": "2023", + "2024": "2024", + "2025": "2025", + "2026": "2026" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "year", + "label": { + "id": "date.year", + "type": "label" + }, + "labelName": "Date - Year", + "attribute": { + "id": "date.year", + "type": "attribute" + }, + "attributeName": "Date - Year", + "granularity": "YEAR", + "primaryLabel": { + "id": "date.year", + "type": "label" + }, + "format": { + "locale": "en-US", + "pattern": "y", + "timezone": "Etc/UTC" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..f9f12436c5b88a95a34dd47f40b6fe762775f85d GIT binary patch literal 37490 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1144ee9f9c3f2759c33f98e41a05aeaeef1f7558 GIT binary patch literal 18796 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..60f205d02db8494a0066b7d67a4195fdd67f8e07 GIT binary patch literal 28763 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 RN&QFhfJ32J2LD^Z{|B7pL~H;6 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json new file mode 100644 index 000000000..b83782693 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json @@ -0,0 +1,151 @@ +{ + "result_id": "762f378153990758ecfb98810aa97252806ee805:914edd3051e3f6f098575eea773b7b18a22ee5a26021cc8d49d8692804b5d164", + "row_totals_indexes": [ + [ + 17 + ], + [ + 17 + ] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "primary_labels_from_columns": { + "0": { + "Canceled": "Canceled", + "Delivered": "Delivered", + "Returned": "Returned" + }, + "1": { + "2022": "2022", + "2023": "2023", + "2024": "2024", + "2025": "2025", + "2026": "2026" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "status", + "label": { + "id": "order_status", + "type": "label" + }, + "labelName": "Order status", + "attribute": { + "id": "order_status", + "type": "attribute" + }, + "attributeName": "Order status", + "granularity": null, + "primaryLabel": { + "id": "order_status", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "year", + "label": { + "id": "date.year", + "type": "label" + }, + "labelName": "Date - Year", + "attribute": { + "id": "date.year", + "type": "attribute" + }, + "attributeName": "Date - Year", + "granularity": "YEAR", + "primaryLabel": { + "id": "date.year", + "type": "label" + }, + "format": { + "locale": "en-US", + "pattern": "y", + "timezone": "Etc/UTC" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_grand/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..a79a7364041420dfd49f81247ff98ccbb741ba68 GIT binary patch literal 27450 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..21bdd00dbebc26785103f20ea15cf22d69f5b8a0 GIT binary patch literal 33015 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..eea537f52f81b40e59c306f46c730f1b2e0e1194 GIT binary patch literal 33283 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 xQ}K{@_?mbic2W1x&_(!X$|ndw=er+er{1`r({ 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

  • l=ZrF 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_sum/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_sum/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..110bbf1e2b3896f1eba2d5388dbbd3395d86389b GIT binary patch literal 79839 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e72a674f2bd078f36e5bb4d67f078f7d65e7e31c GIT binary patch literal 72934 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7a4157b6bc98c08523a952c1d76618ee7bb0ef91 GIT binary patch literal 18469 zcmd5^3wTpiw$5pD=m|s!n#9!UU|JyrsgR}*S`_D`Ep1x*41J`XD&*BBG%u3$3CYMy3+Krp)l%oQXFB$Pxzzb1yaX@d%ZkfNiMt-43j)cekKu99S> zIgSEE??%YZ14Qu{qC=DtEnduaBWSM9-Axd4J7bTl5Dx7inu|M$Y9FpdyqTH5onWI=x?ELm=tbD)7}h=Rc$1yki6;2hj$Xt|?x zI=l}%hg1+5ITL(C7$u0!D6Q`}cJb5y5eUFq@V!G|tpZ!SJQWlF?v2FA7atQb%?l1dQneO$z-Hyy#jLgL)rrpRER+brN z3-SsykhuH+EGzE=Te!_&g>p4=bOo58h98L_@-<{mj6g_Bv?X8*Hl&A=b%G&MY)Fv+ z$QplaBhhtvJM!~PcRQgIy_3Yci!CB$>;8wZ&c|*&j5qXL>`R1-OLmeVAmr5^#Q`)_ z!C>#Z*uu&WfcD&Gj`pB=B3Lk@J&Zu4qh!r_5Cu^LXN`zzJGQJPh|g;#nk=x2n3>u2 zM7^u~Xk}h%%CjUg4L(W&@7wJN>U(5t7}Pj+!%zi-cXxr6K+SCiRb~YEp^l{4IM;z` zNL8=Qn!Ky_7I+I1CM1Grfm>hyTpDPd+5h+bQ7*G?Pcdsu|msM5hMO#C!BcE!mC?o zrMlVt1c?Y09U`SGP7;;ZU+;P8SJ^f?X)Gij}SG?Nl0LYG>&_;T@0D zEsXTpEh3HhOa}|f3*(=n)#8r66L5ks9Z_d#hDnXw2WQH(j02)p^;>I5G$~wjnrTO9#M7I}7Jl7{JX>7VjUW`B zd=xfe?iPr(Yi7=0Lk{T|TSbhpZ=0x9SkVbjmW_0ae&CZ9a*EC0N}~GT2H`0FEcP_r zo>%q9J(vaa?%zvT;oX2ByK7@*&uwL;RGPYMCvgsE2ZVcxl--4?e8DENi&u9b zkcB;+A~ya9t%SU%q!TT{-Pbkfi~}xr-8-gpY9jg)k_~H zJ8s&{hbGE4(X1ev7i<_!ZtHkxG6@(>dF`KdiVu2^R<2rkWoHo0_DI<$kl<)BH_ua5 zIDPu+8G_=<{Uj5Pe*z3wpX)!4L+T4}{(@%gR}$aG=xX*IVL`TF(DWi9^82+nG3+Wr zqFZ*6F!8rTv_iit>SdA;%-l;5KlCi^W#&ygLMtS{9~i(iUAr0Ber^Y$SM!q?(2sui z3+x(gcU+-+m1IgKrRprMo$DHsIpeKugBJh<7g z@#u#$)+JoX=|8Rrf+mqk^JEbiGA1Swy^d&+8Zk0um?sQ%DVU)r`73Y~4t*GD20f-G zMZtRq1?QhaKnd}|NA^a81r1UHVA?gqp;mI9DcVQ|{^>3p65d(zGzO_V@hpqh-?I7w zInjTxoka5f?ZiXAc#y=Ik2aF+I_qaCR$NuP8uAih-&&D^xw;-6ndl8HRisHQY$N3S zXf>;+L^GGQ5RQMbS)^#~>LB}gw4EHh=bs=^slAP~tF|Cea%BY^P>^=Py#e_+Hyu)X zq#59t)sEtW=$>hVkfB8-is24JCkjF@F&eZlC@MriuAV2m6Jym!8S!mo?naUx{AwfN z@#j4>BRSr&n_Wark6(M1oKlxBfIEwrSG!m$RebKw-4G=5CO@}S3mI8w*#zk2VqE?T_)Hfs;B= zLBZf_CCI~QaGS4(1~coZy!O%}@Na?!y0#3VF@RH%9qY(8eYOcZW#8c*63yS~!LHQ! z^dJVL^1n{fO1)aqPIyxB1R=nQMmRvG8?k*E)%a++T!Va;scc~3h)6TRyYML+U8HYb z9w6LmTSf4n_OM7JR6HVL)oWV_p0#abfdS$H47`0HZ5WL3<_UlSN5@$;2IE~y_90}y zF_;?OYaV>{f4!H)kCzUxu$Vw&c^kV+)xqE3jW4|Y1#)(r*-v2Td7Oad-A_1vcqcg? zlY7X{|M+>_|L4vZFli(W2XuX&E8%GLL3PhhI_N1USHQXjehMSLb~J^7O8vhd+S zTB3elc8VO}+n?OqeN54oR^t?nLVp0oVp;_h&?;x#Y)`-qS%kih5 z1-km*IZQV)wYpbnN&J!XXV}%?ak2mS8B3iPo8LXj#;Tcte;x$)j=f*h$mBjZ26UG?7)E{hDLA4g|Gt6#8#AM@1%kxB9yYc` z_?TRj%Di`K>#RXWuzowOXHMMpEBZ1su=6+cW$~?LC)n5y=5qCE5t}Km#v379dja#S z!v9Orpiq8-Zc+dB-%nsl#jJde9uUs`GDod`vFQTIE~J-41HvO(Sh()Z{j^b%`ojbG zI2Eh|EkD@^2z-3&^Rx8oMcps3HE;~Ry7Plst@;o9J|f9T$sjpX!1E6=4SknryE^sb z%PcDBn3fEP+J(yFbRUy`ycf>vf%-nWB|iD*rwOa}pF{jUM!{t{jN#}8h1fH4#>oXF zuMTeo65e;M3Z1Ki6crWS(z2XYE2g%tGoP@h&S-D7rtdS(>)2F%>Z8Vcd)n=pckU?Y z+q&Y+ikI#`)ZxtPf7?CKWoDN3Cwe>B@_c&SRe^V003JD)W4UzwZI{~O=S z;31bpvNk49wj4XiABFMgsMR@5W|PY_Ni>D=*P3XV!slrAxJ?Wt%k$Nm+CO8~4OwO^I>>es#nd5Xi+#ZKNijpbZR)@)L z5>iuyo(5VgSVBKV&0&|=+<`hvZIcKl<$3BHerhfiU6pV0H91Xg>rK#_Z}R(17JHrF z76{NOG5HRQ-BDw5Qz^=P2Po|K1WeQ$;(UkSPen3buY+E!fM-vg&p~aFx~c*t@Ce(p;O*Z)=)9Rg!OObXe&3s2F2~ z$5%TQbSUun0(NDF$>#xcOk&y1l1x*rCjcH%Xm`*l(!yFN*gNN#w9sd(@wlmZ>LQ!l z?Qe3{n*il|V+?kW)uznxQ~yIPXO?>E7A_ZvZWd(H%caQf5?id0@!M>%>z9|<8clv7 zw3P--cC-s+4uIC}Fi~gqDEvmnUH2CcC>0OwPHmf6v2AZtx4Luh{$mH@|Ko*&e}5HdsgIG83IQj?0_AM%n3qra9V z3lx+57Q4-5lBor<$+IF9x2k97JFE==&g^*Q>>)Oc9%jUvA8(ejdrPQA0vyD@OH=k`7aWQvo}l z#V~cak4NhCknT{4(vbF1(g5L7cdgsg;O3JD6A?4{x?ti^7mp^Ak={^6U_*u`jnZQ( zs92hh1fgHB!D85cdTGEEu+0+W#USROmg&ouIowuT<1(kM-sW7EuxwedS3XEZ$3%ZE zRS9BblcSRblO)k&vPTvHqvh`i!L?D=3aL0nV z%@Y+ohG!Ake~6U76R8@Qrs};3WCLUqtcdd(4b}5eppWgiM0|Iod~>Ag^3AH2=^!58 zU?x<=<`v&ZDMpDOH!ctj{uv?vIzn|(rrIn84Y(EOu?o?=8XTacqcq?TJ4Ezb5%Mb$ zs=W$T+pQp)TR+AXd~P%UzH^NqGpZ5kXCvenB2?FIQ~eY( zK1<0jQL6V7REHBlG`D;;R#l5v_A5}_3XkTz=OB@MRVaT;sM?gGYDo-Ao>=LKS2Fh; z8S9uO!Uu%%E}^P#q3W##Ae>v087@wI6;{CE-)gRK&M7`DwNt1%d9UiPcL$}0*FJ`& zhBr@CDqoTi6dWl(8L8Tuu4-dJFt-*lR*8Za>n>{Ms9heFgAkdoOqHJ&tKP_0UCscR z6TUR^ii8_vP^37RqL2)SNV+;jesHqtq*1lCC}xa2pR=mG>!xVPKe!8X6D1<#5+%Pv zskZ)Db+Qr(;my*yQr;DhNRfYHg7itn$lI%6M-`L2aI-V{6$heM#gWv^g6@=Vf80Xl zkK=Fx7ZVx-p0O&I z9i;wnF+(%lbuMqyaEHgd0GN0XXK4jYJ?nPYBMtA z#;Fm;h%q$@8}+R#!&`&mW6qcZzjc*{3RUBuv;3oOm@*u8j^3{!eK-Sem`WoQ9ZQ#y z5jRYUFm{fmN7$fmU6s)CB_DG~_kYU@3}@Qm)( z*|5)M3V3`tZFf4%KKMcjW$oT3lh5aAKxo&)*FEUE0Ik}Dd762eI7m~6q=$CSOPrS& z_kchl))@?igm?H15*lE9`hpynv#v6`EXk-Xs5k4&0%mu< zqtKCV&T$rKDvSnaj-#O_$C*}bDo?JhG}^1p*=5?w^2X}?vb5?Pr^cU?k-NgIZA>ti zCl8HrTAFfFa4zK5`^uijoM(r5=?sU7^Ww2Wk(lj<> zx-(~mrzXc;R%a?NsISZ}b>wB}9AXPYNjdI>w7d+|KcY*qHcL}kZmqYtYw=o@E~nF+ zZKyW8vI0R_nFyOoZCaCUX%51mp#t!!FcyUBlVEl^0h=I(uH*!>F+JIsXh^nz4G0sn zHg{!Zd4YytlHjyvXTcf~;3Yo<9nO=H43SiD$IzP)i(`ptk@!HOXE+`VzZI(BPj1+T5JmwvMzY|@W! zgQ2_;_Sev4)+T!^67#=_9a+HJ6;^$2J=zmX)Aw)7((E+gQcw>be^`=XEijcE5-W`b zn%t&_np};&9(-xYW^ijg|S#$kbyZHs06N6W@l+CkpE=E`0PfGFL3op zOR#1e>dlEcL%K|aM@3enq1FuklG{Xl%95Q0aVM)e)E`FaS7$9xXt0%q#DLK}3-@st z-{`Mi+JJl~oYStfCg8pk{4Qqz~7}kq;$93@~^q%d`GP{DGqnKd<@u zRA^4j1z#?+55BU1^DC_*2*91voY)6qJ>WpEsA3m1?k0m*P3!alRRP zZ|31aX(GClk~=Kl8E-9zyA9k^;hu@^l{`6cn#1IRyUc`h_;j2XqdPM<7s;(QYKQLs zjZUkp%x`SYsx~&=m^&@G=OtK?E)|KnkdGT6_QTx+-TShg4vQ-b-KWuAx4~AP)ntJ< zOYWSNPK&$1Yt|;=dvpGZ#dY}^Neww}d=DPUHC$y)7Ok`1jMmJ^Y06uXUzgvMn}*6A zI$Z_)qzA{M(g!M%WTc{6hzS);G8&+klIe$XiEgD1`m=SYR8oUJC!+F6ZbJr4sz7BF zJ^EbG08=w8XsQvFVbam(OkAn)!bDv*uD_(BM^bMoSulS-`nWg?M#EHGq`{Bqqb?mi zrt|LyTB=|LsuESqg*P-X-2m@8odvz&_0fY4)r)kxAji-nELt4wFG&r`&m{6uH|igH zC7}mTF7YpPwqZY70&1qz*Uz7ibg0oK%`YPIb&YslEqV`;UxGfvosmDz6zd$p`58KW z<|uteQR2k(8z;BW=@z7s{maoAueV-Mzp-*Htlwha@OrLM>*eAB zBls;wk6>@;dPCoJp zzdZVd)w@uC(FlGeqt?qq@W4h19r zm0pTg<*O;=n6(K`s6#+^ddl#6`76TLL(wSIU(*pFyz6nfjYj4z2(Fi-%LE?|#gk)y z5KpfCVRaK&G;_rM#o&YE+K;!MQ?Nw!mE$ulFweC4@5gC4-WD{Q!T84u7=%fBq+! Mo*)nu!G93+zgqXRc>n+a literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json new file mode 100644 index 000000000..5581c2766 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json @@ -0,0 +1,159 @@ +{ + "result_id": "2ebc777bf4a36c259d026b4b1dd2aab2687d592e:ba8e78b3b8514409ab2993cdb12111ddcae68cdfd9cf877b7d9df0d22ea5ce10", + "row_totals_indexes": [ + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Alabama": "Alabama", + "Alaska": "Alaska", + "Arizona": "Arizona", + "Arkansas": "Arkansas", + "California": "California", + "Colorado": "Colorado", + "Connecticut": "Connecticut", + "Delaware": "Delaware", + "District of Columbia": "District of Columbia", + "Florida": "Florida", + "Georgia": "Georgia", + "Hawaii": "Hawaii", + "Idaho": "Idaho", + "Illinois": "Illinois", + "Indiana": "Indiana", + "Iowa": "Iowa", + "Kansas": "Kansas", + "Kentucky": "Kentucky", + "Louisiana": "Louisiana", + "Maryland": "Maryland", + "Massachusetts": "Massachusetts", + "Michigan": "Michigan", + "Minnesota": "Minnesota", + "Mississippi": "Mississippi", + "Missouri": "Missouri", + "Montana": "Montana", + "Nebraska": "Nebraska", + "Nevada": "Nevada", + "New Hampshire": "New Hampshire", + "New Jersey": "New Jersey", + "New Mexico": "New Mexico", + "New York": "New York", + "North Carolina": "North Carolina", + "North Dakota": "North Dakota", + "Ohio": "Ohio", + "Oklahoma": "Oklahoma", + "Oregon": "Oregon", + "Pennsylvania": "Pennsylvania", + "Rhode Island": "Rhode Island", + "South Carolina": "South Carolina", + "South Dakota": "South Dakota", + "Tennessee": "Tennessee", + "Texas": "Texas", + "Utah": "Utah", + "Virginia": "Virginia", + "Washington": "Washington", + "West Virginia": "West Virginia", + "Wisconsin": "Wisconsin" + } + }, + "primary_labels_from_columns": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "state", + "label": { + "id": "state", + "type": "label" + }, + "labelName": "State", + "attribute": { + "id": "state", + "type": "attribute" + }, + "attributeName": "State", + "granularity": null, + "primaryLabel": { + "id": "state", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "product_category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..876a261fa64d698c7832e22f6ff9d0d883cf781b GIT binary patch literal 72026 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..d5eb1f649416a375a36ab1cd53157667d165b508 GIT binary patch literal 3958 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json new file mode 100644 index 000000000..c3731e11b --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json @@ -0,0 +1,126 @@ +{ + "result_id": "861756eb0873f8c0141566acb6403aa44431cb74:a184b3351edb46aa1f4a75725c3910a03f1994310544f234902875ad5599d484", + "row_totals_indexes": [ + [], + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Illinois": "Illinois", + "Indiana": "Indiana", + "Iowa": "Iowa", + "Kansas": "Kansas", + "Michigan": "Michigan", + "Minnesota": "Minnesota", + "Missouri": "Missouri", + "Nebraska": "Nebraska", + "North Dakota": "North Dakota", + "Ohio": "Ohio", + "South Dakota": "South Dakota", + "Wisconsin": "Wisconsin", + "Connecticut": "Connecticut", + "Massachusetts": "Massachusetts", + "New Hampshire": "New Hampshire", + "New Jersey": "New Jersey", + "New York": "New York", + "Pennsylvania": "Pennsylvania", + "Alabama": "Alabama", + "Arkansas": "Arkansas", + "Delaware": "Delaware", + "District of Columbia": "District of Columbia", + "Florida": "Florida", + "Georgia": "Georgia", + "Kentucky": "Kentucky", + "Louisiana": "Louisiana", + "Maryland": "Maryland", + "Mississippi": "Mississippi", + "North Carolina": "North Carolina", + "Oklahoma": "Oklahoma", + "South Carolina": "South Carolina", + "Tennessee": "Tennessee", + "Texas": "Texas", + "Virginia": "Virginia", + "West Virginia": "West Virginia", + "Rhode Island": "Rhode Island", + "Alaska": "Alaska", + "Arizona": "Arizona", + "California": "California", + "Colorado": "Colorado", + "Hawaii": "Hawaii", + "Idaho": "Idaho", + "Montana": "Montana", + "Nevada": "Nevada", + "New Mexico": "New Mexico", + "Oregon": "Oregon", + "Utah": "Utah", + "Washington": "Washington" + } + }, + "primary_labels_from_columns": {}, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "state", + "label": { + "id": "state", + "type": "label" + }, + "labelName": "State", + "attribute": { + "id": "state", + "type": "attribute" + }, + "attributeName": "State", + "granularity": null, + "primaryLabel": { + "id": "state", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + } + ] + } + ] + }, + { + "headers": [] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_multi_agg/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..06054282b4c0bc763681f710c1755c130be1892b GIT binary patch literal 31474 zcmeHQeUKEz6>nBVLeLOB@sbc-HzdJiF}HVsNNH*b7!TnD@gk&v9K-FvZQb7Py1U2S zd61$Kts*HaScx$dp(t_^a#9rWgDA1o@L?=M(BLO%i~&V*kqaT_L}Jj(ue;}M&&+M# z&hGhNW^~x;dHs6c?{)X0cR_@)ejNL+VQdWJ$0&9Y8^O+JBXNae*zo-Q z(MS%r?k^p|ujN^Z>)HTg3$1j;ANu=eTGx~C+ZoE3+15m^VWpYL##71Av`9GAm`b#^ zBpX&_jAX1Km&zH5Y(r}K@~oK)O`BM~8f@%5oGW6DEQa!48YZ9hd;E5W62>w!kqu4b zC9e=Ac81cKc#Dzgn8Qi4Vxeh73WtnbE)!qYnlqiZMIrSaX%l(tZ&+9#3WvBftqCI& z&vk^R;VKc9kE)O75WIQQysD4R2K;4C1Xq}YlQ($U>Agu7Kd z%2puBMg)gwkgdgpUK)iOp}a;RW=mIyNjQ{A zwV_N|0%{r8i&R}md`njI3cd(u`$W|6#FkXdOiWyfwm9#P{rx*p@w{#Q3cpre*O@sZ zX5lDz3&N~qEN&zXewAwDKeLTw*5H)7cwo0$MNbpg*=(vc6UXJv=CX{D zZRU5y(}OdOW|?VjQ#^&cLJoCzK|I@-N@nA{$QdaV*_ewrwsPU?jBM6uY-&XxhK_m3 zZNXZjC7o@GXG|-76HI{FVI{tu$~5D0o|#N$I}$66WSmPe9c|xe5m%XJ!ZFiK7;T0q zW@bFg+ifnGS{|Iit;jOL_RT~p6OVDW8_iT^g}65xwcXm-%%3+W)f&%QN~(jMNWkvk zc3nK1<^QMCLKj^9!5Ky-1=aGR<~Apcrj!sys=-F9huCH|YjSAyX1h@LZE-wV!r+w^ zw58`ap^*n?WvvGTrBwR#O#F_Nc-Rah5l5Gk>_C>v7%^S}wLl){;?0Ud82r|yk~vx3 zH=8TbFK~bsG%TE}pJ`8?6pJc2TgW~B=;CCd>3vi9G@9g==%R%BihjEbM9BGYL zXAbrEV-P(LMYCR@hUsSk@xAn=6wq6U~A+~j!2`rA?p4ovPa_I0+(%~1lf&V3izj(b*a@2b*c!yZ; z)>z;LyBIW<*m3X2^L4muG`RN)yaD#w%cbD1ao~=EmvFBruf5Y~SR8mh=jyy|+l}Yz za93+^KQ8bF*bA>H+(#k%;I^$=;3nHP6})8I8q32iy@BGWt$YgePCQ$OIikV5LtqWC zXAUdO#oKtqQP*McQeBs6+bmb8IB3dfZ{yqXd>!s84eqT1Z-6~@MB(l!TGv$q_ua@h z9OroOwp-V6{FX6}<-Nh;$W>N5_HM|a!CrH%278yl9AJ;Xs<0Qe>owO3?Bv4)!Mn=B zUZxLYbBjHoS3b1EzI8(m9sa30`~o-dzozgPZSytKhokX42wrOQW!g7-K`0JBpHubq z&3L{Jx6XIlAn*p*!+$OXxAffzcO`fUcbR?NdPDL6TfRy;>U%w&ufwhL-+nCc2H3XO z74AN?-9hbojr8BvTWx#{c*(}MmDtzSi@xJsaS#RQIBfL~c?#;GCS0TQ=QarZsQ?M){~JmVMQwkL^y|p> z2f<6Wzqw336KvgOyRy+W= zGTQ5WBc89rt@G{f6Lboh0C z-hBc$@E=q7i`ziy=TYCU05A3ZQf(mN7r$yI&Vv%%9Jclkd31Wv`F)!NezgBLl^%-s zeW%|y4!lF{`}qk-4;oN;752@LL4&e1GZ-_Bm<~ zN^oSi+k@?pMW+LuFSu1;$NSIQN(V*zLACS+X$%|>-l6t`{FJ>H1<>?9JVKho?1l_F z>^gt2OJGL*pHSF~js?}yAEdD$2;Nmz{g*oys81Ijz}qt0>%JRu=GwlE0OTjLEKdSdi@D3F_ebMuPJ)hN%eIsPhVb}V90yF%d zcNBJpZ#je8eChvfvHE!hc&Yz?zf7B7@FS-OMHJ>!ec?gKrqhYeC)_4<5ny{yDxDO! z1JWm?_Amjw)E>%x56XW7_M!*+UThl!wnGLTcAX!%Rba;W*INp9ryn>TyhFu4oj!$o zz^?MDdhdn|8tf6BAJ`=@!~XxH1nd#%2U5KU!Asc7wSlxCzzcM1?SNx0XbWV}Vb}S7 zn*?Uq|5FP4S@h*W?Lb8Oej6=2Fb=$Ht?SMb?SOqDh+}=kAWG2lsCMumWGbkONI0VN z0k;Vqp#T3<>7u9~9FaaC`N0#wyT;N*b_lxQ-|fV*5s!LM`IQcKLKdA4biUvYfgRsJ zPAeT0eJ6@I=LW;zE%%+sUbh^RwT`9)Ef9y&!xNB4rw5%+_^7}iV9)(a>ERsebMSs4 zeZtLF{Z9ff*#|yem-0^J)`MDKRDvpOOm=_aAmq~NL+2+xBlHkpZ@gQIKBS*W`j`pc zk3%2M^;aJC;bOAu<8{cT(}&J?d`0LXz)t;J>7%&al)mFet9{gim+WT85ZZ@*b(%+Q zI9Tku=z&Z+UFdwtH-!!Y?1Mg~i{f@u`jTWfmx6bVrI%9Y57e?kwPtS+JrvAt*Fi62 zDX4?0a75=jo)Fjr?4$RT4vO1N=X_!eyye}DV2(dj|wN1hV+ z18l_mN)N|TuY=o7=|@suNSsmg>7{;4RC*ArIz8c+ITh|+JfCp$wY&LsU{zu6LKa*H zb^<(nLEJ|+-0u44WjWTtT`QK*vGrEFkAZjS^)E&aTE^-Lzmr4hp%3zC^uXQ8f_gY5 z@T30!qw2rcRsRF@FjeY--X#-f)m%~vyrqnrs{ZrqeZA>`RtMYOqxv9+20wQp3*!e5 zM>FDs67XYBf_*(?0=ipewTbfa^XXBs^w|@BmD^VTkVAu?yN`wOi+TtC|0?|Mv0y;` zPm%a(EJ#3iYb^Zbj|FNOxJL!>Z%ceZxZ|DbEM(E>fV++bb?~mJ`v4ntPU)a%ADHZH z18L~*<7flcs(6nopxmkroP``3{M=P6j9=6}@PDZA_n)+98fqBS@k`Oag}E$Qn=9sa@Y=;8a**B|)VL(%!WF2AdJ`cu))iXAsz z`Qh)x{hJ=zE%Mi#yFYpbFJSEQ=v9l??Y;DS2cpaQ!R{34$ELyXC^FO*EMsW$anR3w@P_azZK=YpWZFY|7eFuUv}Fbk$>6PJwmS5!`lR| zlb7uj@;>$Rw?)3T?&n0lZ#=n0;(Mezx^C}#6Bf5UBIt)Nk$5^r_KJLgAMJ|*_Io{z zJEQxMZQb6D^7j`%jY8ZzDt>aGz;|rly`r3Pw?8EC&8gol?i;grMY&(h>tYPf(eRE( z2##%!jFgH z$HVaBVfgVdc*F|F9w!m?!;gpI$HQ=Z2lV4%i0@x_!uR0we~X`2d&Ui7ClUR|$B zyY9!s@L<<#{CF7LXZ7P@NE_qF!;pIL<6%fWlo}I<_JjKIFa}wwqm<;w!?42ks^|%7 z9orT^9)_4tark}JVLu)QkLe0M==MZ*`SCEA9}mNihvCP=kZX2(;NK5Aw^i-O!=QEh zemo56_xkZLq#pcu7*Y?V?qMMpU&Xl4Pkj!|t9)QT9){Gv%Lk6=d_O-PhMEWU<6$u7 z$HS0+r^Jtk!T)}f>KlGM45vQ)co?c}`0+3p^W$MiyXnWnQ2U_!T<_5X_P+Y@Fy!CI z!UBCqJP1D?Mt)y-3T>#A^?+($xQcM0f0HVdTfIy5`SCEA9}h#V6Ljr=_v2xpZ@Smg s`0+5*_{aAl+vkx7jDLPS3=vbpv2N6lhk;h(Egr^c?Bkm*{?_&X0Qv@m+W-In literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_col/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_col/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2b0f9f069affd381e3138308c711f72cf6539133 GIT binary patch literal 87217 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 F{Sz-rx6%Lr literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json new file mode 100644 index 000000000..5cd653d85 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json @@ -0,0 +1,171 @@ +{ + "result_id": "a06ba66f26441f10dc6ff037cae875c030af5d1c:a2fe59865e5d2f3f4c53c82099cf44e9d3a58e0d853fe6f975c1f6dd9babe4b2", + "row_totals_indexes": [ + [], + [ + 24, + 25, + 38, + 39, + 74, + 75, + 78, + 79, + 104, + 105 + ], + [] + ], + "primary_labels_from_index": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Illinois": "Illinois", + "Indiana": "Indiana", + "Iowa": "Iowa", + "Kansas": "Kansas", + "Michigan": "Michigan", + "Minnesota": "Minnesota", + "Missouri": "Missouri", + "Nebraska": "Nebraska", + "North Dakota": "North Dakota", + "Ohio": "Ohio", + "South Dakota": "South Dakota", + "Wisconsin": "Wisconsin", + "Connecticut": "Connecticut", + "Massachusetts": "Massachusetts", + "New Hampshire": "New Hampshire", + "New Jersey": "New Jersey", + "New York": "New York", + "Pennsylvania": "Pennsylvania", + "Alabama": "Alabama", + "Arkansas": "Arkansas", + "Delaware": "Delaware", + "District of Columbia": "District of Columbia", + "Florida": "Florida", + "Georgia": "Georgia", + "Kentucky": "Kentucky", + "Louisiana": "Louisiana", + "Maryland": "Maryland", + "Mississippi": "Mississippi", + "North Carolina": "North Carolina", + "Oklahoma": "Oklahoma", + "South Carolina": "South Carolina", + "Tennessee": "Tennessee", + "Texas": "Texas", + "Virginia": "Virginia", + "West Virginia": "West Virginia", + "Rhode Island": "Rhode Island", + "Alaska": "Alaska", + "Arizona": "Arizona", + "California": "California", + "Colorado": "Colorado", + "Hawaii": "Hawaii", + "Idaho": "Idaho", + "Montana": "Montana", + "Nevada": "Nevada", + "New Mexico": "New Mexico", + "Oregon": "Oregon", + "Utah": "Utah", + "Washington": "Washington" + } + }, + "primary_labels_from_columns": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "state", + "label": { + "id": "state", + "type": "label" + }, + "labelName": "State", + "attribute": { + "id": "state", + "type": "attribute" + }, + "attributeName": "State", + "granularity": null, + "primaryLabel": { + "id": "state", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "product_category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/totals_subtotal_row/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..6be265e19b3f48e91d4b716ada2904b40e45b6a1 GIT binary patch literal 71386 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 literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json new file mode 100644 index 000000000..5e50f5b8a --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json @@ -0,0 +1,159 @@ +{ + "result_id": "b18770546d0c68ebb98977715330e74bc288fc8e:fa754b08b892de84419bd9fb61752ff6a99a09b4e94087ed9c0e0520d8fad370", + "row_totals_indexes": [ + [], + [] + ], + "primary_labels_from_index": { + "0": { + "Alabama": "Alabama", + "Alaska": "Alaska", + "Arizona": "Arizona", + "Arkansas": "Arkansas", + "California": "California", + "Colorado": "Colorado", + "Connecticut": "Connecticut", + "Delaware": "Delaware", + "District of Columbia": "District of Columbia", + "Florida": "Florida", + "Georgia": "Georgia", + "Hawaii": "Hawaii", + "Idaho": "Idaho", + "Illinois": "Illinois", + "Indiana": "Indiana", + "Iowa": "Iowa", + "Kansas": "Kansas", + "Kentucky": "Kentucky", + "Louisiana": "Louisiana", + "Maryland": "Maryland", + "Massachusetts": "Massachusetts", + "Michigan": "Michigan", + "Minnesota": "Minnesota", + "Mississippi": "Mississippi", + "Missouri": "Missouri", + "Montana": "Montana", + "Nebraska": "Nebraska", + "Nevada": "Nevada", + "New Hampshire": "New Hampshire", + "New Jersey": "New Jersey", + "New Mexico": "New Mexico", + "New York": "New York", + "North Carolina": "North Carolina", + "North Dakota": "North Dakota", + "Ohio": "Ohio", + "Oklahoma": "Oklahoma", + "Oregon": "Oregon", + "Pennsylvania": "Pennsylvania", + "Rhode Island": "Rhode Island", + "South Carolina": "South Carolina", + "South Dakota": "South Dakota", + "Tennessee": "Tennessee", + "Texas": "Texas", + "Utah": "Utah", + "Virginia": "Virginia", + "Washington": "Washington", + "West Virginia": "West Virginia", + "Wisconsin": "Wisconsin" + }, + "1": { + "South": "South", + "West": "West", + "Northeast": "Northeast", + "Midwest": "Midwest", + "Unknown": "Unknown" + } + }, + "primary_labels_from_columns": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "state", + "label": { + "id": "state", + "type": "label" + }, + "labelName": "State", + "attribute": { + "id": "state", + "type": "attribute" + }, + "attributeName": "State", + "granularity": null, + "primaryLabel": { + "id": "state", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "product_category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..2ce9a56380b0be56c686394831e8cc08acbdc6aa GIT binary patch literal 12602 zcmeHOYjhM<5^lqDS%j=|SVYt~pa&&j06_&k+ZYj82oVwl1Pq;-CTVA;J52W^frK>) zugD_=!Xtzb0)+QN1Q7($h&*;VsGzQhhh25o2OMGDU3?%uvQ@XLduEc5C7%7YCs!xc zw{P9LRrOWXz1_BhMvqP$+gp-qpmk~|NzoFvHc~sOrPM-d4Oh@^Xztu^3*F{?zqAEj z)9(qm9@UvI1Ia&{8Ar3JJ;6GGMMN zdGNSoSF9^7py)xL640z^t^si6i=}mvHOq%=Nn)umfwc#w7y-Xx(cBraU{sngrXJmR zC`^`6&bj>yv>Q#Ug^9G)b4F_Emk}^LLAPc0a)S%gi~v|&kE(UK!j=$P*T?Y-42ZY2 z2$OG{5H=QJ1bEr60=#Y!3lIWs5epU}Mi@p+h;q^A?F@xxS ztjnI|>ee;3Yu7l}3<2oWplVvGCn;UQz{v?MJ^|wo7Oy3L5=4QK1W zd+m|`A{u0a_k(_2l#38^4q6D1#QO{@UDMORS{QU&0Yk?ai**e({0MSl(DE2Yz%>a3 zS%#(f%rF3iaDN6=oO%Prk3RJGc1;S!1~^a{3%Bf`01!nK+~~wWwxy(s5RfKb3DwVz zFrMSm%w#BDW`<#^Q2M5TJ}N{|Xl|yaX3^YV1AlaDNjlX^lB(dhxg}7j&)cC`zX%2Q zB-GbWA+Ej#KCIvKzOSi)BHs+_^at>RsZtmCVZ->O^h-$#7{QDbDDW^{%7ve({V+G3 zug3$0WTS#hlfY(8_o&%W?zz&YWGX($Fhs!duoFfpqNdcxg2`g<71^*R>WAy&el#IY zI6HPi-$|388|IUcKLf(XC@J%5BW!&j($;@oudSfZH4SN`tsc;~j;#<~4cYp%urW$X z{UK!QDey~!xb`PoE#O1Ho&y<^`8o+`V{jD-1aZz8TnAJdpW)y+6!ffPBc#iOKG(+c zQDIw@^!SgBu(4mHjnyFIx@@cm&&Jvq3wqYE5pit5#=C`WQPRCXg>3v7uxJp+`^m;x zz=t?ifs72kR)97J$MCY)0GttQ;dvSZde^ZTaqWF=TssR}qomt^ZiLN!BW*4P8P{cV zJ-9{~bL|k0U<!L zvlBJ|a)>9CxA@Rd$5zBQ?ppY^gr|z;@I&2ik~)EfEu~hXhDS>s;0`w0hdza?2JMG) z67EBGoG$=fuFL*xud1>_>=s1Aaiu(GO_FcEY^_K6`b7 zAIiao<8j(o7SOXAoCw7K{PpW`}2co$`ZZ=;ZQgP*+yKHsIJzyUS| z_iglfTllpSHsJ)c4I3<7QwR>nGXl1@Qb*7apAg#$o26#Wh3;_#B5<^UKKTdND2MX~ zt{n$IyP>VuYBrxuZ9cnS2=cJ)XS#{$WIQBrYS>#Pt%5Zlyqa5&!_2zW)9OmnxZSij4WliSZX*t z>;~Q5X(NoFX5vr+yjSumx+g&~O~suaG*!zo6Et_amZsIRMliPTQSF2O8S!;cnIc?RX{a8%`)_{@U|nyxviOQLpL=$ifM1bP~x&C zo~^KNmw9|P#nzdK)Rk#>rahU$aYZzEq!Mi))88?DoM{5nWTtqQ!8Td^l_c1rM0GN0dYtK7Oy6aChUv#lzhHWishy8kxNqm> z4V)J(nYLkS=c&Cv2{;iW{6%y`u&4^(6+@vv_KXD0lLZs&B_VEc<;aU<7Gr!1rG{NP zGn@-#a5~{Ld6u{p!8Atq>PD6x&MU4R&d3XvBT0R+xo643t-A{4HfPpn9J;htegrR` z&68(;Ick4J-(&KdC!yWCLSA(Eo9+__&X;!%`DA*B^LaA--8p3YdU+xYv@WWaNAJIV z_LuKf$W<92;k%h~4h(;C%#`mzhWTq~oz6w_6l|?m%Q!qe`Z*eRFD3r-C1Ty%$Cr{G zA1#!>?G6IIEF!s=R+Ao!rV({jl75>DNY3a2;=5(8dbjWpo#!XMqosncbo1*Z zZ*Q^aKiF&w*;!mf^n-k|um5VYYtS58w^Na@=iKlOB){Wav0h2;3F>cKLH^jcNFIug z_s$W1@4kGKz#}>Rh>(9Zsfy%Zm{0!k<_dkhZ>^{GRxS}ZKeBTz&0jK~{B~Oz>6f~U z`uP>a_lIIyUtUc1%v?wI^_xZGAFgNIW|LlhN$z@G2+2K6v9g$NwV!o-dIvjsj#?WYhiFHRS(R$7G1!N80>xnOMJl z{C1LmH}faXrno*@DZ_F6tJmOZQN;DOg|uFe`DE8Om1Ngpll)$AjQX#ZQ+ynlPyC}6 zkY94Q2z>_MSxtWIUru_wFqi!BYJlQUt|0&V7ZW}@%loi^@OZeG*88!H);YY8@&k5uM{bUzyJnL;!&f=-M1Eb&BY$;HBfIWfD)Ql$E7gQcpoHxFVm;Y)VFA^T4ED>I zat8;Irw5l1|DOqmL#69T4{bWd&8ZW@@5k?5M}D2mabn}}?oKiP;j$y-r_+@V4x&DN zpGErjSV#BMDIX4vSx(%8u zk5F8VSuXOg*V7vbui`}x4kDjcS0N5Hm=B^ZADBydvvQW0zj=2h*PUEpXZD6_lG~}6 z>R$=h-LX03$EBNu9{q;yBRLl1^m;ap|7INdf7eRF@$;$V=Y$oc|1)zb4xcq?{tHW~ ze)*^#?C&+5`kr#)d!vN>c|xUrn+o#JsWghagLx$9A%$>zz(aIMCgtm7i}X3ah4^zz z3Gb6V$nM$eN$#zMG_U=0q;ECnCtxe~hr4Eyyop|tGkB)()A=s15Pzq6Lhgu*8%V!` zJhCI{If|RAr49~aAN^qg>2-Ml;dd^C1LE}5zYlZVEOT%W`?s1;_#W9N=AVc;Kyfv2 zDfu685c#zjxx9}94ygawgH>er zQ&|oUB2L$+b#M^pg`ym)r~RKN|5TPaIEZ=ftz_rvc@7R@KR;Vc{0-oMdG}SHY6l0Q z-=(b-7v3WBi?W2)ODaPgHXQmH-v8ox=IRc?=RI9TcE7xx;$rGnv2L9Etngpr9WRl* zGh7#AmkGJYw;dAezI5gt;fJ^_d&nP0w-SDpiv|9t+iaow3Hz2fUme{-<4>*Qdf}z~ zxS99wE4#?=sVm7Z1GW;5UsVw<-8K?^bCcsAQAbYmxexqhH{t)QKH2VL96iyV&ojFi z4<5`r`@E3*_x<}R-gmDezg&9VnJ?m}fa@sC6aC|)=Y@~np}3mxqNqnRK08Q$TCs!V zjH7(@wtMNialmux#GQY+E*#$PdsgUKt?YAfz;jivjI9n1B9D&mB>!#a{m{W7$H4*p zwzkzl2M4V8=l->q;$Yim2M2M!p0dO7&-LPf^7G$5LHXZ)k24=!D#^`Wb8x`(>@EE& z$^LH+JAAcq5cPigY7tjOUEddS|53J&;^(thL|&a+zN}h(COOaB5T2w=kg^{eSW;j0{C)kobQl{sSm;YSN|Jn|LPcQfk9VT8QvIlTmNVn?a0{5vNG7Rm63ih23t!8+1NSn=}GVD zUdi%^lZy07@0@eb@7#0GIrrR)yTV58rZLl$>G2SJ8IBkXwqIvD51 z_OaLV=YQcr-wqIv59i zo_hbcavXfs{RavTt~hd(^+8$0A*q9LK0k5s<)_d5#q-{~@4ovl@oy9ymBScSS;Qf! zgK^LohhMtkfpGZjjrTsJ;HVtMZzzj6By}(ja1F1$^+%8F`wqO5iw5v+Djf@s0a|U9J=}{2}m4DON1irCRSsH)}X?zbwcc(u(zJ zpSXS0Wnd0eGX-8un;tiq4n8r;JbdE#QZd`)tF_}Nr;dAtQms&w^2eW4xR2<#3j&|1 zRZ3DZQ&k0y>I4=`BCm4HI?i&vmMxVkDs$q*@o=e9EAVML?qm<2f^6y$(PA?_ydHEI zdZARW6=*Ytp&cFt^{|GmMLedV_n?7?*Q8CU)Rbs=FfiW7`7lsrQ7jqna*G##9984iq3^oiqWP^oiMp6yK zfzx7HgL?Bm>y`Tem29^Vm81@d+9yvmz&rO_Z;b&k*?%E0NgWcne-3J}U;L8wDt6Mi zw_p#qYo|7xs|V({2L8IydKtrvY}Ih;Bz4HC(`$zY_sT)*%?ALNY~2u-qz;MOw=QX* zZ#`(;c@UtYG7gwz^M{xubx2I=KA?f!IbywaxV^giUQk_KJ#|RfetV3Jyfb3{ z`H1z_QR~&CfJ}CYh)hz4M5gXvnh9SuSzj~(EZH<7EJ+;_w%^{ULB9O3^|~35$u<&^ zN$QZu#J;P6yvbOvFaSw*ln6;uhlHf<=^E6XN36Fd0F~@75tXFwf_kXk1CafKjQQq> z`DY{6S0}AkADx`-(|8h_fY~ykZujO-A2p9zjpo~vUzJdTj+V!72}l(-G(c9AafwRARJON0JP7G45z=#UX?ZPj<`tmV1qP6Ay8@}_Hi zzEo+ECTKbPU_{q5JucDp;oSzGG;n}mkG(mel&;OrkWSMuG+vYHf}nGf4oTPB?qU@o zyPt+BZS^h|b%plRluj$Zi#0mAJ8n>)BOA@80iyeB77-!(I?!`4B&7G(xNfivw5lt% zzvk$oWuQem$vbXT=fFLJ)u^xF9XCn6dl?+bbg6wahKSDI^-}F21ozFPZix1?r7N*-M(CompB*}(J8KH| zMMS4c_Pij{gS)q;Rc^oJ_OQaIYo&_Z#|lNRl7==F+Sqa{U8$6sm^cl-QpNrms1EyS z+i9Bx`Zg6^%RKEo?X)~+U=Fd-=yLpN10ER2J1R5HKd1v0#|Y$yWqb7umgP*3?|GYLny z!7avWoU~M2F3xcQ!JSLTU7M*yA;H^?-gN>wE7Lv}0!jH#n$#}Go^)KKYz?N7&>2Pnt zJS1745L=5DZ8HJM?hbj8-?b&;@Yz!FY$GFW%DPgbAaMR@juU;gHr9MH5fxGncZn&L^pJg|)15i!i6f!E=blw_tsvEzaR8C!I@snTHSJb|bqOY~Y$? zTK9e~7yNFBrM4ZEd^qpThSTw=GnEM2f~{sgXe%@zm()4a;;qNWWW1%stwu5tafH2c z%+^v6Ybn3amc;z=gS>x>$OY04w>|5RHaKTMwPlz%TFEA&n;hgzu%+Zw#_xk#5-HauBxB)e?M5*=E`l|K6E@$qU&BN^r zTDw`GRNr$VEblzcw$($9?vyBp3lQGxfltEogv z;CyGB3Hw?3+(z3&vvD{(z&Q}kad>W{^qB5qT7cUv8C? zQm}w$Mm*cW*%W>U8`+kO<47ff+w%Dr&$1hVtA;rH-kf$@qGpF1H3b+FNY5xb)GBR)6;l;5LuJ0fXfJck)QZjz@KmzK)WA6 zJ^+C>S$<}EWqMjBZ6Sx<#D{$UfInDv6(4ZkpvP#0Ew;yd*~R&@)6-``dSPBR)hp{) ztVSh@(o#@UW7PaaHtVaj#|PMFJM&wTmGsWfhjaJlB~2a>b%zad9eu9d^dY`ppYDu} zY&IO~=nJek+y39hz5)9Z%bsy7{tB>(-SiF5)C^aW)B*_DbY{_N4G zU5k99J-_^XWICsdk18tA#77d}AwCB7Z79Pog*x^vtehF_KZDa?13ICE<1t>T`irW^8ny=-9nDSbR+KDM(Ef6cAolXe~ra1OfwXIK=P?dV(D z(CdS003S_$U{F)_k+F@Ep)+lL0d^j8Sg8j}JQDM7`;(l%?#vBJ=ezS?fEuIA=id3t zOHbTsY5PY|IEz=O@D2Xl=+P%TTr+>Dk@EcYcVwNoTnx3xLrL9jzH;d#?#(EE^tL+o zK~TeGE)?b@JJ-a5EiaA|6&UhLeUukT6aNX6BkyB+{mMcJ=JCE5zU2?p{&VLH%v3pD qdA82iPG!pFQ}TuNRQp1DO1Y|rKVgNxX8k|@86G`lFs#7;VDvv`2cDS# literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json new file mode 100644 index 000000000..438774518 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json @@ -0,0 +1,86 @@ +{ + "result_id": "833d5dcc7ca1d9f6925be1faf3914295ab1f61ff:d10d5d4fdb23733cf9d282d22a2d02e36c4e50fff89aa2272b5bd47a80158774", + "row_totals_indexes": [ + [] + ], + "primary_labels_from_index": {}, + "primary_labels_from_columns": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "dimensions": [ + { + "headers": [ + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "product_category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..8c7f8096c9e5bcfda41307438c8fce8ebaf5e664 GIT binary patch literal 4754 zcmeHLZ)hAv6rVKLB&2Cc_0)h8WD_OArQ|Bo8mw$+f`4mBa<$S+I5&6O%h|o%b8jzy zdJWB&g8fuKNh5xU2wD(ophcozidG0nA`ufbrC_5)Y%3zz78Tm__hx4AHg`!B6+hhz zli$p|d2il(^Y+ao9lgEX2ZD^{Knqoj)ia`6wvAP>&8!AJP=zl)Ux%Sj&Ko}Ji`I*jY*MLmSkM zw9-zJaW0WnQg$M#*<;TW>zSC+?y>@k<~Vj@FyrW}r@4~QSW3s*P}fT#C7{G@&CD2@ zop8pKcJz#Z*eaB83|iJJcJrt#;T*E;q~-|e@c^u{VwtFu-VxOtJ#N|1yN0Qyt2|q9 ztJhlb4;}y5Qlhaspl?bwn`A1CB695sIwhh?s~dtr7?*mL1dWh?cZ6CPI;4 zt8~-+gB@Z%ptw>>b5o$HsZANjR<{0XMo&9>tZzu8qsbOF57QZA^CJBN5VA&KT)1%L zrQyP=s6{zL29NXn+J<}@ZAFH)Casumv<@TJYi{RqFIR|M>jBDK+owBPOmj4{$7tif zOY>~~43wNMLr?0aBaH|s`l>OUH-f8Gm%2e2Rg~u&Ec%NLu_I!VNt*nlDJ;%{;aHAl zq&S%*J>}=vrp(fk|epX4O zL--ogDJ!kxYj*66PKQ>I9Zu*YLUuFeZ{V!Xp&dp03}dPlFQRUtKvhzWIfYh(_5d0Y zoxRBFNZhtEsmM;oP+Hg%Xe3(?*%sNqABY?ll|l%?v4k1ZM|r7o>r^LX8l=n?V7QG( zBoH1L@YwD8T!kv?L!*7~Vhymaid8eJq4ms<86si(6nY!lj=Uw?JJHDYxxZ_B+jzdl z)?jC<-Ly}M4>-s5d?2gI2eM#F#M@8zL^B%MLbM&NBuO#%4c0GuWaw;M8PX|gJI&FL zh>JH$;y$X_RJiCLEYUvM|paR~J8*n)cDW=sG1iwkP)*YBimuY9ih&pfqqE%>eaNdL)C z_xmoWD@Xii;?I4eX2E#-y$?D6;L=y>t(N|i?Yq9?^V?6XsN~kv`Acf=Oylv{Ew|K1 ziO%j+q3*~zb4i__o0~g&Y>CT%{KgmRPdzh@TWhbWZ%$55o=_LnJuu*xQ;X{H>pe4f zA`2?iTu<2Fb3MOK%yK)etFv66fBqxB?#aiOx!xPeA5@rob9(-Yu=B^uoIg1Id)^MR z>;08w6>jdicx;*Pd-ckfT<-_ zO4fx!{Q{FyEtf67)yr@7qPKMUt?s_B3$J1E7mi+jtC!#E<+nO+82-MeH`)L7R{st6 JSqJ}L)SuAut~dYy literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/dataframe.parquet b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/dataframe.parquet new file mode 100644 index 0000000000000000000000000000000000000000..035e0747575ab5a7e9732a8a0bc0060a3819a18a GIT binary patch literal 79032 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 Gt^XgeaqJTS literal 0 HcmV?d00001 diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json new file mode 100644 index 000000000..4a10bca91 --- /dev/null +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json @@ -0,0 +1,158 @@ +{ + "result_id": "16c598b975e1507d58815eb8aa7c041fa87284ba:1c61fa90d6c69956cd02afaab527bf6ca9f76dab52dbac8e5a0a8f8df719c878", + "row_totals_indexes": [ + [] + ], + "primary_labels_from_index": { + "0": { + "Clothing": "Clothing", + "Electronics": "Electronics", + "Home": "Home", + "Outdoor": "Outdoor" + } + }, + "primary_labels_from_columns": { + "0": { + "Midwest": "Midwest", + "Northeast": "Northeast", + "South": "South", + "Unknown": "Unknown", + "West": "West" + }, + "1": { + "Illinois": "Illinois", + "Indiana": "Indiana", + "Iowa": "Iowa", + "Kansas": "Kansas", + "Michigan": "Michigan", + "Minnesota": "Minnesota", + "Missouri": "Missouri", + "Nebraska": "Nebraska", + "North Dakota": "North Dakota", + "Ohio": "Ohio", + "South Dakota": "South Dakota", + "Wisconsin": "Wisconsin", + "Connecticut": "Connecticut", + "Massachusetts": "Massachusetts", + "New Hampshire": "New Hampshire", + "New Jersey": "New Jersey", + "New York": "New York", + "Pennsylvania": "Pennsylvania", + "Alabama": "Alabama", + "Arkansas": "Arkansas", + "Delaware": "Delaware", + "District of Columbia": "District of Columbia", + "Florida": "Florida", + "Georgia": "Georgia", + "Kentucky": "Kentucky", + "Louisiana": "Louisiana", + "Maryland": "Maryland", + "Mississippi": "Mississippi", + "North Carolina": "North Carolina", + "Oklahoma": "Oklahoma", + "South Carolina": "South Carolina", + "Tennessee": "Tennessee", + "Texas": "Texas", + "Virginia": "Virginia", + "West Virginia": "West Virginia", + "Rhode Island": "Rhode Island", + "Alaska": "Alaska", + "Arizona": "Arizona", + "California": "California", + "Colorado": "Colorado", + "Hawaii": "Hawaii", + "Idaho": "Idaho", + "Montana": "Montana", + "Nevada": "Nevada", + "New Mexico": "New Mexico", + "Oregon": "Oregon", + "Utah": "Utah", + "Washington": "Washington" + } + }, + "dimensions": [ + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "product_category", + "label": { + "id": "products.category", + "type": "label" + }, + "labelName": "Category", + "attribute": { + "id": "products.category", + "type": "attribute" + }, + "attributeName": "Category", + "granularity": null, + "primaryLabel": { + "id": "products.category", + "type": "label" + }, + "valueType": "TEXT" + } + } + ] + }, + { + "headers": [ + { + "attributeHeader": { + "localIdentifier": "region", + "label": { + "id": "region", + "type": "label" + }, + "labelName": "Region", + "attribute": { + "id": "region", + "type": "attribute" + }, + "attributeName": "Region", + "granularity": null, + "primaryLabel": { + "id": "region", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "attributeHeader": { + "localIdentifier": "state", + "label": { + "id": "state", + "type": "label" + }, + "labelName": "State", + "attribute": { + "id": "state", + "type": "attribute" + }, + "attributeName": "State", + "granularity": null, + "primaryLabel": { + "id": "state", + "type": "label" + }, + "valueType": "TEXT" + } + }, + { + "measureGroupHeaders": [ + { + "localIdentifier": "price" + }, + { + "localIdentifier": "order_amount", + "format": "$#,##0", + "name": "Order Amount" + } + ] + } + ] + } + ] +} diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/result.arrow b/packages/gooddata-pandas/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/result.arrow new file mode 100644 index 0000000000000000000000000000000000000000..50ecd8333497c67841f3961fc4b3563815a158b6 GIT binary patch literal 62570 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 X_FAR4Y#{aTy;6t^=FOXPS list[str]: + manifest_path = _ARROW_FIXTURES / "manifest.json" + if not manifest_path.exists(): + return [] + return [ + c["name"] + for c in json.loads(manifest_path.read_text()) + if (_ARROW_FIXTURES / c["name"] / "result.arrow").exists() + ] + + +def _load_case(name: str) -> tuple[pa.Table, pandas.DataFrame, dict]: + """Return (arrow_table, expected_df, meta) for a ground-truth case.""" + case_dir = _ARROW_FIXTURES / name + with open(case_dir / "result.arrow", "rb") as f: + table = ipc.open_file(f).read_all() + expected = pandas.read_parquet(case_dir / "dataframe.parquet") + # Parquet serialises MultiIndex column tuples as strings — restore them. + cols = expected.columns + if not isinstance(cols, pandas.MultiIndex) and len(cols) > 0: + first = str(cols[0]) + if first.startswith("(") and first.endswith(")"): + expected.columns = pandas.MultiIndex.from_tuples([ast.literal_eval(c) for c in cols]) + meta = json.loads((case_dir / "meta.json").read_text()) + return table, expected, meta + + +def _assert_df_matches(actual_df: pandas.DataFrame, expected_df: pandas.DataFrame) -> None: + assert actual_df.shape == expected_df.shape + # Compare values only — storage dtype may differ across types_mapper presets. + assert actual_df.index.tolist() == expected_df.index.tolist(), ( + f"row index mismatch\n expected: {expected_df.index.tolist()[:5]}\n actual: {actual_df.index.tolist()[:5]}" + ) + assert actual_df.columns.tolist() == expected_df.columns.tolist(), ( + f"column index mismatch\n expected: {expected_df.columns.tolist()[:5]}\n actual: {actual_df.columns.tolist()[:5]}" + ) + exp_vals = expected_df.to_numpy(dtype=float, na_value=float("nan")) + act_vals = actual_df.to_numpy(dtype=float, na_value=float("nan")) + both_nan = numpy.isnan(exp_vals) & numpy.isnan(act_vals) + assert (numpy.isclose(exp_vals, act_vals, equal_nan=False) | both_nan).all() + + +@pytest.mark.parametrize("case_name", _cases()) +def test_arrow_converter(case_name: str) -> None: + """Classic (default) conversion matches the JSON-path ground truth.""" + table, expected_df, meta = _load_case(case_name) + actual_df = convert_arrow_table_to_dataframe(table) # types_mapper="classic" + + _assert_df_matches(actual_df, expected_df) + assert compute_row_totals_indexes(table, meta["dimensions"]) == meta["row_totals_indexes"] + + +@pytest.mark.parametrize("case_name", _cases()) +def test_arrow_converter_arrow_strings(case_name: str) -> None: + """arrow_strings preset: numeric values identical to classic; string columns use Arrow-backed dtype.""" + table, expected_df, meta = _load_case(case_name) + actual_df = convert_arrow_table_to_dataframe(table, types_mapper=TypesMapper.ARROW_STRINGS) + + _assert_df_matches(actual_df, expected_df) + + # String index levels must use the Arrow-backed StringDtype. + idx = actual_df.index + if isinstance(idx, pandas.MultiIndex): + for level in idx.levels: + if level.dtype == object: + # object dtype means a numeric or non-string level — skip + continue + assert isinstance(level.dtype, pandas.StringDtype) and level.dtype.na_value is pandas.NA, ( + f"Expected Arrow-backed StringDtype on index level, got {level.dtype}" + ) + elif idx.dtype != object: + assert isinstance(idx.dtype, pandas.StringDtype), ( + f"Expected Arrow-backed StringDtype on flat index, got {idx.dtype}" + ) + + +def test_arrow_converter_custom_mapping() -> None: + """CUSTOM preset with an explicit mapping works end-to-end.""" + cases = _cases() + assert cases, "no fixtures available" + table, expected_df, _ = _load_case(cases[0]) + mapping = {pa.string(): pandas.StringDtype("pyarrow"), pa.large_string(): pandas.StringDtype("pyarrow")} + actual_df = convert_arrow_table_to_dataframe(table, types_mapper=TypesMapper.CUSTOM, custom_mapping=mapping) + _assert_df_matches(actual_df, expected_df) + + +def test_arrow_converter_custom_mapping_missing() -> None: + """CUSTOM preset without custom_mapping raises ValueError.""" + cases = _cases() + assert cases, "no fixtures available" + table, _, _ = _load_case(cases[0]) + with pytest.raises(ValueError, match="custom_mapping"): + convert_arrow_table_to_dataframe(table, types_mapper=TypesMapper.CUSTOM) + + +def test_arrow_converter_unknown_types_mapper() -> None: + """An unrecognised types_mapper value raises ValueError.""" + cases = _cases() + assert cases, "no fixtures available" + table, _, _ = _load_case(cases[0]) + with pytest.raises(ValueError, match="Unknown types_mapper"): + convert_arrow_table_to_dataframe(table, types_mapper=object()) # type: ignore[arg-type] + + +# --------------------------------------------------------------------------- +# compute_primary_labels — ground-truth fixture tests +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize("case_name", _cases()) +def test_compute_primary_labels(case_name: str) -> None: + """compute_primary_labels matches primary_labels stored in meta.json ground truth.""" + table, _, meta = _load_case(case_name) + primary_from_index, primary_from_cols = compute_primary_labels(table) + # meta.json stores dict keys as strings (JSON limitation) — convert back to int. + expected_idx = {int(k): v for k, v in meta["primary_labels_from_index"].items()} + expected_cols = {int(k): v for k, v in meta["primary_labels_from_columns"].items()} + assert primary_from_index == expected_idx + assert primary_from_cols == expected_cols + + +# --------------------------------------------------------------------------- +# _compute_primary_labels_from_inline — unit tests for non-identity branches +# --------------------------------------------------------------------------- + + +def test_primary_labels_from_inline_separate_column() -> None: + """When primaryLabelId != labelId and a separate column exists, it is used.""" + table = pa.table( + { + "__row_type": pa.array([0, 0], type=pa.int8()), + "display_label": pa.array(["New York", "Los Angeles"], type=pa.string()), + "primary_label": pa.array(["ny", "la"], type=pa.string()), + } + ) + xtab_meta = {"labelMetadata": {"l0": {"labelId": "display_label", "primaryLabelId": "primary_label"}}} + result = _compute_primary_labels_from_inline( + table, + label_refs=["l0"], + label_ref_to_id={"l0": "display_label"}, + xtab_meta=xtab_meta, + ) + assert result == {0: {"ny": "New York", "la": "Los Angeles"}} + + +def test_primary_labels_from_inline_fallback_identity() -> None: + """When the primaryLabelId column is absent, falls back to identity mapping.""" + table = pa.table( + { + "__row_type": pa.array([0, 0], type=pa.int8()), + "display_label": pa.array(["New York", "Los Angeles"], type=pa.string()), + # no "primary_label" column + } + ) + xtab_meta = {"labelMetadata": {"l0": {"labelId": "display_label", "primaryLabelId": "primary_label"}}} + result = _compute_primary_labels_from_inline( + table, + label_refs=["l0"], + label_ref_to_id={"l0": "display_label"}, + xtab_meta=xtab_meta, + ) + assert result == {0: {"New York": "New York", "Los Angeles": "Los Angeles"}} + + +# --------------------------------------------------------------------------- +# _compute_primary_labels_from_fields — non-string skip branch +# --------------------------------------------------------------------------- + + +def test_primary_labels_from_fields_skips_non_string() -> None: + """Non-string entries in label_values / primary_label_values are skipped.""" + gdc_data = { + "type": "metric", + "index": 0, + "label_values": [123, "cat"], + "primary_label_values": [None, "primary_cat"], + } + field = pa.field( + "metric_group_0", + pa.float64(), + metadata={b"gdc": json.dumps(gdc_data).encode()}, + ) + result = _compute_primary_labels_from_fields([field], n_col_labels=2) + # j=0 skipped (123 is not str); j=1 included + assert result == {1: {"primary_cat": "cat"}} + + +# --------------------------------------------------------------------------- +# DataFrameFactory.for_arrow_table — unit test (no live server needed) +# --------------------------------------------------------------------------- + + +_FOR_ARROW_TABLE_CASES = [ + pytest.param("dim_r_m", id="no-totals-flat"), + pytest.param("dim_m_c", id="transposed"), + pytest.param("tot_d0_sub_grand", id="row-subtotals"), + pytest.param("totals_both_dims", id="both-dims-totals"), +] + + +@pytest.mark.parametrize("case_name", _FOR_ARROW_TABLE_CASES) +def test_for_arrow_table_without_execution_response(case_name: str) -> None: + """for_arrow_table with no execution_response: DataFrame matches, metadata is empty.""" + if case_name not in _cases(): + pytest.skip(f"fixture {case_name!r} not available") + table, expected_df, _ = _load_case(case_name) + gdf = DataFrameFactory(MagicMock(), "test_workspace") + df, metadata = gdf.for_arrow_table(table) + _assert_df_matches(df, expected_df) + assert metadata.execution_response is None + assert metadata.row_totals_indexes == [] + assert metadata.column_totals_indexes == [] + + +@pytest.mark.parametrize("case_name", _FOR_ARROW_TABLE_CASES) +def test_for_arrow_table_with_execution_response(case_name: str) -> None: + """for_arrow_table with execution_response populates row_totals_indexes from meta.json.""" + if case_name not in _cases(): + pytest.skip(f"fixture {case_name!r} not available") + table, expected_df, meta = _load_case(case_name) + mock_exec_response = MagicMock() + mock_exec_response.dimensions = meta["dimensions"] + gdf = DataFrameFactory(MagicMock(), "test_workspace") + df, metadata = gdf.for_arrow_table(table, execution_response=mock_exec_response) + _assert_df_matches(df, expected_df) + assert metadata.execution_response is mock_exec_response + assert metadata.row_totals_indexes == meta["row_totals_indexes"] + assert metadata.column_totals_indexes == [] + + +def test_build_inline_index_total_row_no_totals_meta() -> None: + """Total rows with absent totalsMetadata hit the 'if not refs: continue' branch.""" + table = pa.table( + { + "__row_type": pa.array([0, 2], type=pa.int8()), + "region": pa.array(["West", "sum"], type=pa.string()), + } + ) + xtab_meta = { + "labelMetadata": {"l0": {"labelId": "region", "primaryLabelId": "region"}}, + # intentionally no "totalsMetadata" + } + model_meta = { + "labels": {"region": {"labelTitle": "Region"}}, + "requestedShape": {"metrics": []}, + } + idx = _build_inline_index( + table, + row_label_refs=["l0"], + label_ref_to_id={"l0": "region"}, + model_meta=model_meta, + xtab_meta=xtab_meta, + ) + assert idx is not None + # Total row: no agg info available → value is uppercased as-is + assert idx.tolist() == ["West", "SUM"] + assert idx.name == "Region" + + +def test_compute_row_totals_measure_in_row_dim() -> None: + """measureGroupHeaders entry inside the non-transposed row_dim appends [].""" + table, _, _ = _load_case("dim_r_m") + # Inject a dimension that also contains a measureGroupHeaders entry + custom_dims = [ + { + "headers": [ + {"attributeHeader": {"label": {"id": "region"}, "localIdentifier": "region"}}, + {"measureGroupHeaders": [{"localIdentifier": "price"}]}, + ] + } + ] + result = compute_row_totals_indexes(table, custom_dims) + # dim_r_m has no total rows → total_row_idxs=[] for the attr level; + assert result == [[], []] + + +def test_compute_row_totals_unknown_attr_in_row_dim() -> None: + """Unknown attributeHeader in the non-transposed row_dim appends [].""" + table, _, _ = _load_case("dim_r_m") + custom_dims = [ + { + "headers": [ + {"attributeHeader": {"label": {"id": "region"}, "localIdentifier": "region"}}, + {"attributeHeader": {"label": {"id": "unknown_attr"}, "localIdentifier": "unknown"}}, + ] + } + ] + result = compute_row_totals_indexes(table, custom_dims) + assert result == [[], []] + + +def test_compute_row_totals_field_rows_unknown_attr() -> None: + """Unknown attributeHeader in the field-rows row_dim appends [].""" + table, _, _ = _load_case("dim_m_c") + # dim_m_c: transposed, col_label_refs=[] → metrics-only, row_dim found by measureGroupHeaders + custom_dims = [ + { + "headers": [ + {"measureGroupHeaders": [{"localIdentifier": "m0"}]}, + {"attributeHeader": {"label": {"id": "unknown_attr"}, "localIdentifier": "unknown"}}, + ] + }, + { + "headers": [ + {"attributeHeader": {"label": {"id": "products.category"}, "localIdentifier": "category"}}, + ] + }, + ] + result = compute_row_totals_indexes(table, custom_dims) + assert result == [[], []] + + +def test_convert_arrow_no_schema_metadata_raises() -> None: + """Arrow table without any schema metadata raises ValueError with a clear message.""" + table = pa.table({"col": [1, 2, 3]}) + assert table.schema.metadata is None + with pytest.raises(ValueError, match="no schema metadata"): + convert_arrow_table_to_dataframe(table) + + +@pytest.mark.parametrize("missing_key", ["x-gdc-xtab-v1", "x-gdc-model-v1", "x-gdc-view-v1"]) +def test_convert_arrow_missing_required_key_raises(missing_key: str) -> None: + """Arrow table missing any of the three required schema keys raises ValueError naming it.""" + table, _, _ = _load_case("dim_r_m") + stripped_meta = {k: v for k, v in table.schema.metadata.items() if k != missing_key.encode()} + table = table.replace_schema_metadata(stripped_meta) + with pytest.raises(ValueError, match=re.escape(missing_key)): + convert_arrow_table_to_dataframe(table) + + +def test_convert_arrow_missing_row_type_column_raises() -> None: + """Arrow table missing __row_type control column raises ValueError.""" + table, _, _ = _load_case("dim_r_m") + # Drop __row_type column. + idx = table.schema.get_field_index("__row_type") + table = table.remove_column(idx) + with pytest.raises(ValueError, match="__row_type"): + convert_arrow_table_to_dataframe(table) + + +# --------------------------------------------------------------------------- +# self_destruct parameter +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "case_name", + [ + pytest.param("dim_r_m", id="no-totals"), + pytest.param("totals_grand_row_sum", id="row-totals"), + pytest.param("dim_m_c", id="transposed"), + ], +) +def test_arrow_converter_self_destruct(case_name: str) -> None: + """self_destruct=True produces the same DataFrame as the default (False).""" + if case_name not in _cases(): + pytest.skip(f"fixture {case_name!r} not available") + # Load twice: self_destruct modifies table buffers in-place. + table_normal, _, _ = _load_case(case_name) + table_destruct, _, _ = _load_case(case_name) + expected = convert_arrow_table_to_dataframe(table_normal, self_destruct=False) + actual = convert_arrow_table_to_dataframe(table_destruct, self_destruct=True) + _assert_df_matches(actual, expected) + + +# --------------------------------------------------------------------------- +# _build_field_index — direct unit tests for total-label padding +# --------------------------------------------------------------------------- + + +def _make_field(name: str, gdc: dict) -> pa.Field: + return pa.field(name, pa.float64(), metadata={b"gdc": json.dumps(gdc).encode()}) + + +def test_build_field_index_subtotal_padding() -> None: + """grand_total fields with partial label_values are right-padded with the agg name.""" + col_label_refs = ["l0", "l1"] # two col-label levels: status, year + label_ref_to_id = {"l0": "status", "l1": "year"} + model_meta = { + "labels": { + "status": {"labelTitle": "Status"}, + "year": {"labelTitle": "Year"}, + }, + "requestedShape": {"metrics": ["price", "order_amount"]}, + "metrics": { + "price": {"title": "Price"}, + "order_amount": {"title": "Order Amount"}, + }, + } + data_fields = [ + # regular metric: full label_values → no padding + _make_field("metric_group_0", {"type": "metric", "index": 0, "label_values": ["Active", "2023"]}), + # subtotal: 1 label kept (status), year padded with "SUM" + _make_field( + "grand_total_0", {"type": "total", "metric_index": 0, "agg_function": "sum", "label_values": ["Active"]} + ), + # grand total: no labels → both levels padded with "SUM" + _make_field("grand_total_1", {"type": "total", "metric_index": 1, "agg_function": "sum", "label_values": []}), + ] + + idx = _build_field_index(data_fields, col_label_refs, label_ref_to_id, model_meta, xtab_meta={}) + + assert isinstance(idx, pandas.MultiIndex) + assert idx.tolist() == [ + ("Active", "2023", "Price"), # regular + ("Active", "SUM", "Price"), # subtotal: status kept, year padded + ("SUM", "SUM", "Order Amount"), # grand total: both levels padded + ] + assert idx.names == ["Status", "Year", None] + + +def test_build_field_index_no_col_labels() -> None: + """When there are no column label refs the index is a flat Index of metric titles.""" + model_meta = { + "labels": {}, + "requestedShape": {"metrics": ["price", "order_amount"]}, + "metrics": {"price": {"title": "Price"}, "order_amount": {"title": "Order Amount"}}, + } + data_fields = [ + _make_field("metric_group_0", {"type": "metric", "index": 0, "label_values": []}), + _make_field("metric_group_1", {"type": "metric", "index": 1, "label_values": []}), + ] + + idx = _build_field_index(data_fields, col_label_refs=[], label_ref_to_id={}, model_meta=model_meta, xtab_meta={}) + + assert isinstance(idx, pandas.Index) + assert not isinstance(idx, pandas.MultiIndex) + assert idx.tolist() == ["Price", "Order Amount"] + + +def test_build_field_index_asymmetric_depth() -> None: + """Two total fields with different label_values lengths are padded independently.""" + col_label_refs = ["l0", "l1"] + label_ref_to_id = {"l0": "status", "l1": "year"} + model_meta = { + "labels": {"status": {"labelTitle": "Status"}, "year": {"labelTitle": "Year"}}, + "requestedShape": {"metrics": ["price", "order_amount"]}, + "metrics": {"price": {"title": "Price"}, "order_amount": {"title": "Order Amount"}}, + } + data_fields = [ + # price: 1 label kept → pads year only + _make_field( + "grand_total_0", {"type": "total", "metric_index": 0, "agg_function": "sum", "label_values": ["Active"]} + ), + # order_amount: 0 labels kept → pads both + _make_field("grand_total_1", {"type": "total", "metric_index": 1, "agg_function": "max", "label_values": []}), + ] + + idx = _build_field_index(data_fields, col_label_refs, label_ref_to_id, model_meta, xtab_meta={}) + + assert idx.tolist() == [ + ("Active", "SUM", "Price"), + ("MAX", "MAX", "Order Amount"), + ] + + +# --------------------------------------------------------------------------- +# compute_row_totals_indexes — empty execution_dims fallback +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "case_name", + [ + pytest.param("dim_r_m", id="non-transposed"), + pytest.param("dim_m_c", id="transposed"), + pytest.param("tot_d0_sub", id="with-totals"), + ], +) +def test_compute_row_totals_empty_dims(case_name: str) -> None: + """execution_dims=[] falls back to an empty row_dim and returns [].""" + if case_name not in _cases(): + pytest.skip(f"fixture {case_name!r} not available") + table, _, _ = _load_case(case_name) + assert compute_row_totals_indexes(table, []) == [] diff --git a/packages/gooddata-sdk/pyproject.toml b/packages/gooddata-sdk/pyproject.toml index 2ea9efb68..9125d6848 100644 --- a/packages/gooddata-sdk/pyproject.toml +++ b/packages/gooddata-sdk/pyproject.toml @@ -50,6 +50,9 @@ classifiers = [ "Typing :: Typed", ] +[project.optional-dependencies] +arrow = ["pyarrow>=23.0.1"] + [project.urls] Documentation = "https://www.gooddata.com/docs/python-sdk/1.62.0" Source = "https://github.com/gooddata/gooddata-python-sdk" @@ -69,6 +72,7 @@ test = [ "python-dotenv~=1.0.0", "deepdiff~=8.5.0", "tests_support", + "pyarrow>=16.1.0", ] [tool.ty.analysis] diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py index 8bf69a212..43609f8b0 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py @@ -329,6 +329,39 @@ def export_tabular_by_visualization_id( max_retry=max_retry, ) + def get_raw_export_bytes( + self, + workspace_id: str, + export_id: str, + timeout: float = 60.0, + retry: float = 0.2, + max_retry: float = 5.0, + ) -> bytes: + """ + Poll the raw export endpoint for an already-submitted export and return the Arrow IPC bytes. + + The caller is responsible for submitting the AFM execution and the export request + (via ``actions_api.create_raw_export``), then passing the resulting ``export_id`` here. + + Args: + workspace_id (str): The ID of the target workspace. + export_id (str): Export ID returned by ``create_raw_export``. + timeout (float): Total seconds to wait for the export to complete. Defaults to 60.0. + retry (float): Initial wait between retries in seconds. Defaults to 0.2. + max_retry (float): Maximum wait between retries in seconds. Defaults to 5.0. + + Returns: + bytes: Arrow IPC bytes that can be read with ``pyarrow.ipc.open_file``. + """ + return self._get_exported_content( + workspace_id=workspace_id, + export_id=export_id, + get_func=self._actions_api.get_raw_export, + timeout=timeout, + retry=retry, + max_retry=max_retry, + ) + def export_slides( self, workspace_id: str, diff --git a/packages/gooddata-sdk/tests/export/test_export_service.py b/packages/gooddata-sdk/tests/export/test_export_service.py index 705ae305b..36f34f9ba 100644 --- a/packages/gooddata-sdk/tests/export/test_export_service.py +++ b/packages/gooddata-sdk/tests/export/test_export_service.py @@ -5,6 +5,7 @@ # (./packages/gooddata-sdk/tests/export -> /tmp/exports). Fix with: chmod -R 777 tests/export/exports/ import os from pathlib import Path +from unittest.mock import MagicMock, patch import pytest from gooddata_sdk import ( @@ -20,6 +21,7 @@ SimpleMetric, TableDimension, ) +from gooddata_sdk.catalog.export.service import ExportService from tests_support.vcrpy_utils import get_vcr gd_vcr = get_vcr() @@ -107,6 +109,27 @@ def test_export_settings_grand_totals_position_defaults_to_none(): assert settings.grand_totals_position is None +def test_get_raw_export_bytes_delegates_to_get_exported_content() -> None: + """get_raw_export_bytes delegates to _get_exported_content with the raw export func.""" + + mock_api_client = MagicMock() + svc = ExportService(mock_api_client) + fake_bytes = b"arrow_ipc" + + with patch.object(ExportService, "_get_exported_content", return_value=fake_bytes) as mock_get: + result = svc.get_raw_export_bytes("ws-id", "export-id-123") + + mock_get.assert_called_once_with( + workspace_id="ws-id", + export_id="export-id-123", + get_func=mock_api_client.actions_api.get_raw_export, + timeout=60.0, + retry=0.2, + max_retry=5.0, + ) + assert result == fake_bytes + + @gd_vcr.use_cassette(str(_fixtures_dir / "test_export_csv.yaml")) def test_export_csv(test_config): _tabular_export_base(test_config, "CSV") diff --git a/uv.lock b/uv.lock index 183ce813a..65d99fdb2 100644 --- a/uv.lock +++ b/uv.lock @@ -52,20 +52,20 @@ wheels = [ [[package]] name = "azure-core" -version = "1.38.1" +version = "1.39.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/53/9b/23893febea484ad8183112c9419b5eb904773adb871492b5fa8ff7b21e09/azure_core-1.38.1.tar.gz", hash = "sha256:9317db1d838e39877eb94a2240ce92fa607db68adf821817b723f0d679facbf6", size = 363323, upload-time = "2026-02-11T02:03:06.051Z" } +sdist = { url = "https://files.pythonhosted.org/packages/34/83/bbde3faa84ddcb8eb0eca4b3ffb3221252281db4ce351300fe248c5c70b1/azure_core-1.39.0.tar.gz", hash = "sha256:8a90a562998dd44ce84597590fff6249701b98c0e8797c95fcdd695b54c35d74", size = 367531, upload-time = "2026-03-19T01:31:29.461Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/88/aaea2ad269ce70b446660371286272c1f6ba66541a7f6f635baf8b0db726/azure_core-1.38.1-py3-none-any.whl", hash = "sha256:69f08ee3d55136071b7100de5b198994fc1c5f89d2b91f2f43156d20fcf200a4", size = 217930, upload-time = "2026-02-11T02:03:07.548Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d6/8ebcd05b01a580f086ac9a97fb9fac65c09a4b012161cc97c21a336e880b/azure_core-1.39.0-py3-none-any.whl", hash = "sha256:4ac7b70fab5438c3f68770649a78daf97833caa83827f91df9c14e0e0ea7d34f", size = 218318, upload-time = "2026-03-19T01:31:31.25Z" }, ] [[package]] name = "azure-identity" -version = "1.25.2" +version = "1.25.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-core" }, @@ -74,9 +74,9 @@ dependencies = [ { name = "msal-extensions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c2/3a/439a32a5e23e45f6a91f0405949dc66cfe6834aba15a430aebfc063a81e7/azure_identity-1.25.2.tar.gz", hash = "sha256:030dbaa720266c796221c6cdbd1999b408c079032c919fef725fcc348a540fe9", size = 284709, upload-time = "2026-02-11T01:55:42.323Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/0e/3a63efb48aa4a5ae2cfca61ee152fbcb668092134d3eb8bfda472dd5c617/azure_identity-1.25.3.tar.gz", hash = "sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6", size = 286304, upload-time = "2026-03-13T01:12:20.892Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/77/f658c76f9e9a52c784bd836aaca6fd5b9aae176f1f53273e758a2bcda695/azure_identity-1.25.2-py3-none-any.whl", hash = "sha256:1b40060553d01a72ba0d708b9a46d0f61f56312e215d8896d836653ffdc6753d", size = 191423, upload-time = "2026-02-11T01:55:44.245Z" }, + { url = "https://files.pythonhosted.org/packages/49/9a/417b3a533e01953a7c618884df2cb05a71e7b68bdbce4fbdb62349d2a2e8/azure_identity-1.25.3-py3-none-any.whl", hash = "sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c", size = 192138, upload-time = "2026-03-13T01:12:22.951Z" }, ] [[package]] @@ -96,44 +96,44 @@ wheels = [ [[package]] name = "boto3" -version = "1.42.50" +version = "1.42.80" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore" }, { name = "jmespath" }, { name = "s3transfer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/41/7a7280875ec000e280b0392478a5d6247bc88e7ecf2ae6ec8f4ddb35b014/boto3-1.42.50.tar.gz", hash = "sha256:38545d7e6e855fefc8a11e899ccbd6d2c9f64671d6648c2acfb1c78c1057a480", size = 112851, upload-time = "2026-02-16T20:42:09.203Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/85/f1e43429ce4c81a920742f98af5cd377a020768738645a7d0ff450553ef0/boto3-1.42.80.tar.gz", hash = "sha256:797cec65f8a36dde38d2397119a114ab0d807cf92c43fb44b72b0522558acc0a", size = 112777, upload-time = "2026-03-31T19:33:46.036Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/14/bf4077d843d737bec6f4176e113182a4435a1864e2a819ca07004da8a9ac/boto3-1.42.50-py3-none-any.whl", hash = "sha256:2fdf8f5349b130d62576068a6c47b3eec368a70bc28f16d8cce17c5f7e74fc2e", size = 140604, upload-time = "2026-02-16T20:42:06.652Z" }, + { url = "https://files.pythonhosted.org/packages/5c/3d/a36837ddfcd08e2506b34a6cb785885923f49c9e20559a832681a5e8228d/boto3-1.42.80-py3-none-any.whl", hash = "sha256:293cbdeaec7eda2a0b08e6a9c2bf1a51c54453863137d45a6431058a9280fdda", size = 140554, upload-time = "2026-03-31T19:33:43.656Z" }, ] [[package]] name = "boto3-stubs" -version = "1.42.50" +version = "1.42.80" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore-stubs" }, { name = "types-s3transfer" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/4c/218454f1b9d7846fcd5780f691779d23efb23c6a6cdebea06f6392fdd11d/boto3_stubs-1.42.50.tar.gz", hash = "sha256:101d1339a40cecdc89f03d4802351a7696f48ab6a75352cae58016189ef5b483", size = 100880, upload-time = "2026-02-16T20:51:11.081Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/a8/2b3d2ea2547fc6cef2b5d90b18bc97a2b02c38ae0e293137bd610d619f1d/boto3_stubs-1.42.80.tar.gz", hash = "sha256:5cbfbca9a3348e1a26334f5657b8b99120a4b3b36e397bf423772d9b11c4ac9b", size = 102182, upload-time = "2026-03-31T19:38:09.69Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/fc/b3ca34dc5be308bad29caf6c7159363cfbd7f43c09271cc3c91655d2f9b6/boto3_stubs-1.42.50-py3-none-any.whl", hash = "sha256:9a449ee9ced05c3cbe990dc9da2dad5be85af1f5de35e5a577cb28ddb843bb48", size = 69781, upload-time = "2026-02-16T20:51:07.774Z" }, + { url = "https://files.pythonhosted.org/packages/d4/3e/152c24969556fa286ead7fee0e7d6675bffae4de80d2596cd3f10cd47358/boto3_stubs-1.42.80-py3-none-any.whl", hash = "sha256:bc8b83edf61a64cc2b208a99384cfce7e64321ae0ba2cd03d6a4dc7fafa66e70", size = 70448, upload-time = "2026-03-31T19:38:01.597Z" }, ] [[package]] name = "botocore" -version = "1.42.50" +version = "1.42.80" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/fd/e63789133b2bf044c8550cd6766ec93628b0ac18a03f2aa0b80171f0697a/botocore-1.42.50.tar.gz", hash = "sha256:de1e128e4898f4e66877bfabbbb03c61f99366f27520442539339e8a74afe3a5", size = 14958074, upload-time = "2026-02-16T20:41:58.814Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/42/d0ce09fe5b494e2a9de513206dec90fbe72bcb101457a60f526a6b1c300b/botocore-1.42.80.tar.gz", hash = "sha256:fe32af53dc87f5f4d61879bc231e2ca2cc0719b19b8f6d268e82a34f713a8a09", size = 15110373, upload-time = "2026-03-31T19:33:33.82Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/b8/b02ad16c5198e652eafdd8bad76aa62ac094afabbe1241b4be1cd4075666/botocore-1.42.50-py3-none-any.whl", hash = "sha256:3ec7004009d1557a881b1d076d54b5768230849fa9ccdebfd409f0571490e691", size = 14631256, upload-time = "2026-02-16T20:41:55.004Z" }, + { url = "https://files.pythonhosted.org/packages/17/b0/c03f2ed8e7817db1c22d70720636a1b22a2a4d3aa3c09da0257072b30bc5/botocore-1.42.80-py3-none-any.whl", hash = "sha256:7291632b2ede71b7c69e6e366480bb6e2a5d2fae8f7d2d2eb49215e32b7c7a12", size = 14787168, upload-time = "2026-03-31T19:33:29.396Z" }, ] [[package]] @@ -208,11 +208,11 @@ wheels = [ [[package]] name = "cachetools" -version = "7.0.1" +version = "7.0.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/07/56595285564e90777d758ebd383d6b0b971b87729bbe2184a849932a3736/cachetools-7.0.1.tar.gz", hash = "sha256:e31e579d2c5b6e2944177a0397150d312888ddf4e16e12f1016068f0c03b8341", size = 36126, upload-time = "2026-02-10T22:24:05.03Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367, upload-time = "2026-03-09T20:51:29.451Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/9e/5faefbf9db1db466d633735faceda1f94aa99ce506ac450d232536266b32/cachetools-7.0.1-py3-none-any.whl", hash = "sha256:8f086515c254d5664ae2146d14fc7f65c9a4bce75152eb247e5a9c5e6d7b2ecf", size = 13484, upload-time = "2026-02-10T22:24:03.741Z" }, + { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918, upload-time = "2026-03-09T20:51:27.33Z" }, ] [[package]] @@ -231,11 +231,11 @@ wheels = [ [[package]] name = "certifi" -version = "2026.1.4" +version = "2026.2.25" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, ] [[package]] @@ -331,100 +331,146 @@ wheels = [ [[package]] name = "chardet" -version = "5.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, +version = "7.4.0.post2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/4b/1fe1ade6b4d33abff0224b45a8310775b04308668ad1bdef725af8e3fcaa/chardet-7.4.0.post2.tar.gz", hash = "sha256:21a6b5ca695252c03385dcfcc8b55c27907f1fe80838aa171b1ff4e356a1bb67", size = 767694, upload-time = "2026-03-29T18:07:23.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/35/1adb720ebfa87dfdc089e0acc0e911adc7f1c9394824fcbfea188ca7cabf/chardet-7.4.0.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77170d229f3d7babbc36c5a33c361de1c01091f4564a33bcd7e0f59ee8609b2a", size = 854465, upload-time = "2026-03-29T18:06:32.775Z" }, + { url = "https://files.pythonhosted.org/packages/f6/69/969ded64b37176f066c4c45871d660fedca3f8da96e0ef8fb3bde6187416/chardet-7.4.0.post2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9be8a6ba814f65013e0e6d92a43e8fa50f42c8850c143fa74586baeac5fa1bcd", size = 840763, upload-time = "2026-03-29T18:06:34.317Z" }, + { url = "https://files.pythonhosted.org/packages/77/1d/1ecd889464d7a641f26ecdf1cd4dbe0dcbd0b0afac47435ca2031b3f50da/chardet-7.4.0.post2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28807a1209b7c2b79b24bdf9722b381e81da8104ae17fe2bd1e9f01c87fe9071", size = 860522, upload-time = "2026-03-29T18:06:35.852Z" }, + { url = "https://files.pythonhosted.org/packages/38/20/eb8babbc63b95d98c0b82fd2870fcd52b55ef7980039547cb5c04e75bd16/chardet-7.4.0.post2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ade174e3fe29f1f4abdb3cc47add0a98201452c43786cbf324b5e237a0c79fc", size = 867558, upload-time = "2026-03-29T18:06:37.723Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5f/be8a831885459580a5975e162da7a6e8111bcc942f9562fe69f9fa152b41/chardet-7.4.0.post2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:335d9cedd5b5be4b8b39ec25b1c2e4498ac4e8658c9466b68b4417cf07c8c4ee", size = 864717, upload-time = "2026-03-29T18:06:39.227Z" }, + { url = "https://files.pythonhosted.org/packages/36/09/7618514ecc1a47d9316cf0c2f49437b6bef3d5281a00abd675f3731ef6eb/chardet-7.4.0.post2-cp310-cp310-win_amd64.whl", hash = "sha256:cde31d2314b156404380aca8aa0bdf6395bc92998b25336076b8a588c267fb20", size = 924472, upload-time = "2026-03-29T18:06:40.768Z" }, + { url = "https://files.pythonhosted.org/packages/4a/db/fcccf6858e87927a22df20251bda9e672819f3db1f2497eccd0290059761/chardet-7.4.0.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90227bc83d06d16b548afe185e93eff8c740cb11ec51536366399b912e361b8d", size = 851964, upload-time = "2026-03-29T18:06:42.525Z" }, + { url = "https://files.pythonhosted.org/packages/fe/79/c92968b31cd51d87328d0298ec3e8278027ad74c79309a60af3b88d0b199/chardet-7.4.0.post2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:18cb15facd3a70042cb4d3b9a80dd2e9b8d78af90643f434047060e1f84dff06", size = 838079, upload-time = "2026-03-29T18:06:43.949Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e4/dc9f68093dac581f02bb842cc1d4b96468ce3388f241168b02d97b05fe3e/chardet-7.4.0.post2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e719bf17854051970938e260d2c589fe3fde3da0a681acdafd266e3bbf75c1af", size = 857847, upload-time = "2026-03-29T18:06:45.587Z" }, + { url = "https://files.pythonhosted.org/packages/8c/57/053b571501feffd18bc7ff97d251293ad0e7ccc362c38be7fd6d640ca3fc/chardet-7.4.0.post2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24b8fcc1fe54936932f305522bc2f40a207ecbb38209fa24226eab7432531aef", size = 864143, upload-time = "2026-03-29T18:06:47.479Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4e/53cc4b9128e6449ad21ac023bfa4495f6c0b8e5ededf883368f541866a93/chardet-7.4.0.post2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2c748b2850c8376ef04b02b3f22e014da5edc961478c88ccc6b01d3eed9bc1e7", size = 859454, upload-time = "2026-03-29T18:06:49.002Z" }, + { url = "https://files.pythonhosted.org/packages/b6/86/2f178028970f0c8beaaf54f7ba6dbb1767f41435f332406f88f7c2711f84/chardet-7.4.0.post2-cp311-cp311-win_amd64.whl", hash = "sha256:a359eb4535aeabd3f61e599530c4c4d4855c31316e6fed7db619a9c58785ee38", size = 923355, upload-time = "2026-03-29T18:06:50.569Z" }, + { url = "https://files.pythonhosted.org/packages/b0/24/b012c1fd362e1a25425afd9f746166976b8ba3b2d78140a39df23bba2886/chardet-7.4.0.post2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7aced16fe8098019c7c513dd92e9ee3ad29fffac757fa7de13ff8f3a8607a344", size = 854615, upload-time = "2026-03-29T18:06:52.099Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/778bcb1e162000c5b8295a25191935b0b2eaf0000096bd3fcbf782b5c8c0/chardet-7.4.0.post2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc6829803ba71cb427dffac03a948ae828c617710bbd5f97ae3b34ab18558414", size = 838434, upload-time = "2026-03-29T18:06:54.332Z" }, + { url = "https://files.pythonhosted.org/packages/e6/6a/827065f0390160d1c74e4cbe8f68815d56daf392c1eb5027fb16d0700d75/chardet-7.4.0.post2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46659d38ba18e7c740f10a4c2edd0ef112e0322606ab2570cb8fd387954e0de9", size = 860089, upload-time = "2026-03-29T18:06:56.233Z" }, + { url = "https://files.pythonhosted.org/packages/e2/32/3abb90c7057e2cbdd711b59d99dc4dfc1a28b7da5a41971ec918f0928682/chardet-7.4.0.post2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5933289313b8cbfb0d07cf44583a2a6c7e31bffe5dcb7ebb6592825aa197d5b0", size = 869310, upload-time = "2026-03-29T18:06:57.847Z" }, + { url = "https://files.pythonhosted.org/packages/7d/e2/c0f2a96cbda065765ad33b3a8f466b279983a72a6e3035e0f5cfa54b831f/chardet-7.4.0.post2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2b99b417fac30641429829666ee7331366e797863504260aa1b18bfc2020e4e3", size = 863047, upload-time = "2026-03-29T18:06:59.427Z" }, + { url = "https://files.pythonhosted.org/packages/46/0d/0b6039f2d254698a525d9a1b00334b3262a6521adede50885f05ba714fad/chardet-7.4.0.post2-cp312-cp312-win_amd64.whl", hash = "sha256:a07dc1257fef2685dfc5182229abccd3f9b1299006a5b4d43ac7bd252faa1118", size = 924680, upload-time = "2026-03-29T18:07:00.772Z" }, + { url = "https://files.pythonhosted.org/packages/64/6f/40998484582edf32ebcbe30a51c0b33fb476aa4d22b172d4aabc3f47c5ed/chardet-7.4.0.post2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9bdb9387e692dd53c837aa922f676e5ab51209895cd99b15d30c6004418e0d27", size = 854448, upload-time = "2026-03-29T18:07:02.432Z" }, + { url = "https://files.pythonhosted.org/packages/32/ed/0fc7f4be6d346049bafec134cb4d122317e8e803b42e520f8214f02d9d13/chardet-7.4.0.post2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:422ac637f5a2a8b13151245591cb0fabdf9ec1427725f0560628cb5ad4fb1462", size = 838289, upload-time = "2026-03-29T18:07:04.026Z" }, + { url = "https://files.pythonhosted.org/packages/11/7d/f22cf8861c18126b6775b4d4a95fa4141ecc4a24d87c5a225d1d5df472c1/chardet-7.4.0.post2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d52b3f15249ba877030045900d179d44552c3c37dda487462be473ec67bed2f", size = 859345, upload-time = "2026-03-29T18:07:05.563Z" }, + { url = "https://files.pythonhosted.org/packages/27/ff/0f582b7a9369bba8abb47d72c3d1d1122c351b8fb04dcac2637683072bcb/chardet-7.4.0.post2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccdfb13b4a727d3d944157c7f350c6d64630511a0ce39e37ffa5114e90f7d3a7", size = 868537, upload-time = "2026-03-29T18:07:07.093Z" }, + { url = "https://files.pythonhosted.org/packages/51/7b/226d88c86a5351dcb03cf7702f6916ab304d6ce5146a96d1636c9b4287a2/chardet-7.4.0.post2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daae5b0579e7e33adacb4722a62b540e6bec49944e081a859cb9a6a010713817", size = 862733, upload-time = "2026-03-29T18:07:08.948Z" }, + { url = "https://files.pythonhosted.org/packages/55/ef/b34d768e047796f69866b88dd81f10993bb5d7421a6196799512e478dd6a/chardet-7.4.0.post2-cp313-cp313-win_amd64.whl", hash = "sha256:6c448fe2d77e329cec421b95f844b75f8c9cb744e808ecc9124b6063ca6acb5e", size = 924887, upload-time = "2026-03-29T18:07:10.381Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1e/8b5d54ecc873e828e9b91cddfce6bf5a058d7bb3d64007cfbbbc872b0bda/chardet-7.4.0.post2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5862b17677f7e8fcee4e37fe641f01d30762e4b075ac37ce9584e4407896e2d9", size = 853887, upload-time = "2026-03-29T18:07:12.156Z" }, + { url = "https://files.pythonhosted.org/packages/26/17/8c2cf762c876b04036e561d2a27df8a6305435db1cb584f71c356e319c40/chardet-7.4.0.post2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:22d05c4b7e721d5330d99ef4a6f6233a9de58ae6f2275c21a098bedd778a6cb7", size = 838555, upload-time = "2026-03-29T18:07:13.689Z" }, + { url = "https://files.pythonhosted.org/packages/3b/21/51fb8cfbcf2f1acc7c03776f4452f64ff2b9051505b38bc9e2a3941af330/chardet-7.4.0.post2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a035d407f762c21eb77069982425eb403e518dd758617aa43bf11d0d2203a1b6", size = 861305, upload-time = "2026-03-29T18:07:15.194Z" }, + { url = "https://files.pythonhosted.org/packages/fb/b6/13cc503f45beeb1117fc9c83f294df16ebce5d75eac9f0cefb8cce4357a1/chardet-7.4.0.post2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2adfa7390e69cb5ed499b54978d31f6d476788d07d83da3426811181b7ca7682", size = 868868, upload-time = "2026-03-29T18:07:16.781Z" }, + { url = "https://files.pythonhosted.org/packages/30/ca/f1ab73f8d431c5257ad536956992513a5c135c53cf2a3dc94b8a45f83082/chardet-7.4.0.post2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2345f20ea67cdadddb778b2bc31e2defc2a85ae027931f9ad6ab84fd5d345320", size = 863417, upload-time = "2026-03-29T18:07:18.467Z" }, + { url = "https://files.pythonhosted.org/packages/1a/cc/d2918dc6d110cf585a30ee11dbdcfa56a2b2fbf16e2b4117fe8bf800f320/chardet-7.4.0.post2-cp314-cp314-win_amd64.whl", hash = "sha256:52602972d4815047cee262551bc383ab394aa145f5ca9ee10d0a53d27965882e", size = 919100, upload-time = "2026-03-29T18:07:20.312Z" }, + { url = "https://files.pythonhosted.org/packages/94/d2/22ac0b5b832bb9d2f29311dcded6c09ad0c32c23e3e53a8033aad5eb8652/chardet-7.4.0.post2-py3-none-any.whl", hash = "sha256:e0c9c6b5c296c0e5197bc8876fcc04d58a6ddfba18399e598ba353aba28b038e", size = 625322, upload-time = "2026-03-29T18:07:21.81Z" }, ] [[package]] name = "charset-normalizer" -version = "3.4.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, - { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, - { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, - { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, - { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, - { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, - { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, - { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, - { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, - { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, - { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, - { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, - { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, - { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, - { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, - { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, - { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, - { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, - { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, - { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, - { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, - { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, - { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, - { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, - { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, - { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, - { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, - { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, - { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, - { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, - { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, - { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, - { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, - { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, - { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, - { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, - { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, - { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, - { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, - { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, - { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, - { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, - { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, - { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, - { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, - { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, - { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, - { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, - { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, - { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, - { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, - { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, - { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, - { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, - { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, - { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, - { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, - { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, - { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, - { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, - { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, - { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, - { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, - { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, - { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, - { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, - { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363, upload-time = "2026-03-15T18:53:25.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/8c/2c56124c6dc53a774d435f985b5973bc592f42d437be58c0c92d65ae7296/charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95", size = 298751, upload-time = "2026-03-15T18:50:00.003Z" }, + { url = "https://files.pythonhosted.org/packages/86/2a/2a7db6b314b966a3bcad8c731c0719c60b931b931de7ae9f34b2839289ee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd", size = 200027, upload-time = "2026-03-15T18:50:01.702Z" }, + { url = "https://files.pythonhosted.org/packages/68/f2/0fe775c74ae25e2a3b07b01538fc162737b3e3f795bada3bc26f4d4d495c/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4", size = 220741, upload-time = "2026-03-15T18:50:03.194Z" }, + { url = "https://files.pythonhosted.org/packages/10/98/8085596e41f00b27dd6aa1e68413d1ddda7e605f34dd546833c61fddd709/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db", size = 215802, upload-time = "2026-03-15T18:50:05.859Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ce/865e4e09b041bad659d682bbd98b47fb490b8e124f9398c9448065f64fee/charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89", size = 207908, upload-time = "2026-03-15T18:50:07.676Z" }, + { url = "https://files.pythonhosted.org/packages/a8/54/8c757f1f7349262898c2f169e0d562b39dcb977503f18fdf0814e923db78/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565", size = 194357, upload-time = "2026-03-15T18:50:09.327Z" }, + { url = "https://files.pythonhosted.org/packages/6f/29/e88f2fac9218907fc7a70722b393d1bbe8334c61fe9c46640dba349b6e66/charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9", size = 205610, upload-time = "2026-03-15T18:50:10.732Z" }, + { url = "https://files.pythonhosted.org/packages/4c/c5/21d7bb0cb415287178450171d130bed9d664211fdd59731ed2c34267b07d/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7", size = 203512, upload-time = "2026-03-15T18:50:12.535Z" }, + { url = "https://files.pythonhosted.org/packages/a4/be/ce52f3c7fdb35cc987ad38a53ebcef52eec498f4fb6c66ecfe62cfe57ba2/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550", size = 195398, upload-time = "2026-03-15T18:50:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/81/a0/3ab5dd39d4859a3555e5dadfc8a9fa7f8352f8c183d1a65c90264517da0e/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0", size = 221772, upload-time = "2026-03-15T18:50:15.581Z" }, + { url = "https://files.pythonhosted.org/packages/04/6e/6a4e41a97ba6b2fa87f849c41e4d229449a586be85053c4d90135fe82d26/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8", size = 205759, upload-time = "2026-03-15T18:50:17.047Z" }, + { url = "https://files.pythonhosted.org/packages/db/3b/34a712a5ee64a6957bf355b01dc17b12de457638d436fdb05d01e463cd1c/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0", size = 216938, upload-time = "2026-03-15T18:50:18.44Z" }, + { url = "https://files.pythonhosted.org/packages/cb/05/5bd1e12da9ab18790af05c61aafd01a60f489778179b621ac2a305243c62/charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b", size = 210138, upload-time = "2026-03-15T18:50:19.852Z" }, + { url = "https://files.pythonhosted.org/packages/bd/8e/3cb9e2d998ff6b21c0a1860343cb7b83eba9cdb66b91410e18fc4969d6ab/charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557", size = 144137, upload-time = "2026-03-15T18:50:21.505Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8f/78f5489ffadb0db3eb7aff53d31c24531d33eb545f0c6f6567c25f49a5ff/charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6", size = 154244, upload-time = "2026-03-15T18:50:22.81Z" }, + { url = "https://files.pythonhosted.org/packages/e4/74/e472659dffb0cadb2f411282d2d76c60da1fc94076d7fffed4ae8a93ec01/charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058", size = 143312, upload-time = "2026-03-15T18:50:24.074Z" }, + { url = "https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e", size = 293582, upload-time = "2026-03-15T18:50:25.454Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b7/b1a117e5385cbdb3205f6055403c2a2a220c5ea80b8716c324eaf75c5c95/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9", size = 197240, upload-time = "2026-03-15T18:50:27.196Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5f/2574f0f09f3c3bc1b2f992e20bce6546cb1f17e111c5be07308dc5427956/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d", size = 217363, upload-time = "2026-03-15T18:50:28.601Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d1/0ae20ad77bc949ddd39b51bf383b6ca932f2916074c95cad34ae465ab71f/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de", size = 212994, upload-time = "2026-03-15T18:50:30.102Z" }, + { url = "https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73", size = 204697, upload-time = "2026-03-15T18:50:31.654Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/8a18fc411f085b82303cfb7154eed5bd49c77035eb7608d049468b53f87c/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c", size = 191673, upload-time = "2026-03-15T18:50:33.433Z" }, + { url = "https://files.pythonhosted.org/packages/ff/a7/11cfe61d6c5c5c7438d6ba40919d0306ed83c9ab957f3d4da2277ff67836/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc", size = 201120, upload-time = "2026-03-15T18:50:35.105Z" }, + { url = "https://files.pythonhosted.org/packages/b5/10/cf491fa1abd47c02f69687046b896c950b92b6cd7337a27e6548adbec8e4/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f", size = 200911, upload-time = "2026-03-15T18:50:36.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/70/039796160b48b18ed466fde0af84c1b090c4e288fae26cd674ad04a2d703/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef", size = 192516, upload-time = "2026-03-15T18:50:38.228Z" }, + { url = "https://files.pythonhosted.org/packages/ff/34/c56f3223393d6ff3124b9e78f7de738047c2d6bc40a4f16ac0c9d7a1cb3c/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398", size = 218795, upload-time = "2026-03-15T18:50:39.664Z" }, + { url = "https://files.pythonhosted.org/packages/e8/3b/ce2d4f86c5282191a041fdc5a4ce18f1c6bd40a5bd1f74cf8625f08d51c1/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e", size = 201833, upload-time = "2026-03-15T18:50:41.552Z" }, + { url = "https://files.pythonhosted.org/packages/3b/9b/b6a9f76b0fd7c5b5ec58b228ff7e85095370282150f0bd50b3126f5506d6/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed", size = 213920, upload-time = "2026-03-15T18:50:43.33Z" }, + { url = "https://files.pythonhosted.org/packages/ae/98/7bc23513a33d8172365ed30ee3a3b3fe1ece14a395e5fc94129541fc6003/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021", size = 206951, upload-time = "2026-03-15T18:50:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/32/73/c0b86f3d1458468e11aec870e6b3feac931facbe105a894b552b0e518e79/charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e", size = 143703, upload-time = "2026-03-15T18:50:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4", size = 153857, upload-time = "2026-03-15T18:50:47.563Z" }, + { url = "https://files.pythonhosted.org/packages/e2/dc/9abe19c9b27e6cd3636036b9d1b387b78c40dedbf0b47f9366737684b4b0/charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316", size = 142751, upload-time = "2026-03-15T18:50:49.234Z" }, + { url = "https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab", size = 295154, upload-time = "2026-03-15T18:50:50.88Z" }, + { url = "https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21", size = 199191, upload-time = "2026-03-15T18:50:52.658Z" }, + { url = "https://files.pythonhosted.org/packages/6c/92/9934d1bbd69f7f398b38c5dae1cbf9cc672e7c34a4adf7b17c0a9c17d15d/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2", size = 218674, upload-time = "2026-03-15T18:50:54.102Z" }, + { url = "https://files.pythonhosted.org/packages/af/90/25f6ab406659286be929fd89ab0e78e38aa183fc374e03aa3c12d730af8a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff", size = 215259, upload-time = "2026-03-15T18:50:55.616Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5", size = 207276, upload-time = "2026-03-15T18:50:57.054Z" }, + { url = "https://files.pythonhosted.org/packages/f7/72/d0426afec4b71dc159fa6b4e68f868cd5a3ecd918fec5813a15d292a7d10/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0", size = 195161, upload-time = "2026-03-15T18:50:58.686Z" }, + { url = "https://files.pythonhosted.org/packages/bf/18/c82b06a68bfcb6ce55e508225d210c7e6a4ea122bfc0748892f3dc4e8e11/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a", size = 203452, upload-time = "2026-03-15T18:51:00.196Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/0c25979b92f8adafdbb946160348d8d44aa60ce99afdc27df524379875cb/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2", size = 202272, upload-time = "2026-03-15T18:51:01.703Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3d/7fea3e8fe84136bebbac715dd1221cc25c173c57a699c030ab9b8900cbb7/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5", size = 195622, upload-time = "2026-03-15T18:51:03.526Z" }, + { url = "https://files.pythonhosted.org/packages/57/8a/d6f7fd5cb96c58ef2f681424fbca01264461336d2a7fc875e4446b1f1346/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6", size = 220056, upload-time = "2026-03-15T18:51:05.269Z" }, + { url = "https://files.pythonhosted.org/packages/16/50/478cdda782c8c9c3fb5da3cc72dd7f331f031e7f1363a893cdd6ca0f8de0/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d", size = 203751, upload-time = "2026-03-15T18:51:06.858Z" }, + { url = "https://files.pythonhosted.org/packages/75/fc/cc2fcac943939c8e4d8791abfa139f685e5150cae9f94b60f12520feaa9b/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2", size = 216563, upload-time = "2026-03-15T18:51:08.564Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b7/a4add1d9a5f68f3d037261aecca83abdb0ab15960a3591d340e829b37298/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923", size = 209265, upload-time = "2026-03-15T18:51:10.312Z" }, + { url = "https://files.pythonhosted.org/packages/6c/18/c094561b5d64a24277707698e54b7f67bd17a4f857bbfbb1072bba07c8bf/charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4", size = 144229, upload-time = "2026-03-15T18:51:11.694Z" }, + { url = "https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb", size = 154277, upload-time = "2026-03-15T18:51:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/15/57/28d79b44b51933119e21f65479d0864a8d5893e494cf5daab15df0247c17/charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4", size = 142817, upload-time = "2026-03-15T18:51:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/1e/1d/4fdabeef4e231153b6ed7567602f3b68265ec4e5b76d6024cf647d43d981/charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f", size = 294823, upload-time = "2026-03-15T18:51:15.755Z" }, + { url = "https://files.pythonhosted.org/packages/47/7b/20e809b89c69d37be748d98e84dce6820bf663cf19cf6b942c951a3e8f41/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843", size = 198527, upload-time = "2026-03-15T18:51:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/37/a6/4f8d27527d59c039dce6f7622593cdcd3d70a8504d87d09eb11e9fdc6062/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf", size = 218388, upload-time = "2026-03-15T18:51:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/f6/9b/4770ccb3e491a9bacf1c46cc8b812214fe367c86a96353ccc6daf87b01ec/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8", size = 214563, upload-time = "2026-03-15T18:51:20.374Z" }, + { url = "https://files.pythonhosted.org/packages/2b/58/a199d245894b12db0b957d627516c78e055adc3a0d978bc7f65ddaf7c399/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9", size = 206587, upload-time = "2026-03-15T18:51:21.807Z" }, + { url = "https://files.pythonhosted.org/packages/7e/70/3def227f1ec56f5c69dfc8392b8bd63b11a18ca8178d9211d7cc5e5e4f27/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88", size = 194724, upload-time = "2026-03-15T18:51:23.508Z" }, + { url = "https://files.pythonhosted.org/packages/58/ab/9318352e220c05efd31c2779a23b50969dc94b985a2efa643ed9077bfca5/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84", size = 202956, upload-time = "2026-03-15T18:51:25.239Z" }, + { url = "https://files.pythonhosted.org/packages/75/13/f3550a3ac25b70f87ac98c40d3199a8503676c2f1620efbf8d42095cfc40/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd", size = 201923, upload-time = "2026-03-15T18:51:26.682Z" }, + { url = "https://files.pythonhosted.org/packages/1b/db/c5c643b912740b45e8eec21de1bbab8e7fc085944d37e1e709d3dcd9d72f/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c", size = 195366, upload-time = "2026-03-15T18:51:28.129Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/3b1c62744f9b2448443e0eb160d8b001c849ec3fef591e012eda6484787c/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194", size = 219752, upload-time = "2026-03-15T18:51:29.556Z" }, + { url = "https://files.pythonhosted.org/packages/f6/98/32ffbaf7f0366ffb0445930b87d103f6b406bc2c271563644bde8a2b1093/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc", size = 203296, upload-time = "2026-03-15T18:51:30.921Z" }, + { url = "https://files.pythonhosted.org/packages/41/12/5d308c1bbe60cabb0c5ef511574a647067e2a1f631bc8634fcafaccd8293/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f", size = 215956, upload-time = "2026-03-15T18:51:32.399Z" }, + { url = "https://files.pythonhosted.org/packages/53/e9/5f85f6c5e20669dbe56b165c67b0260547dea97dba7e187938833d791687/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2", size = 208652, upload-time = "2026-03-15T18:51:34.214Z" }, + { url = "https://files.pythonhosted.org/packages/f1/11/897052ea6af56df3eef3ca94edafee410ca699ca0c7b87960ad19932c55e/charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d", size = 143940, upload-time = "2026-03-15T18:51:36.15Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5c/724b6b363603e419829f561c854b87ed7c7e31231a7908708ac086cdf3e2/charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389", size = 154101, upload-time = "2026-03-15T18:51:37.876Z" }, + { url = "https://files.pythonhosted.org/packages/01/a5/7abf15b4c0968e47020f9ca0935fb3274deb87cb288cd187cad92e8cdffd/charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f", size = 143109, upload-time = "2026-03-15T18:51:39.565Z" }, + { url = "https://files.pythonhosted.org/packages/25/6f/ffe1e1259f384594063ea1869bfb6be5cdb8bc81020fc36c3636bc8302a1/charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8", size = 294458, upload-time = "2026-03-15T18:51:41.134Z" }, + { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277, upload-time = "2026-03-15T18:51:42.953Z" }, + { url = "https://files.pythonhosted.org/packages/00/50/dcfbb72a5138bbefdc3332e8d81a23494bf67998b4b100703fd15fa52d81/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2", size = 218758, upload-time = "2026-03-15T18:51:44.339Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/d79a9a191bb75f5aa81f3aaaa387ef29ce7cb7a9e5074ba8ea095cc073c2/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30", size = 215299, upload-time = "2026-03-15T18:51:45.871Z" }, + { url = "https://files.pythonhosted.org/packages/76/7e/bc8911719f7084f72fd545f647601ea3532363927f807d296a8c88a62c0d/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db", size = 206811, upload-time = "2026-03-15T18:51:47.308Z" }, + { url = "https://files.pythonhosted.org/packages/e2/40/c430b969d41dda0c465aa36cc7c2c068afb67177bef50905ac371b28ccc7/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8", size = 193706, upload-time = "2026-03-15T18:51:48.849Z" }, + { url = "https://files.pythonhosted.org/packages/48/15/e35e0590af254f7df984de1323640ef375df5761f615b6225ba8deb9799a/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815", size = 202706, upload-time = "2026-03-15T18:51:50.257Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497, upload-time = "2026-03-15T18:51:52.012Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ba/2cc9e3e7dfdf7760a6ed8da7446d22536f3d0ce114ac63dee2a5a3599e62/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43", size = 193511, upload-time = "2026-03-15T18:51:53.723Z" }, + { url = "https://files.pythonhosted.org/packages/9e/cb/5be49b5f776e5613be07298c80e1b02a2d900f7a7de807230595c85a8b2e/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0", size = 220133, upload-time = "2026-03-15T18:51:55.333Z" }, + { url = "https://files.pythonhosted.org/packages/83/43/99f1b5dad345accb322c80c7821071554f791a95ee50c1c90041c157ae99/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1", size = 203035, upload-time = "2026-03-15T18:51:56.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/9a/62c2cb6a531483b55dddff1a68b3d891a8b498f3ca555fbcf2978e804d9d/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f", size = 216321, upload-time = "2026-03-15T18:51:58.17Z" }, + { url = "https://files.pythonhosted.org/packages/6e/79/94a010ff81e3aec7c293eb82c28f930918e517bc144c9906a060844462eb/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815", size = 208973, upload-time = "2026-03-15T18:51:59.998Z" }, + { url = "https://files.pythonhosted.org/packages/2a/57/4ecff6d4ec8585342f0c71bc03efaa99cb7468f7c91a57b105bcd561cea8/charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d", size = 144610, upload-time = "2026-03-15T18:52:02.213Z" }, + { url = "https://files.pythonhosted.org/packages/80/94/8434a02d9d7f168c25767c64671fead8d599744a05d6a6c877144c754246/charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f", size = 154962, upload-time = "2026-03-15T18:52:03.658Z" }, + { url = "https://files.pythonhosted.org/packages/46/4c/48f2cdbfd923026503dfd67ccea45c94fd8fe988d9056b468579c66ed62b/charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e", size = 143595, upload-time = "2026-03-15T18:52:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/31/93/8878be7569f87b14f1d52032946131bcb6ebbd8af3e20446bc04053dc3f1/charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866", size = 314828, upload-time = "2026-03-15T18:52:06.831Z" }, + { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138, upload-time = "2026-03-15T18:52:08.239Z" }, + { url = "https://files.pythonhosted.org/packages/54/57/64caf6e1bf07274a1e0b7c160a55ee9e8c9ec32c46846ce59b9c333f7008/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e", size = 224679, upload-time = "2026-03-15T18:52:10.043Z" }, + { url = "https://files.pythonhosted.org/packages/aa/cb/9ff5a25b9273ef160861b41f6937f86fae18b0792fe0a8e75e06acb08f1d/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077", size = 223475, upload-time = "2026-03-15T18:52:11.854Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/440635fc093b8d7347502a377031f9605a1039c958f3cd18dcacffb37743/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f", size = 215230, upload-time = "2026-03-15T18:52:13.325Z" }, + { url = "https://files.pythonhosted.org/packages/cd/24/afff630feb571a13f07c8539fbb502d2ab494019492aaffc78ef41f1d1d0/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e", size = 199045, upload-time = "2026-03-15T18:52:14.752Z" }, + { url = "https://files.pythonhosted.org/packages/e5/17/d1399ecdaf7e0498c327433e7eefdd862b41236a7e484355b8e0e5ebd64b/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484", size = 211658, upload-time = "2026-03-15T18:52:16.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769, upload-time = "2026-03-15T18:52:17.782Z" }, + { url = "https://files.pythonhosted.org/packages/05/34/c531bc6ac4c21da9ddfddb3107be2287188b3ea4b53b70fc58f2a77ac8d8/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff", size = 201328, upload-time = "2026-03-15T18:52:19.553Z" }, + { url = "https://files.pythonhosted.org/packages/fa/73/a5a1e9ca5f234519c1953608a03fe109c306b97fdfb25f09182babad51a7/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e", size = 225302, upload-time = "2026-03-15T18:52:21.043Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f6/cd782923d112d296294dea4bcc7af5a7ae0f86ab79f8fefbda5526b6cfc0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659", size = 211127, upload-time = "2026-03-15T18:52:22.491Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c5/0b6898950627af7d6103a449b22320372c24c6feda91aa24e201a478d161/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602", size = 222840, upload-time = "2026-03-15T18:52:24.113Z" }, + { url = "https://files.pythonhosted.org/packages/7d/25/c4bba773bef442cbdc06111d40daa3de5050a676fa26e85090fc54dd12f0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407", size = 216890, upload-time = "2026-03-15T18:52:25.541Z" }, + { url = "https://files.pythonhosted.org/packages/35/1a/05dacadb0978da72ee287b0143097db12f2e7e8d3ffc4647da07a383b0b7/charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579", size = 155379, upload-time = "2026-03-15T18:52:27.05Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7a/d269d834cb3a76291651256f3b9a5945e81d0a49ab9f4a498964e83c0416/charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4", size = 169043, upload-time = "2026-03-15T18:52:28.502Z" }, + { url = "https://files.pythonhosted.org/packages/23/06/28b29fba521a37a8932c6a84192175c34d49f84a6d4773fa63d05f9aff22/charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c", size = 148523, upload-time = "2026-03-15T18:52:29.956Z" }, + { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455, upload-time = "2026-03-15T18:53:23.833Z" }, ] [[package]] @@ -464,115 +510,115 @@ wheels = [ [[package]] name = "coverage" -version = "7.13.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/56/95b7e30fa389756cb56630faa728da46a27b8c6eb46f9d557c68fff12b65/coverage-7.13.4.tar.gz", hash = "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", size = 827239, upload-time = "2026-02-09T12:59:03.86Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/d4/7827d9ffa34d5d4d752eec907022aa417120936282fc488306f5da08c292/coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415", size = 219152, upload-time = "2026-02-09T12:56:11.974Z" }, - { url = "https://files.pythonhosted.org/packages/35/b0/d69df26607c64043292644dbb9dc54b0856fabaa2cbb1eeee3331cc9e280/coverage-7.13.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b", size = 219667, upload-time = "2026-02-09T12:56:13.33Z" }, - { url = "https://files.pythonhosted.org/packages/82/a4/c1523f7c9e47b2271dbf8c2a097e7a1f89ef0d66f5840bb59b7e8814157b/coverage-7.13.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a", size = 246425, upload-time = "2026-02-09T12:56:14.552Z" }, - { url = "https://files.pythonhosted.org/packages/f8/02/aa7ec01d1a5023c4b680ab7257f9bfde9defe8fdddfe40be096ac19e8177/coverage-7.13.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f", size = 248229, upload-time = "2026-02-09T12:56:16.31Z" }, - { url = "https://files.pythonhosted.org/packages/35/98/85aba0aed5126d896162087ef3f0e789a225697245256fc6181b95f47207/coverage-7.13.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012", size = 250106, upload-time = "2026-02-09T12:56:18.024Z" }, - { url = "https://files.pythonhosted.org/packages/96/72/1db59bd67494bc162e3e4cd5fbc7edba2c7026b22f7c8ef1496d58c2b94c/coverage-7.13.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def", size = 252021, upload-time = "2026-02-09T12:56:19.272Z" }, - { url = "https://files.pythonhosted.org/packages/9d/97/72899c59c7066961de6e3daa142d459d47d104956db43e057e034f015c8a/coverage-7.13.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256", size = 247114, upload-time = "2026-02-09T12:56:21.051Z" }, - { url = "https://files.pythonhosted.org/packages/39/1f/f1885573b5970235e908da4389176936c8933e86cb316b9620aab1585fa2/coverage-7.13.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda", size = 248143, upload-time = "2026-02-09T12:56:22.585Z" }, - { url = "https://files.pythonhosted.org/packages/a8/cf/e80390c5b7480b722fa3e994f8202807799b85bc562aa4f1dde209fbb7be/coverage-7.13.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92", size = 246152, upload-time = "2026-02-09T12:56:23.748Z" }, - { url = "https://files.pythonhosted.org/packages/44/bf/f89a8350d85572f95412debb0fb9bb4795b1d5b5232bd652923c759e787b/coverage-7.13.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c", size = 249959, upload-time = "2026-02-09T12:56:25.209Z" }, - { url = "https://files.pythonhosted.org/packages/f7/6e/612a02aece8178c818df273e8d1642190c4875402ca2ba74514394b27aba/coverage-7.13.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58", size = 246416, upload-time = "2026-02-09T12:56:26.475Z" }, - { url = "https://files.pythonhosted.org/packages/cb/98/b5afc39af67c2fa6786b03c3a7091fc300947387ce8914b096db8a73d67a/coverage-7.13.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9", size = 247025, upload-time = "2026-02-09T12:56:27.727Z" }, - { url = "https://files.pythonhosted.org/packages/51/30/2bba8ef0682d5bd210c38fe497e12a06c9f8d663f7025e9f5c2c31ce847d/coverage-7.13.4-cp310-cp310-win32.whl", hash = "sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf", size = 221758, upload-time = "2026-02-09T12:56:29.051Z" }, - { url = "https://files.pythonhosted.org/packages/78/13/331f94934cf6c092b8ea59ff868eb587bc8fe0893f02c55bc6c0183a192e/coverage-7.13.4-cp310-cp310-win_amd64.whl", hash = "sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95", size = 222693, upload-time = "2026-02-09T12:56:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053", size = 219278, upload-time = "2026-02-09T12:56:31.673Z" }, - { url = "https://files.pythonhosted.org/packages/f1/17/0cb7ca3de72e5f4ef2ec2fa0089beafbcaaaead1844e8b8a63d35173d77d/coverage-7.13.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11", size = 219783, upload-time = "2026-02-09T12:56:33.104Z" }, - { url = "https://files.pythonhosted.org/packages/ab/63/325d8e5b11e0eaf6d0f6a44fad444ae58820929a9b0de943fa377fe73e85/coverage-7.13.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa", size = 250200, upload-time = "2026-02-09T12:56:34.474Z" }, - { url = "https://files.pythonhosted.org/packages/76/53/c16972708cbb79f2942922571a687c52bd109a7bd51175aeb7558dff2236/coverage-7.13.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7", size = 252114, upload-time = "2026-02-09T12:56:35.749Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c2/7ab36d8b8cc412bec9ea2d07c83c48930eb4ba649634ba00cb7e4e0f9017/coverage-7.13.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00", size = 254220, upload-time = "2026-02-09T12:56:37.796Z" }, - { url = "https://files.pythonhosted.org/packages/d6/4d/cf52c9a3322c89a0e6febdfbc83bb45c0ed3c64ad14081b9503adee702e7/coverage-7.13.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef", size = 256164, upload-time = "2026-02-09T12:56:39.016Z" }, - { url = "https://files.pythonhosted.org/packages/78/e9/eb1dd17bd6de8289df3580e967e78294f352a5df8a57ff4671ee5fc3dcd0/coverage-7.13.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903", size = 250325, upload-time = "2026-02-09T12:56:40.668Z" }, - { url = "https://files.pythonhosted.org/packages/71/07/8c1542aa873728f72267c07278c5cc0ec91356daf974df21335ccdb46368/coverage-7.13.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f", size = 251913, upload-time = "2026-02-09T12:56:41.97Z" }, - { url = "https://files.pythonhosted.org/packages/74/d7/c62e2c5e4483a748e27868e4c32ad3daa9bdddbba58e1bc7a15e252baa74/coverage-7.13.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299", size = 249974, upload-time = "2026-02-09T12:56:43.323Z" }, - { url = "https://files.pythonhosted.org/packages/98/9f/4c5c015a6e98ced54efd0f5cf8d31b88e5504ecb6857585fc0161bb1e600/coverage-7.13.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505", size = 253741, upload-time = "2026-02-09T12:56:45.155Z" }, - { url = "https://files.pythonhosted.org/packages/bd/59/0f4eef89b9f0fcd9633b5d350016f54126ab49426a70ff4c4e87446cabdc/coverage-7.13.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6", size = 249695, upload-time = "2026-02-09T12:56:46.636Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2c/b7476f938deb07166f3eb281a385c262675d688ff4659ad56c6c6b8e2e70/coverage-7.13.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9", size = 250599, upload-time = "2026-02-09T12:56:48.13Z" }, - { url = "https://files.pythonhosted.org/packages/b8/34/c3420709d9846ee3785b9f2831b4d94f276f38884032dca1457fa83f7476/coverage-7.13.4-cp311-cp311-win32.whl", hash = "sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9", size = 221780, upload-time = "2026-02-09T12:56:50.479Z" }, - { url = "https://files.pythonhosted.org/packages/61/08/3d9c8613079d2b11c185b865de9a4c1a68850cfda2b357fae365cf609f29/coverage-7.13.4-cp311-cp311-win_amd64.whl", hash = "sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f", size = 222715, upload-time = "2026-02-09T12:56:51.815Z" }, - { url = "https://files.pythonhosted.org/packages/18/1a/54c3c80b2f056164cc0a6cdcb040733760c7c4be9d780fe655f356f433e4/coverage-7.13.4-cp311-cp311-win_arm64.whl", hash = "sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f", size = 221385, upload-time = "2026-02-09T12:56:53.194Z" }, - { url = "https://files.pythonhosted.org/packages/d1/81/4ce2fdd909c5a0ed1f6dedb88aa57ab79b6d1fbd9b588c1ac7ef45659566/coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459", size = 219449, upload-time = "2026-02-09T12:56:54.889Z" }, - { url = "https://files.pythonhosted.org/packages/5d/96/5238b1efc5922ddbdc9b0db9243152c09777804fb7c02ad1741eb18a11c0/coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3", size = 219810, upload-time = "2026-02-09T12:56:56.33Z" }, - { url = "https://files.pythonhosted.org/packages/78/72/2f372b726d433c9c35e56377cf1d513b4c16fe51841060d826b95caacec1/coverage-7.13.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634", size = 251308, upload-time = "2026-02-09T12:56:57.858Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a0/2ea570925524ef4e00bb6c82649f5682a77fac5ab910a65c9284de422600/coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3", size = 254052, upload-time = "2026-02-09T12:56:59.754Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ac/45dc2e19a1939098d783c846e130b8f862fbb50d09e0af663988f2f21973/coverage-7.13.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa", size = 255165, upload-time = "2026-02-09T12:57:01.287Z" }, - { url = "https://files.pythonhosted.org/packages/2d/4d/26d236ff35abc3b5e63540d3386e4c3b192168c1d96da5cb2f43c640970f/coverage-7.13.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3", size = 257432, upload-time = "2026-02-09T12:57:02.637Z" }, - { url = "https://files.pythonhosted.org/packages/ec/55/14a966c757d1348b2e19caf699415a2a4c4f7feaa4bbc6326a51f5c7dd1b/coverage-7.13.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a", size = 251716, upload-time = "2026-02-09T12:57:04.056Z" }, - { url = "https://files.pythonhosted.org/packages/77/33/50116647905837c66d28b2af1321b845d5f5d19be9655cb84d4a0ea806b4/coverage-7.13.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7", size = 253089, upload-time = "2026-02-09T12:57:05.503Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b4/8efb11a46e3665d92635a56e4f2d4529de6d33f2cb38afd47d779d15fc99/coverage-7.13.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc", size = 251232, upload-time = "2026-02-09T12:57:06.879Z" }, - { url = "https://files.pythonhosted.org/packages/51/24/8cd73dd399b812cc76bb0ac260e671c4163093441847ffe058ac9fda1e32/coverage-7.13.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47", size = 255299, upload-time = "2026-02-09T12:57:08.245Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/0a4b12f1d0e029ce1ccc1c800944a9984cbe7d678e470bb6d3c6bc38a0da/coverage-7.13.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985", size = 250796, upload-time = "2026-02-09T12:57:10.142Z" }, - { url = "https://files.pythonhosted.org/packages/73/44/6002fbf88f6698ca034360ce474c406be6d5a985b3fdb3401128031eef6b/coverage-7.13.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0", size = 252673, upload-time = "2026-02-09T12:57:12.197Z" }, - { url = "https://files.pythonhosted.org/packages/de/c6/a0279f7c00e786be75a749a5674e6fa267bcbd8209cd10c9a450c655dfa7/coverage-7.13.4-cp312-cp312-win32.whl", hash = "sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246", size = 221990, upload-time = "2026-02-09T12:57:14.085Z" }, - { url = "https://files.pythonhosted.org/packages/77/4e/c0a25a425fcf5557d9abd18419c95b63922e897bc86c1f327f155ef234a9/coverage-7.13.4-cp312-cp312-win_amd64.whl", hash = "sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126", size = 222800, upload-time = "2026-02-09T12:57:15.944Z" }, - { url = "https://files.pythonhosted.org/packages/47/ac/92da44ad9a6f4e3a7debd178949d6f3769bedca33830ce9b1dcdab589a37/coverage-7.13.4-cp312-cp312-win_arm64.whl", hash = "sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d", size = 221415, upload-time = "2026-02-09T12:57:17.497Z" }, - { url = "https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9", size = 219474, upload-time = "2026-02-09T12:57:19.332Z" }, - { url = "https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac", size = 219844, upload-time = "2026-02-09T12:57:20.66Z" }, - { url = "https://files.pythonhosted.org/packages/97/fd/7e859f8fab324cef6c4ad7cff156ca7c489fef9179d5749b0c8d321281c2/coverage-7.13.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea", size = 250832, upload-time = "2026-02-09T12:57:22.007Z" }, - { url = "https://files.pythonhosted.org/packages/e4/dc/b2442d10020c2f52617828862d8b6ee337859cd8f3a1f13d607dddda9cf7/coverage-7.13.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b", size = 253434, upload-time = "2026-02-09T12:57:23.339Z" }, - { url = "https://files.pythonhosted.org/packages/5a/88/6728a7ad17428b18d836540630487231f5470fb82454871149502f5e5aa2/coverage-7.13.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525", size = 254676, upload-time = "2026-02-09T12:57:24.774Z" }, - { url = "https://files.pythonhosted.org/packages/7c/bc/21244b1b8cedf0dff0a2b53b208015fe798d5f2a8d5348dbfece04224fff/coverage-7.13.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242", size = 256807, upload-time = "2026-02-09T12:57:26.125Z" }, - { url = "https://files.pythonhosted.org/packages/97/a0/ddba7ed3251cff51006737a727d84e05b61517d1784a9988a846ba508877/coverage-7.13.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148", size = 251058, upload-time = "2026-02-09T12:57:27.614Z" }, - { url = "https://files.pythonhosted.org/packages/9b/55/e289addf7ff54d3a540526f33751951bf0878f3809b47f6dfb3def69c6f7/coverage-7.13.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a", size = 252805, upload-time = "2026-02-09T12:57:29.066Z" }, - { url = "https://files.pythonhosted.org/packages/13/4e/cc276b1fa4a59be56d96f1dabddbdc30f4ba22e3b1cd42504c37b3313255/coverage-7.13.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23", size = 250766, upload-time = "2026-02-09T12:57:30.522Z" }, - { url = "https://files.pythonhosted.org/packages/94/44/1093b8f93018f8b41a8cf29636c9292502f05e4a113d4d107d14a3acd044/coverage-7.13.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80", size = 254923, upload-time = "2026-02-09T12:57:31.946Z" }, - { url = "https://files.pythonhosted.org/packages/8b/55/ea2796da2d42257f37dbea1aab239ba9263b31bd91d5527cdd6db5efe174/coverage-7.13.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea", size = 250591, upload-time = "2026-02-09T12:57:33.842Z" }, - { url = "https://files.pythonhosted.org/packages/d4/fa/7c4bb72aacf8af5020675aa633e59c1fbe296d22aed191b6a5b711eb2bc7/coverage-7.13.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a", size = 252364, upload-time = "2026-02-09T12:57:35.743Z" }, - { url = "https://files.pythonhosted.org/packages/5c/38/a8d2ec0146479c20bbaa7181b5b455a0c41101eed57f10dd19a78ab44c80/coverage-7.13.4-cp313-cp313-win32.whl", hash = "sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d", size = 222010, upload-time = "2026-02-09T12:57:37.25Z" }, - { url = "https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-win_amd64.whl", hash = "sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd", size = 222818, upload-time = "2026-02-09T12:57:38.734Z" }, - { url = "https://files.pythonhosted.org/packages/04/d1/934918a138c932c90d78301f45f677fb05c39a3112b96fd2c8e60503cdc7/coverage-7.13.4-cp313-cp313-win_arm64.whl", hash = "sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af", size = 221438, upload-time = "2026-02-09T12:57:40.223Z" }, - { url = "https://files.pythonhosted.org/packages/52/57/ee93ced533bcb3e6df961c0c6e42da2fc6addae53fb95b94a89b1e33ebd7/coverage-7.13.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d", size = 220165, upload-time = "2026-02-09T12:57:41.639Z" }, - { url = "https://files.pythonhosted.org/packages/c5/e0/969fc285a6fbdda49d91af278488d904dcd7651b2693872f0ff94e40e84a/coverage-7.13.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12", size = 220516, upload-time = "2026-02-09T12:57:44.215Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b8/9531944e16267e2735a30a9641ff49671f07e8138ecf1ca13db9fd2560c7/coverage-7.13.4-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b", size = 261804, upload-time = "2026-02-09T12:57:45.989Z" }, - { url = "https://files.pythonhosted.org/packages/8a/f3/e63df6d500314a2a60390d1989240d5f27318a7a68fa30ad3806e2a9323e/coverage-7.13.4-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9", size = 263885, upload-time = "2026-02-09T12:57:47.42Z" }, - { url = "https://files.pythonhosted.org/packages/f3/67/7654810de580e14b37670b60a09c599fa348e48312db5b216d730857ffe6/coverage-7.13.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092", size = 266308, upload-time = "2026-02-09T12:57:49.345Z" }, - { url = "https://files.pythonhosted.org/packages/37/6f/39d41eca0eab3cc82115953ad41c4e77935286c930e8fad15eaed1389d83/coverage-7.13.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9", size = 267452, upload-time = "2026-02-09T12:57:50.811Z" }, - { url = "https://files.pythonhosted.org/packages/50/6d/39c0fbb8fc5cd4d2090811e553c2108cf5112e882f82505ee7495349a6bf/coverage-7.13.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26", size = 261057, upload-time = "2026-02-09T12:57:52.447Z" }, - { url = "https://files.pythonhosted.org/packages/a4/a2/60010c669df5fa603bb5a97fb75407e191a846510da70ac657eb696b7fce/coverage-7.13.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2", size = 263875, upload-time = "2026-02-09T12:57:53.938Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d9/63b22a6bdbd17f1f96e9ed58604c2a6b0e72a9133e37d663bef185877cf6/coverage-7.13.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940", size = 261500, upload-time = "2026-02-09T12:57:56.012Z" }, - { url = "https://files.pythonhosted.org/packages/70/bf/69f86ba1ad85bc3ad240e4c0e57a2e620fbc0e1645a47b5c62f0e941ad7f/coverage-7.13.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c", size = 265212, upload-time = "2026-02-09T12:57:57.5Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f2/5f65a278a8c2148731831574c73e42f57204243d33bedaaf18fa79c5958f/coverage-7.13.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0", size = 260398, upload-time = "2026-02-09T12:57:59.027Z" }, - { url = "https://files.pythonhosted.org/packages/ef/80/6e8280a350ee9fea92f14b8357448a242dcaa243cb2c72ab0ca591f66c8c/coverage-7.13.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b", size = 262584, upload-time = "2026-02-09T12:58:01.129Z" }, - { url = "https://files.pythonhosted.org/packages/22/63/01ff182fc95f260b539590fb12c11ad3e21332c15f9799cb5e2386f71d9f/coverage-7.13.4-cp313-cp313t-win32.whl", hash = "sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9", size = 222688, upload-time = "2026-02-09T12:58:02.736Z" }, - { url = "https://files.pythonhosted.org/packages/a9/43/89de4ef5d3cd53b886afa114065f7e9d3707bdb3e5efae13535b46ae483d/coverage-7.13.4-cp313-cp313t-win_amd64.whl", hash = "sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd", size = 223746, upload-time = "2026-02-09T12:58:05.362Z" }, - { url = "https://files.pythonhosted.org/packages/35/39/7cf0aa9a10d470a5309b38b289b9bb07ddeac5d61af9b664fe9775a4cb3e/coverage-7.13.4-cp313-cp313t-win_arm64.whl", hash = "sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997", size = 222003, upload-time = "2026-02-09T12:58:06.952Z" }, - { url = "https://files.pythonhosted.org/packages/92/11/a9cf762bb83386467737d32187756a42094927150c3e107df4cb078e8590/coverage-7.13.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601", size = 219522, upload-time = "2026-02-09T12:58:08.623Z" }, - { url = "https://files.pythonhosted.org/packages/d3/28/56e6d892b7b052236d67c95f1936b6a7cf7c3e2634bf27610b8cbd7f9c60/coverage-7.13.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689", size = 219855, upload-time = "2026-02-09T12:58:10.176Z" }, - { url = "https://files.pythonhosted.org/packages/e5/69/233459ee9eb0c0d10fcc2fe425a029b3fa5ce0f040c966ebce851d030c70/coverage-7.13.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c", size = 250887, upload-time = "2026-02-09T12:58:12.503Z" }, - { url = "https://files.pythonhosted.org/packages/06/90/2cdab0974b9b5bbc1623f7876b73603aecac11b8d95b85b5b86b32de5eab/coverage-7.13.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129", size = 253396, upload-time = "2026-02-09T12:58:14.615Z" }, - { url = "https://files.pythonhosted.org/packages/ac/15/ea4da0f85bf7d7b27635039e649e99deb8173fe551096ea15017f7053537/coverage-7.13.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552", size = 254745, upload-time = "2026-02-09T12:58:16.162Z" }, - { url = "https://files.pythonhosted.org/packages/99/11/bb356e86920c655ca4d61daee4e2bbc7258f0a37de0be32d233b561134ff/coverage-7.13.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a", size = 257055, upload-time = "2026-02-09T12:58:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/c9/0f/9ae1f8cb17029e09da06ca4e28c9e1d5c1c0a511c7074592e37e0836c915/coverage-7.13.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356", size = 250911, upload-time = "2026-02-09T12:58:19.495Z" }, - { url = "https://files.pythonhosted.org/packages/89/3a/adfb68558fa815cbc29747b553bc833d2150228f251b127f1ce97e48547c/coverage-7.13.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71", size = 252754, upload-time = "2026-02-09T12:58:21.064Z" }, - { url = "https://files.pythonhosted.org/packages/32/b1/540d0c27c4e748bd3cd0bd001076ee416eda993c2bae47a73b7cc9357931/coverage-7.13.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5", size = 250720, upload-time = "2026-02-09T12:58:22.622Z" }, - { url = "https://files.pythonhosted.org/packages/c7/95/383609462b3ffb1fe133014a7c84fc0dd01ed55ac6140fa1093b5af7ebb1/coverage-7.13.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98", size = 254994, upload-time = "2026-02-09T12:58:24.548Z" }, - { url = "https://files.pythonhosted.org/packages/f7/ba/1761138e86c81680bfc3c49579d66312865457f9fe405b033184e5793cb3/coverage-7.13.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5", size = 250531, upload-time = "2026-02-09T12:58:26.271Z" }, - { url = "https://files.pythonhosted.org/packages/f8/8e/05900df797a9c11837ab59c4d6fe94094e029582aab75c3309a93e6fb4e3/coverage-7.13.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0", size = 252189, upload-time = "2026-02-09T12:58:27.807Z" }, - { url = "https://files.pythonhosted.org/packages/00/bd/29c9f2db9ea4ed2738b8a9508c35626eb205d51af4ab7bf56a21a2e49926/coverage-7.13.4-cp314-cp314-win32.whl", hash = "sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb", size = 222258, upload-time = "2026-02-09T12:58:29.441Z" }, - { url = "https://files.pythonhosted.org/packages/a7/4d/1f8e723f6829977410efeb88f73673d794075091c8c7c18848d273dc9d73/coverage-7.13.4-cp314-cp314-win_amd64.whl", hash = "sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505", size = 223073, upload-time = "2026-02-09T12:58:31.026Z" }, - { url = "https://files.pythonhosted.org/packages/51/5b/84100025be913b44e082ea32abcf1afbf4e872f5120b7a1cab1d331b1e13/coverage-7.13.4-cp314-cp314-win_arm64.whl", hash = "sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2", size = 221638, upload-time = "2026-02-09T12:58:32.599Z" }, - { url = "https://files.pythonhosted.org/packages/a7/e4/c884a405d6ead1370433dad1e3720216b4f9fd8ef5b64bfd984a2a60a11a/coverage-7.13.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056", size = 220246, upload-time = "2026-02-09T12:58:34.181Z" }, - { url = "https://files.pythonhosted.org/packages/81/5c/4d7ed8b23b233b0fffbc9dfec53c232be2e695468523242ea9fd30f97ad2/coverage-7.13.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc", size = 220514, upload-time = "2026-02-09T12:58:35.704Z" }, - { url = "https://files.pythonhosted.org/packages/2f/6f/3284d4203fd2f28edd73034968398cd2d4cb04ab192abc8cff007ea35679/coverage-7.13.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9", size = 261877, upload-time = "2026-02-09T12:58:37.864Z" }, - { url = "https://files.pythonhosted.org/packages/09/aa/b672a647bbe1556a85337dc95bfd40d146e9965ead9cc2fe81bde1e5cbce/coverage-7.13.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf", size = 264004, upload-time = "2026-02-09T12:58:39.492Z" }, - { url = "https://files.pythonhosted.org/packages/79/a1/aa384dbe9181f98bba87dd23dda436f0c6cf2e148aecbb4e50fc51c1a656/coverage-7.13.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55", size = 266408, upload-time = "2026-02-09T12:58:41.852Z" }, - { url = "https://files.pythonhosted.org/packages/53/5e/5150bf17b4019bc600799f376bb9606941e55bd5a775dc1e096b6ffea952/coverage-7.13.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72", size = 267544, upload-time = "2026-02-09T12:58:44.093Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/f1de5c675987a4a7a672250d2c5c9d73d289dbf13410f00ed7181d8017dd/coverage-7.13.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a", size = 260980, upload-time = "2026-02-09T12:58:45.721Z" }, - { url = "https://files.pythonhosted.org/packages/b3/e3/fe758d01850aa172419a6743fe76ba8b92c29d181d4f676ffe2dae2ba631/coverage-7.13.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6", size = 263871, upload-time = "2026-02-09T12:58:47.334Z" }, - { url = "https://files.pythonhosted.org/packages/b6/76/b829869d464115e22499541def9796b25312b8cf235d3bb00b39f1675395/coverage-7.13.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3", size = 261472, upload-time = "2026-02-09T12:58:48.995Z" }, - { url = "https://files.pythonhosted.org/packages/14/9e/caedb1679e73e2f6ad240173f55218488bfe043e38da577c4ec977489915/coverage-7.13.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750", size = 265210, upload-time = "2026-02-09T12:58:51.178Z" }, - { url = "https://files.pythonhosted.org/packages/3a/10/0dd02cb009b16ede425b49ec344aba13a6ae1dc39600840ea6abcb085ac4/coverage-7.13.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39", size = 260319, upload-time = "2026-02-09T12:58:53.081Z" }, - { url = "https://files.pythonhosted.org/packages/92/8e/234d2c927af27c6d7a5ffad5bd2cf31634c46a477b4c7adfbfa66baf7ebb/coverage-7.13.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0", size = 262638, upload-time = "2026-02-09T12:58:55.258Z" }, - { url = "https://files.pythonhosted.org/packages/2f/64/e5547c8ff6964e5965c35a480855911b61509cce544f4d442caa759a0702/coverage-7.13.4-cp314-cp314t-win32.whl", hash = "sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea", size = 223040, upload-time = "2026-02-09T12:58:56.936Z" }, - { url = "https://files.pythonhosted.org/packages/c7/96/38086d58a181aac86d503dfa9c47eb20715a79c3e3acbdf786e92e5c09a8/coverage-7.13.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932", size = 224148, upload-time = "2026-02-09T12:58:58.645Z" }, - { url = "https://files.pythonhosted.org/packages/ce/72/8d10abd3740a0beb98c305e0c3faf454366221c0f37a8bcf8f60020bb65a/coverage-7.13.4-cp314-cp314t-win_arm64.whl", hash = "sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b", size = 222172, upload-time = "2026-02-09T12:59:00.396Z" }, - { url = "https://files.pythonhosted.org/packages/0d/4a/331fe2caf6799d591109bb9c08083080f6de90a823695d412a935622abb2/coverage-7.13.4-py3-none-any.whl", hash = "sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0", size = 211242, upload-time = "2026-02-09T12:59:02.032Z" }, +version = "7.13.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/e0/70553e3000e345daff267cec284ce4cbf3fc141b6da229ac52775b5428f1/coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179", size = 915967, upload-time = "2026-03-17T10:33:18.341Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/33/e8c48488c29a73fd089f9d71f9653c1be7478f2ad6b5bc870db11a55d23d/coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5", size = 219255, upload-time = "2026-03-17T10:29:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/da/bd/b0ebe9f677d7f4b74a3e115eec7ddd4bcf892074963a00d91e8b164a6386/coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf", size = 219772, upload-time = "2026-03-17T10:29:52.867Z" }, + { url = "https://files.pythonhosted.org/packages/48/cc/5cb9502f4e01972f54eedd48218bb203fe81e294be606a2bc93970208013/coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8", size = 246532, upload-time = "2026-03-17T10:29:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d8/3217636d86c7e7b12e126e4f30ef1581047da73140614523af7495ed5f2d/coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4", size = 248333, upload-time = "2026-03-17T10:29:56.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/30/2002ac6729ba2d4357438e2ed3c447ad8562866c8c63fc16f6dfc33afe56/coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d", size = 250211, upload-time = "2026-03-17T10:29:57.938Z" }, + { url = "https://files.pythonhosted.org/packages/6c/85/552496626d6b9359eb0e2f86f920037c9cbfba09b24d914c6e1528155f7d/coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930", size = 252125, upload-time = "2026-03-17T10:29:59.388Z" }, + { url = "https://files.pythonhosted.org/packages/44/21/40256eabdcbccdb6acf6b381b3016a154399a75fe39d406f790ae84d1f3c/coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d", size = 247219, upload-time = "2026-03-17T10:30:01.199Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e8/96e2a6c3f21a0ea77d7830b254a1542d0328acc8d7bdf6a284ba7e529f77/coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40", size = 248248, upload-time = "2026-03-17T10:30:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/da/ba/8477f549e554827da390ec659f3c38e4b6d95470f4daafc2d8ff94eaa9c2/coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878", size = 246254, upload-time = "2026-03-17T10:30:04.832Z" }, + { url = "https://files.pythonhosted.org/packages/55/59/bc22aef0e6aa179d5b1b001e8b3654785e9adf27ef24c93dc4228ebd5d68/coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400", size = 250067, upload-time = "2026-03-17T10:30:06.535Z" }, + { url = "https://files.pythonhosted.org/packages/de/1b/c6a023a160806a5137dca53468fd97530d6acad24a22003b1578a9c2e429/coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0", size = 246521, upload-time = "2026-03-17T10:30:08.486Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3f/3532c85a55aa2f899fa17c186f831cfa1aa434d88ff792a709636f64130e/coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0", size = 247126, upload-time = "2026-03-17T10:30:09.966Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2e/b9d56af4a24ef45dfbcda88e06870cb7d57b2b0bfa3a888d79b4c8debd76/coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58", size = 221860, upload-time = "2026-03-17T10:30:11.393Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cc/d938417e7a4d7f0433ad4edee8bb2acdc60dc7ac5af19e2a07a048ecbee3/coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e", size = 222788, upload-time = "2026-03-17T10:30:12.886Z" }, + { url = "https://files.pythonhosted.org/packages/4b/37/d24c8f8220ff07b839b2c043ea4903a33b0f455abe673ae3c03bbdb7f212/coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d", size = 219381, upload-time = "2026-03-17T10:30:14.68Z" }, + { url = "https://files.pythonhosted.org/packages/35/8b/cd129b0ca4afe886a6ce9d183c44d8301acbd4ef248622e7c49a23145605/coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587", size = 219880, upload-time = "2026-03-17T10:30:16.231Z" }, + { url = "https://files.pythonhosted.org/packages/55/2f/e0e5b237bffdb5d6c530ce87cc1d413a5b7d7dfd60fb067ad6d254c35c76/coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642", size = 250303, upload-time = "2026-03-17T10:30:17.748Z" }, + { url = "https://files.pythonhosted.org/packages/92/be/b1afb692be85b947f3401375851484496134c5554e67e822c35f28bf2fbc/coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b", size = 252218, upload-time = "2026-03-17T10:30:19.804Z" }, + { url = "https://files.pythonhosted.org/packages/da/69/2f47bb6fa1b8d1e3e5d0c4be8ccb4313c63d742476a619418f85740d597b/coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686", size = 254326, upload-time = "2026-03-17T10:30:21.321Z" }, + { url = "https://files.pythonhosted.org/packages/d5/d0/79db81da58965bd29dabc8f4ad2a2af70611a57cba9d1ec006f072f30a54/coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743", size = 256267, upload-time = "2026-03-17T10:30:23.094Z" }, + { url = "https://files.pythonhosted.org/packages/e5/32/d0d7cc8168f91ddab44c0ce4806b969df5f5fdfdbb568eaca2dbc2a04936/coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75", size = 250430, upload-time = "2026-03-17T10:30:25.311Z" }, + { url = "https://files.pythonhosted.org/packages/4d/06/a055311d891ddbe231cd69fdd20ea4be6e3603ffebddf8704b8ca8e10a3c/coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209", size = 252017, upload-time = "2026-03-17T10:30:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f6/d0fd2d21e29a657b5f77a2fe7082e1568158340dceb941954f776dce1b7b/coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a", size = 250080, upload-time = "2026-03-17T10:30:29.481Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ab/0d7fb2efc2e9a5eb7ddcc6e722f834a69b454b7e6e5888c3a8567ecffb31/coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e", size = 253843, upload-time = "2026-03-17T10:30:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/ba/6f/7467b917bbf5408610178f62a49c0ed4377bb16c1657f689cc61470da8ce/coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd", size = 249802, upload-time = "2026-03-17T10:30:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/75/2c/1172fb689df92135f5bfbbd69fc83017a76d24ea2e2f3a1154007e2fb9f8/coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8", size = 250707, upload-time = "2026-03-17T10:30:35.2Z" }, + { url = "https://files.pythonhosted.org/packages/67/21/9ac389377380a07884e3b48ba7a620fcd9dbfaf1d40565facdc6b36ec9ef/coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf", size = 221880, upload-time = "2026-03-17T10:30:36.775Z" }, + { url = "https://files.pythonhosted.org/packages/af/7f/4cd8a92531253f9d7c1bbecd9fa1b472907fb54446ca768c59b531248dc5/coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9", size = 222816, upload-time = "2026-03-17T10:30:38.891Z" }, + { url = "https://files.pythonhosted.org/packages/12/a6/1d3f6155fb0010ca68eba7fe48ca6c9da7385058b77a95848710ecf189b1/coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028", size = 221483, upload-time = "2026-03-17T10:30:40.463Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c3/a396306ba7db865bf96fc1fb3b7fd29bcbf3d829df642e77b13555163cd6/coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01", size = 219554, upload-time = "2026-03-17T10:30:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/a6/16/a68a19e5384e93f811dccc51034b1fd0b865841c390e3c931dcc4699e035/coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422", size = 219908, upload-time = "2026-03-17T10:30:43.906Z" }, + { url = "https://files.pythonhosted.org/packages/29/72/20b917c6793af3a5ceb7fb9c50033f3ec7865f2911a1416b34a7cfa0813b/coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f", size = 251419, upload-time = "2026-03-17T10:30:45.545Z" }, + { url = "https://files.pythonhosted.org/packages/8c/49/cd14b789536ac6a4778c453c6a2338bc0a2fb60c5a5a41b4008328b9acc1/coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5", size = 254159, upload-time = "2026-03-17T10:30:47.204Z" }, + { url = "https://files.pythonhosted.org/packages/9d/00/7b0edcfe64e2ed4c0340dac14a52ad0f4c9bd0b8b5e531af7d55b703db7c/coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376", size = 255270, upload-time = "2026-03-17T10:30:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/7ffc4ba0f5d0a55c1e84ea7cee39c9fc06af7b170513d83fbf3bbefce280/coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256", size = 257538, upload-time = "2026-03-17T10:30:50.77Z" }, + { url = "https://files.pythonhosted.org/packages/81/bd/73ddf85f93f7e6fa83e77ccecb6162d9415c79007b4bc124008a4995e4a7/coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c", size = 251821, upload-time = "2026-03-17T10:30:52.5Z" }, + { url = "https://files.pythonhosted.org/packages/a0/81/278aff4e8dec4926a0bcb9486320752811f543a3ce5b602cc7a29978d073/coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5", size = 253191, upload-time = "2026-03-17T10:30:54.543Z" }, + { url = "https://files.pythonhosted.org/packages/70/ee/fe1621488e2e0a58d7e94c4800f0d96f79671553488d401a612bebae324b/coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09", size = 251337, upload-time = "2026-03-17T10:30:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/37/a6/f79fb37aa104b562207cc23cb5711ab6793608e246cae1e93f26b2236ed9/coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9", size = 255404, upload-time = "2026-03-17T10:30:58.427Z" }, + { url = "https://files.pythonhosted.org/packages/75/f0/ed15262a58ec81ce457ceb717b7f78752a1713556b19081b76e90896e8d4/coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf", size = 250903, upload-time = "2026-03-17T10:31:00.093Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e9/9129958f20e7e9d4d56d51d42ccf708d15cac355ff4ac6e736e97a9393d2/coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c", size = 252780, upload-time = "2026-03-17T10:31:01.916Z" }, + { url = "https://files.pythonhosted.org/packages/a4/d7/0ad9b15812d81272db94379fe4c6df8fd17781cc7671fdfa30c76ba5ff7b/coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf", size = 222093, upload-time = "2026-03-17T10:31:03.642Z" }, + { url = "https://files.pythonhosted.org/packages/29/3d/821a9a5799fac2556bcf0bd37a70d1d11fa9e49784b6d22e92e8b2f85f18/coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810", size = 222900, upload-time = "2026-03-17T10:31:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/2238c2ad08e35cf4f020ea721f717e09ec3152aea75d191a7faf3ef009a8/coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de", size = 221515, upload-time = "2026-03-17T10:31:07.293Z" }, + { url = "https://files.pythonhosted.org/packages/74/8c/74fedc9663dcf168b0a059d4ea756ecae4da77a489048f94b5f512a8d0b3/coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1", size = 219576, upload-time = "2026-03-17T10:31:09.045Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3", size = 219942, upload-time = "2026-03-17T10:31:10.708Z" }, + { url = "https://files.pythonhosted.org/packages/5f/13/93419671cee82b780bab7ea96b67c8ef448f5f295f36bf5031154ec9a790/coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26", size = 250935, upload-time = "2026-03-17T10:31:12.392Z" }, + { url = "https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3", size = 253541, upload-time = "2026-03-17T10:31:14.247Z" }, + { url = "https://files.pythonhosted.org/packages/4e/5e/3ee3b835647be646dcf3c65a7c6c18f87c27326a858f72ab22c12730773d/coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b", size = 254780, upload-time = "2026-03-17T10:31:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/44/b3/cb5bd1a04cfcc49ede6cd8409d80bee17661167686741e041abc7ee1b9a9/coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a", size = 256912, upload-time = "2026-03-17T10:31:17.89Z" }, + { url = "https://files.pythonhosted.org/packages/1b/66/c1dceb7b9714473800b075f5c8a84f4588f887a90eb8645282031676e242/coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969", size = 251165, upload-time = "2026-03-17T10:31:19.605Z" }, + { url = "https://files.pythonhosted.org/packages/b7/62/5502b73b97aa2e53ea22a39cf8649ff44827bef76d90bf638777daa27a9d/coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161", size = 252908, upload-time = "2026-03-17T10:31:21.312Z" }, + { url = "https://files.pythonhosted.org/packages/7d/37/7792c2d69854397ca77a55c4646e5897c467928b0e27f2d235d83b5d08c6/coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15", size = 250873, upload-time = "2026-03-17T10:31:23.565Z" }, + { url = "https://files.pythonhosted.org/packages/a3/23/bc866fb6163be52a8a9e5d708ba0d3b1283c12158cefca0a8bbb6e247a43/coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1", size = 255030, upload-time = "2026-03-17T10:31:25.58Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8b/ef67e1c222ef49860701d346b8bbb70881bef283bd5f6cbba68a39a086c7/coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6", size = 250694, upload-time = "2026-03-17T10:31:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/46/0d/866d1f74f0acddbb906db212e096dee77a8e2158ca5e6bb44729f9d93298/coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17", size = 252469, upload-time = "2026-03-17T10:31:29.472Z" }, + { url = "https://files.pythonhosted.org/packages/7a/f5/be742fec31118f02ce42b21c6af187ad6a344fed546b56ca60caacc6a9a0/coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85", size = 222112, upload-time = "2026-03-17T10:31:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b", size = 222923, upload-time = "2026-03-17T10:31:33.633Z" }, + { url = "https://files.pythonhosted.org/packages/48/af/fea819c12a095781f6ccd504890aaddaf88b8fab263c4940e82c7b770124/coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664", size = 221540, upload-time = "2026-03-17T10:31:35.445Z" }, + { url = "https://files.pythonhosted.org/packages/23/d2/17879af479df7fbbd44bd528a31692a48f6b25055d16482fdf5cdb633805/coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d", size = 220262, upload-time = "2026-03-17T10:31:37.184Z" }, + { url = "https://files.pythonhosted.org/packages/5b/4c/d20e554f988c8f91d6a02c5118f9abbbf73a8768a3048cb4962230d5743f/coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0", size = 220617, upload-time = "2026-03-17T10:31:39.245Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/f9f5277b95184f764b24e7231e166dfdb5780a46d408a2ac665969416d61/coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806", size = 261912, upload-time = "2026-03-17T10:31:41.324Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f6/7f1ab39393eeb50cfe4747ae8ef0e4fc564b989225aa1152e13a180d74f8/coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3", size = 263987, upload-time = "2026-03-17T10:31:43.724Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d7/62c084fb489ed9c6fbdf57e006752e7c516ea46fd690e5ed8b8617c7d52e/coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9", size = 266416, upload-time = "2026-03-17T10:31:45.769Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f6/df63d8660e1a0bff6125947afda112a0502736f470d62ca68b288ea762d8/coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd", size = 267558, upload-time = "2026-03-17T10:31:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/5b/02/353ca81d36779bd108f6d384425f7139ac3c58c750dcfaafe5d0bee6436b/coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606", size = 261163, upload-time = "2026-03-17T10:31:50.125Z" }, + { url = "https://files.pythonhosted.org/packages/2c/16/2e79106d5749bcaf3aee6d309123548e3276517cd7851faa8da213bc61bf/coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e", size = 263981, upload-time = "2026-03-17T10:31:51.961Z" }, + { url = "https://files.pythonhosted.org/packages/29/c7/c29e0c59ffa6942030ae6f50b88ae49988e7e8da06de7ecdbf49c6d4feae/coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0", size = 261604, upload-time = "2026-03-17T10:31:53.872Z" }, + { url = "https://files.pythonhosted.org/packages/40/48/097cdc3db342f34006a308ab41c3a7c11c3f0d84750d340f45d88a782e00/coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87", size = 265321, upload-time = "2026-03-17T10:31:55.997Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/4994af354689e14fd03a75f8ec85a9a68d94e0188bbdab3fc1516b55e512/coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479", size = 260502, upload-time = "2026-03-17T10:31:58.308Z" }, + { url = "https://files.pythonhosted.org/packages/22/c6/9bb9ef55903e628033560885f5c31aa227e46878118b63ab15dc7ba87797/coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2", size = 262688, upload-time = "2026-03-17T10:32:00.141Z" }, + { url = "https://files.pythonhosted.org/packages/14/4f/f5df9007e50b15e53e01edea486814783a7f019893733d9e4d6caad75557/coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a", size = 222788, upload-time = "2026-03-17T10:32:02.246Z" }, + { url = "https://files.pythonhosted.org/packages/e1/98/aa7fccaa97d0f3192bec013c4e6fd6d294a6ed44b640e6bb61f479e00ed5/coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819", size = 223851, upload-time = "2026-03-17T10:32:04.416Z" }, + { url = "https://files.pythonhosted.org/packages/3d/8b/e5c469f7352651e5f013198e9e21f97510b23de957dd06a84071683b4b60/coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911", size = 222104, upload-time = "2026-03-17T10:32:06.65Z" }, + { url = "https://files.pythonhosted.org/packages/8e/77/39703f0d1d4b478bfd30191d3c14f53caf596fac00efb3f8f6ee23646439/coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f", size = 219621, upload-time = "2026-03-17T10:32:08.589Z" }, + { url = "https://files.pythonhosted.org/packages/e2/3e/51dff36d99ae14639a133d9b164d63e628532e2974d8b1edb99dd1ebc733/coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e", size = 219953, upload-time = "2026-03-17T10:32:10.507Z" }, + { url = "https://files.pythonhosted.org/packages/6a/6c/1f1917b01eb647c2f2adc9962bd66c79eb978951cab61bdc1acab3290c07/coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a", size = 250992, upload-time = "2026-03-17T10:32:12.41Z" }, + { url = "https://files.pythonhosted.org/packages/22/e5/06b1f88f42a5a99df42ce61208bdec3bddb3d261412874280a19796fc09c/coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510", size = 253503, upload-time = "2026-03-17T10:32:14.449Z" }, + { url = "https://files.pythonhosted.org/packages/80/28/2a148a51e5907e504fa7b85490277734e6771d8844ebcc48764a15e28155/coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247", size = 254852, upload-time = "2026-03-17T10:32:16.56Z" }, + { url = "https://files.pythonhosted.org/packages/61/77/50e8d3d85cc0b7ebe09f30f151d670e302c7ff4a1bf6243f71dd8b0981fa/coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6", size = 257161, upload-time = "2026-03-17T10:32:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c4/b5fd1d4b7bf8d0e75d997afd3925c59ba629fc8616f1b3aae7605132e256/coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0", size = 251021, upload-time = "2026-03-17T10:32:21.344Z" }, + { url = "https://files.pythonhosted.org/packages/f8/66/6ea21f910e92d69ef0b1c3346ea5922a51bad4446c9126db2ae96ee24c4c/coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882", size = 252858, upload-time = "2026-03-17T10:32:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ea/879c83cb5d61aa2a35fb80e72715e92672daef8191b84911a643f533840c/coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740", size = 250823, upload-time = "2026-03-17T10:32:25.516Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fb/616d95d3adb88b9803b275580bdeee8bd1b69a886d057652521f83d7322f/coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16", size = 255099, upload-time = "2026-03-17T10:32:27.944Z" }, + { url = "https://files.pythonhosted.org/packages/1c/93/25e6917c90ec1c9a56b0b26f6cad6408e5f13bb6b35d484a0d75c9cf000d/coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0", size = 250638, upload-time = "2026-03-17T10:32:29.914Z" }, + { url = "https://files.pythonhosted.org/packages/fc/7b/dc1776b0464145a929deed214aef9fb1493f159b59ff3c7eeeedf91eddd0/coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0", size = 252295, upload-time = "2026-03-17T10:32:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fb/99cbbc56a26e07762a2740713f3c8f9f3f3106e3a3dd8cc4474954bccd34/coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc", size = 222360, upload-time = "2026-03-17T10:32:34.233Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b7/4758d4f73fb536347cc5e4ad63662f9d60ba9118cb6785e9616b2ce5d7fa/coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633", size = 223174, upload-time = "2026-03-17T10:32:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f2/24d84e1dfe70f8ac9fdf30d338239860d0d1d5da0bda528959d0ebc9da28/coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8", size = 221739, upload-time = "2026-03-17T10:32:38.736Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/4a168591057b3668c2428bff25dd3ebc21b629d666d90bcdfa0217940e84/coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b", size = 220351, upload-time = "2026-03-17T10:32:41.196Z" }, + { url = "https://files.pythonhosted.org/packages/f5/21/1fd5c4dbfe4a58b6b99649125635df46decdfd4a784c3cd6d410d303e370/coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c", size = 220612, upload-time = "2026-03-17T10:32:43.204Z" }, + { url = "https://files.pythonhosted.org/packages/d6/fe/2a924b3055a5e7e4512655a9d4609781b0d62334fa0140c3e742926834e2/coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9", size = 261985, upload-time = "2026-03-17T10:32:45.514Z" }, + { url = "https://files.pythonhosted.org/packages/d7/0d/c8928f2bd518c45990fe1a2ab8db42e914ef9b726c975facc4282578c3eb/coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29", size = 264107, upload-time = "2026-03-17T10:32:47.971Z" }, + { url = "https://files.pythonhosted.org/packages/ef/ae/4ae35bbd9a0af9d820362751f0766582833c211224b38665c0f8de3d487f/coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607", size = 266513, upload-time = "2026-03-17T10:32:50.1Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/d326174c55af36f74eac6ae781612d9492f060ce8244b570bb9d50d9d609/coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90", size = 267650, upload-time = "2026-03-17T10:32:52.391Z" }, + { url = "https://files.pythonhosted.org/packages/7a/5e/31484d62cbd0eabd3412e30d74386ece4a0837d4f6c3040a653878bfc019/coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3", size = 261089, upload-time = "2026-03-17T10:32:54.544Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d8/49a72d6de146eebb0b7e48cc0f4bc2c0dd858e3d4790ab2b39a2872b62bd/coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab", size = 263982, upload-time = "2026-03-17T10:32:56.803Z" }, + { url = "https://files.pythonhosted.org/packages/06/3b/0351f1bd566e6e4dd39e978efe7958bde1d32f879e85589de147654f57bb/coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562", size = 261579, upload-time = "2026-03-17T10:32:59.466Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ce/796a2a2f4017f554d7810f5c573449b35b1e46788424a548d4d19201b222/coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2", size = 265316, upload-time = "2026-03-17T10:33:01.847Z" }, + { url = "https://files.pythonhosted.org/packages/3d/16/d5ae91455541d1a78bc90abf495be600588aff8f6db5c8b0dae739fa39c9/coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea", size = 260427, upload-time = "2026-03-17T10:33:03.945Z" }, + { url = "https://files.pythonhosted.org/packages/48/11/07f413dba62db21fb3fad5d0de013a50e073cc4e2dc4306e770360f6dfc8/coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a", size = 262745, upload-time = "2026-03-17T10:33:06.285Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/d792371332eb4663115becf4bad47e047d16234b1aff687b1b18c58d60ae/coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215", size = 223146, upload-time = "2026-03-17T10:33:08.756Z" }, + { url = "https://files.pythonhosted.org/packages/db/51/37221f59a111dca5e85be7dbf09696323b5b9f13ff65e0641d535ed06ea8/coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43", size = 224254, upload-time = "2026-03-17T10:33:11.174Z" }, + { url = "https://files.pythonhosted.org/packages/54/83/6acacc889de8987441aa7d5adfbdbf33d288dad28704a67e574f1df9bcbb/coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45", size = 222276, upload-time = "2026-03-17T10:33:13.466Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ee/a4cf96b8ce1e566ed238f0659ac2d3f007ed1d14b181bcb684e19561a69a/coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61", size = 211346, upload-time = "2026-03-17T10:33:15.691Z" }, ] [package.optional-dependencies] @@ -582,62 +628,62 @@ toml = [ [[package]] name = "cryptography" -version = "46.0.5" +version = "46.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad", size = 7176289, upload-time = "2026-02-10T19:17:08.274Z" }, - { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, - { url = "https://files.pythonhosted.org/packages/63/e7/471ab61099a3920b0c77852ea3f0ea611c9702f651600397ac567848b897/cryptography-46.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", size = 4424742, upload-time = "2026-02-10T19:17:12.388Z" }, - { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, - { url = "https://files.pythonhosted.org/packages/22/29/c2e812ebc38c57b40e7c583895e73c8c5adb4d1e4a0cc4c5a4fdab2b1acc/cryptography-46.0.5-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", size = 4947993, upload-time = "2026-02-10T19:17:15.618Z" }, - { url = "https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", size = 4456855, upload-time = "2026-02-10T19:17:17.221Z" }, - { url = "https://files.pythonhosted.org/packages/2d/87/fc628a7ad85b81206738abbd213b07702bcbdada1dd43f72236ef3cffbb5/cryptography-46.0.5-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", size = 3984635, upload-time = "2026-02-10T19:17:18.792Z" }, - { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, - { url = "https://files.pythonhosted.org/packages/bc/36/45e76c68d7311432741faf1fbf7fac8a196a0a735ca21f504c75d37e2558/cryptography-46.0.5-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", size = 4912181, upload-time = "2026-02-10T19:17:21.825Z" }, - { url = "https://files.pythonhosted.org/packages/6d/1a/c1ba8fead184d6e3d5afcf03d569acac5ad063f3ac9fb7258af158f7e378/cryptography-46.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", size = 4456482, upload-time = "2026-02-10T19:17:25.133Z" }, - { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/9d58bb32b1121a8a2f27383fabae4d63080c7ca60b9b5c88be742be04ee7/cryptography-46.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", size = 4667819, upload-time = "2026-02-10T19:17:28.569Z" }, - { url = "https://files.pythonhosted.org/packages/ea/ed/325d2a490c5e94038cdb0117da9397ece1f11201f425c4e9c57fe5b9f08b/cryptography-46.0.5-cp311-abi3-win32.whl", hash = "sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48", size = 3028230, upload-time = "2026-02-10T19:17:30.518Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5a/ac0f49e48063ab4255d9e3b79f5def51697fce1a95ea1370f03dc9db76f6/cryptography-46.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4", size = 3480909, upload-time = "2026-02-10T19:17:32.083Z" }, - { url = "https://files.pythonhosted.org/packages/00/13/3d278bfa7a15a96b9dc22db5a12ad1e48a9eb3d40e1827ef66a5df75d0d0/cryptography-46.0.5-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2", size = 7119287, upload-time = "2026-02-10T19:17:33.801Z" }, - { url = "https://files.pythonhosted.org/packages/67/c8/581a6702e14f0898a0848105cbefd20c058099e2c2d22ef4e476dfec75d7/cryptography-46.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", size = 4265728, upload-time = "2026-02-10T19:17:35.569Z" }, - { url = "https://files.pythonhosted.org/packages/dd/4a/ba1a65ce8fc65435e5a849558379896c957870dd64fecea97b1ad5f46a37/cryptography-46.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87", size = 4408287, upload-time = "2026-02-10T19:17:36.938Z" }, - { url = "https://files.pythonhosted.org/packages/f8/67/8ffdbf7b65ed1ac224d1c2df3943553766914a8ca718747ee3871da6107e/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", size = 4270291, upload-time = "2026-02-10T19:17:38.748Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e5/f52377ee93bc2f2bba55a41a886fd208c15276ffbd2569f2ddc89d50e2c5/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981", size = 4927539, upload-time = "2026-02-10T19:17:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/3b/02/cfe39181b02419bbbbcf3abdd16c1c5c8541f03ca8bda240debc467d5a12/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9", size = 4442199, upload-time = "2026-02-10T19:17:41.789Z" }, - { url = "https://files.pythonhosted.org/packages/c0/96/2fcaeb4873e536cf71421a388a6c11b5bc846e986b2b069c79363dc1648e/cryptography-46.0.5-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648", size = 3960131, upload-time = "2026-02-10T19:17:43.379Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d2/b27631f401ddd644e94c5cf33c9a4069f72011821cf3dc7309546b0642a0/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", size = 4270072, upload-time = "2026-02-10T19:17:45.481Z" }, - { url = "https://files.pythonhosted.org/packages/f4/a7/60d32b0370dae0b4ebe55ffa10e8599a2a59935b5ece1b9f06edb73abdeb/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0", size = 4892170, upload-time = "2026-02-10T19:17:46.997Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b9/cf73ddf8ef1164330eb0b199a589103c363afa0cf794218c24d524a58eab/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663", size = 4441741, upload-time = "2026-02-10T19:17:48.661Z" }, - { url = "https://files.pythonhosted.org/packages/5f/eb/eee00b28c84c726fe8fa0158c65afe312d9c3b78d9d01daf700f1f6e37ff/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", size = 4396728, upload-time = "2026-02-10T19:17:50.058Z" }, - { url = "https://files.pythonhosted.org/packages/65/f4/6bc1a9ed5aef7145045114b75b77c2a8261b4d38717bd8dea111a63c3442/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d", size = 4652001, upload-time = "2026-02-10T19:17:51.54Z" }, - { url = "https://files.pythonhosted.org/packages/86/ef/5d00ef966ddd71ac2e6951d278884a84a40ffbd88948ef0e294b214ae9e4/cryptography-46.0.5-cp314-cp314t-win32.whl", hash = "sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a", size = 3003637, upload-time = "2026-02-10T19:17:52.997Z" }, - { url = "https://files.pythonhosted.org/packages/b7/57/f3f4160123da6d098db78350fdfd9705057aad21de7388eacb2401dceab9/cryptography-46.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4", size = 3469487, upload-time = "2026-02-10T19:17:54.549Z" }, - { url = "https://files.pythonhosted.org/packages/e2/fa/a66aa722105ad6a458bebd64086ca2b72cdd361fed31763d20390f6f1389/cryptography-46.0.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31", size = 7170514, upload-time = "2026-02-10T19:17:56.267Z" }, - { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, - { url = "https://files.pythonhosted.org/packages/5c/32/9b87132a2f91ee7f5223b091dc963055503e9b442c98fc0b8a5ca765fab0/cryptography-46.0.5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", size = 4420667, upload-time = "2026-02-10T19:18:00.619Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, - { url = "https://files.pythonhosted.org/packages/8e/7c/c4f45e0eeff9b91e3f12dbd0e165fcf2a38847288fcfd889deea99fb7b6d/cryptography-46.0.5-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", size = 4939143, upload-time = "2026-02-10T19:18:03.964Z" }, - { url = "https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", size = 4453674, upload-time = "2026-02-10T19:18:05.588Z" }, - { url = "https://files.pythonhosted.org/packages/db/ed/db15d3956f65264ca204625597c410d420e26530c4e2943e05a0d2f24d51/cryptography-46.0.5-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", size = 3978801, upload-time = "2026-02-10T19:18:07.167Z" }, - { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, - { url = "https://files.pythonhosted.org/packages/33/45/726809d1176959f4a896b86907b98ff4391a8aa29c0aaaf9450a8a10630e/cryptography-46.0.5-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", size = 4901539, upload-time = "2026-02-10T19:18:11.263Z" }, - { url = "https://files.pythonhosted.org/packages/99/0f/a3076874e9c88ecb2ecc31382f6e7c21b428ede6f55aafa1aa272613e3cd/cryptography-46.0.5-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", size = 4452794, upload-time = "2026-02-10T19:18:12.914Z" }, - { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, - { url = "https://files.pythonhosted.org/packages/96/93/682d2b43c1d5f1406ed048f377c0fc9fc8f7b0447a478d5c65ab3d3a66eb/cryptography-46.0.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", size = 4667123, upload-time = "2026-02-10T19:18:15.886Z" }, - { url = "https://files.pythonhosted.org/packages/45/2d/9c5f2926cb5300a8eefc3f4f0b3f3df39db7f7ce40c8365444c49363cbda/cryptography-46.0.5-cp38-abi3-win32.whl", hash = "sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72", size = 3010220, upload-time = "2026-02-10T19:18:17.361Z" }, - { url = "https://files.pythonhosted.org/packages/48/ef/0c2f4a8e31018a986949d34a01115dd057bf536905dca38897bacd21fac3/cryptography-46.0.5-cp38-abi3-win_amd64.whl", hash = "sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595", size = 3467050, upload-time = "2026-02-10T19:18:18.899Z" }, - { url = "https://files.pythonhosted.org/packages/eb/dd/2d9fdb07cebdf3d51179730afb7d5e576153c6744c3ff8fded23030c204e/cryptography-46.0.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c", size = 3476964, upload-time = "2026-02-10T19:18:20.687Z" }, - { url = "https://files.pythonhosted.org/packages/e9/6f/6cc6cc9955caa6eaf83660b0da2b077c7fe8ff9950a3c5e45d605038d439/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a", size = 4218321, upload-time = "2026-02-10T19:18:22.349Z" }, - { url = "https://files.pythonhosted.org/packages/3e/5d/c4da701939eeee699566a6c1367427ab91a8b7088cc2328c09dbee940415/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356", size = 4381786, upload-time = "2026-02-10T19:18:24.529Z" }, - { url = "https://files.pythonhosted.org/packages/ac/97/a538654732974a94ff96c1db621fa464f455c02d4bb7d2652f4edc21d600/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da", size = 4217990, upload-time = "2026-02-10T19:18:25.957Z" }, - { url = "https://files.pythonhosted.org/packages/ae/11/7e500d2dd3ba891197b9efd2da5454b74336d64a7cc419aa7327ab74e5f6/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257", size = 4381252, upload-time = "2026-02-10T19:18:27.496Z" }, - { url = "https://files.pythonhosted.org/packages/bc/58/6b3d24e6b9bc474a2dcdee65dfd1f008867015408a271562e4b690561a4d/cryptography-46.0.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7", size = 3407605, upload-time = "2026-02-10T19:18:29.233Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a4/ba/04b1bd4218cbc58dc90ce967106d51582371b898690f3ae0402876cc4f34/cryptography-46.0.6.tar.gz", hash = "sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759", size = 750542, upload-time = "2026-03-25T23:34:53.396Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/23/9285e15e3bc57325b0a72e592921983a701efc1ee8f91c06c5f0235d86d9/cryptography-46.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8", size = 7176401, upload-time = "2026-03-25T23:33:22.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/f8/e61f8f13950ab6195b31913b42d39f0f9afc7d93f76710f299b5ec286ae6/cryptography-46.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30", size = 4275275, upload-time = "2026-03-25T23:33:23.844Z" }, + { url = "https://files.pythonhosted.org/packages/19/69/732a736d12c2631e140be2348b4ad3d226302df63ef64d30dfdb8db7ad1c/cryptography-46.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a", size = 4425320, upload-time = "2026-03-25T23:33:25.703Z" }, + { url = "https://files.pythonhosted.org/packages/d4/12/123be7292674abf76b21ac1fc0e1af50661f0e5b8f0ec8285faac18eb99e/cryptography-46.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175", size = 4278082, upload-time = "2026-03-25T23:33:27.423Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ba/d5e27f8d68c24951b0a484924a84c7cdaed7502bac9f18601cd357f8b1d2/cryptography-46.0.6-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463", size = 4926514, upload-time = "2026-03-25T23:33:29.206Z" }, + { url = "https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97", size = 4457766, upload-time = "2026-03-25T23:33:30.834Z" }, + { url = "https://files.pythonhosted.org/packages/01/59/562be1e653accee4fdad92c7a2e88fced26b3fdfce144047519bbebc299e/cryptography-46.0.6-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c", size = 3986535, upload-time = "2026-03-25T23:33:33.02Z" }, + { url = "https://files.pythonhosted.org/packages/d6/8b/b1ebfeb788bf4624d36e45ed2662b8bd43a05ff62157093c1539c1288a18/cryptography-46.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507", size = 4277618, upload-time = "2026-03-25T23:33:34.567Z" }, + { url = "https://files.pythonhosted.org/packages/dd/52/a005f8eabdb28df57c20f84c44d397a755782d6ff6d455f05baa2785bd91/cryptography-46.0.6-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19", size = 4890802, upload-time = "2026-03-25T23:33:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/ec/4d/8e7d7245c79c617d08724e2efa397737715ca0ec830ecb3c91e547302555/cryptography-46.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738", size = 4457425, upload-time = "2026-03-25T23:33:38.904Z" }, + { url = "https://files.pythonhosted.org/packages/1d/5c/f6c3596a1430cec6f949085f0e1a970638d76f81c3ea56d93d564d04c340/cryptography-46.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c", size = 4405530, upload-time = "2026-03-25T23:33:40.842Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c9/9f9cea13ee2dbde070424e0c4f621c091a91ffcc504ffea5e74f0e1daeff/cryptography-46.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f", size = 4667896, upload-time = "2026-03-25T23:33:42.781Z" }, + { url = "https://files.pythonhosted.org/packages/ad/b5/1895bc0821226f129bc74d00eccfc6a5969e2028f8617c09790bf89c185e/cryptography-46.0.6-cp311-abi3-win32.whl", hash = "sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2", size = 3026348, upload-time = "2026-03-25T23:33:45.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f8/c9bcbf0d3e6ad288b9d9aa0b1dee04b063d19e8c4f871855a03ab3a297ab/cryptography-46.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124", size = 3483896, upload-time = "2026-03-25T23:33:46.649Z" }, + { url = "https://files.pythonhosted.org/packages/01/41/3a578f7fd5c70611c0aacba52cd13cb364a5dee895a5c1d467208a9380b0/cryptography-46.0.6-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275", size = 7117147, upload-time = "2026-03-25T23:33:48.249Z" }, + { url = "https://files.pythonhosted.org/packages/fa/87/887f35a6fca9dde90cad08e0de0c89263a8e59b2d2ff904fd9fcd8025b6f/cryptography-46.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4", size = 4266221, upload-time = "2026-03-25T23:33:49.874Z" }, + { url = "https://files.pythonhosted.org/packages/aa/a8/0a90c4f0b0871e0e3d1ed126aed101328a8a57fd9fd17f00fb67e82a51ca/cryptography-46.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b", size = 4408952, upload-time = "2026-03-25T23:33:52.128Z" }, + { url = "https://files.pythonhosted.org/packages/16/0b/b239701eb946523e4e9f329336e4ff32b1247e109cbab32d1a7b61da8ed7/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707", size = 4270141, upload-time = "2026-03-25T23:33:54.11Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a8/976acdd4f0f30df7b25605f4b9d3d89295351665c2091d18224f7ad5cdbf/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361", size = 4904178, upload-time = "2026-03-25T23:33:55.725Z" }, + { url = "https://files.pythonhosted.org/packages/b1/1b/bf0e01a88efd0e59679b69f42d4afd5bced8700bb5e80617b2d63a3741af/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b", size = 4441812, upload-time = "2026-03-25T23:33:57.364Z" }, + { url = "https://files.pythonhosted.org/packages/bb/8b/11df86de2ea389c65aa1806f331cae145f2ed18011f30234cc10ca253de8/cryptography-46.0.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca", size = 3963923, upload-time = "2026-03-25T23:33:59.361Z" }, + { url = "https://files.pythonhosted.org/packages/91/e0/207fb177c3a9ef6a8108f234208c3e9e76a6aa8cf20d51932916bd43bda0/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013", size = 4269695, upload-time = "2026-03-25T23:34:00.909Z" }, + { url = "https://files.pythonhosted.org/packages/21/5e/19f3260ed1e95bced52ace7501fabcd266df67077eeb382b79c81729d2d3/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4", size = 4869785, upload-time = "2026-03-25T23:34:02.796Z" }, + { url = "https://files.pythonhosted.org/packages/10/38/cd7864d79aa1d92ef6f1a584281433419b955ad5a5ba8d1eb6c872165bcb/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a", size = 4441404, upload-time = "2026-03-25T23:34:04.35Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/4fe7a8d25fed74419f91835cf5829ade6408fd1963c9eae9c4bce390ecbb/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d", size = 4397549, upload-time = "2026-03-25T23:34:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a0/7d738944eac6513cd60a8da98b65951f4a3b279b93479a7e8926d9cd730b/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736", size = 4651874, upload-time = "2026-03-25T23:34:07.916Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f1/c2326781ca05208845efca38bf714f76939ae446cd492d7613808badedf1/cryptography-46.0.6-cp314-cp314t-win32.whl", hash = "sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed", size = 3001511, upload-time = "2026-03-25T23:34:09.892Z" }, + { url = "https://files.pythonhosted.org/packages/c9/57/fe4a23eb549ac9d903bd4698ffda13383808ef0876cc912bcb2838799ece/cryptography-46.0.6-cp314-cp314t-win_amd64.whl", hash = "sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4", size = 3471692, upload-time = "2026-03-25T23:34:11.613Z" }, + { url = "https://files.pythonhosted.org/packages/c4/cc/f330e982852403da79008552de9906804568ae9230da8432f7496ce02b71/cryptography-46.0.6-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a", size = 7162776, upload-time = "2026-03-25T23:34:13.308Z" }, + { url = "https://files.pythonhosted.org/packages/49/b3/dc27efd8dcc4bff583b3f01d4a3943cd8b5821777a58b3a6a5f054d61b79/cryptography-46.0.6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8", size = 4270529, upload-time = "2026-03-25T23:34:15.019Z" }, + { url = "https://files.pythonhosted.org/packages/e6/05/e8d0e6eb4f0d83365b3cb0e00eb3c484f7348db0266652ccd84632a3d58d/cryptography-46.0.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77", size = 4414827, upload-time = "2026-03-25T23:34:16.604Z" }, + { url = "https://files.pythonhosted.org/packages/2f/97/daba0f5d2dc6d855e2dcb70733c812558a7977a55dd4a6722756628c44d1/cryptography-46.0.6-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290", size = 4271265, upload-time = "2026-03-25T23:34:18.586Z" }, + { url = "https://files.pythonhosted.org/packages/89/06/fe1fce39a37ac452e58d04b43b0855261dac320a2ebf8f5260dd55b201a9/cryptography-46.0.6-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410", size = 4916800, upload-time = "2026-03-25T23:34:20.561Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8a/b14f3101fe9c3592603339eb5d94046c3ce5f7fc76d6512a2d40efd9724e/cryptography-46.0.6-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d", size = 4448771, upload-time = "2026-03-25T23:34:22.406Z" }, + { url = "https://files.pythonhosted.org/packages/01/b3/0796998056a66d1973fd52ee89dc1bb3b6581960a91ad4ac705f182d398f/cryptography-46.0.6-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70", size = 3978333, upload-time = "2026-03-25T23:34:24.281Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3d/db200af5a4ffd08918cd55c08399dc6c9c50b0bc72c00a3246e099d3a849/cryptography-46.0.6-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d", size = 4271069, upload-time = "2026-03-25T23:34:25.895Z" }, + { url = "https://files.pythonhosted.org/packages/d7/18/61acfd5b414309d74ee838be321c636fe71815436f53c9f0334bf19064fa/cryptography-46.0.6-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa", size = 4878358, upload-time = "2026-03-25T23:34:27.67Z" }, + { url = "https://files.pythonhosted.org/packages/8b/65/5bf43286d566f8171917cae23ac6add941654ccf085d739195a4eacf1674/cryptography-46.0.6-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58", size = 4448061, upload-time = "2026-03-25T23:34:29.375Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/7e49c0fa7205cf3597e525d156a6bce5b5c9de1fd7e8cb01120e459f205a/cryptography-46.0.6-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb", size = 4399103, upload-time = "2026-03-25T23:34:32.036Z" }, + { url = "https://files.pythonhosted.org/packages/44/46/466269e833f1c4718d6cd496ffe20c56c9c8d013486ff66b4f69c302a68d/cryptography-46.0.6-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72", size = 4659255, upload-time = "2026-03-25T23:34:33.679Z" }, + { url = "https://files.pythonhosted.org/packages/0a/09/ddc5f630cc32287d2c953fc5d32705e63ec73e37308e5120955316f53827/cryptography-46.0.6-cp38-abi3-win32.whl", hash = "sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c", size = 3010660, upload-time = "2026-03-25T23:34:35.418Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/ca4893968aeb2709aacfb57a30dec6fa2ab25b10fa9f064b8882ce33f599/cryptography-46.0.6-cp38-abi3-win_amd64.whl", hash = "sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f", size = 3471160, upload-time = "2026-03-25T23:34:37.191Z" }, + { url = "https://files.pythonhosted.org/packages/2e/84/7ccff00ced5bac74b775ce0beb7d1be4e8637536b522b5df9b73ada42da2/cryptography-46.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead", size = 3475444, upload-time = "2026-03-25T23:34:38.944Z" }, + { url = "https://files.pythonhosted.org/packages/bc/1f/4c926f50df7749f000f20eede0c896769509895e2648db5da0ed55db711d/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8", size = 4218227, upload-time = "2026-03-25T23:34:40.871Z" }, + { url = "https://files.pythonhosted.org/packages/c6/65/707be3ffbd5f786028665c3223e86e11c4cda86023adbc56bd72b1b6bab5/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0", size = 4381399, upload-time = "2026-03-25T23:34:42.609Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6d/73557ed0ef7d73d04d9aba745d2c8e95218213687ee5e76b7d236a5030fc/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b", size = 4217595, upload-time = "2026-03-25T23:34:44.205Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c5/e1594c4eec66a567c3ac4400008108a415808be2ce13dcb9a9045c92f1a0/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a", size = 4380912, upload-time = "2026-03-25T23:34:46.328Z" }, + { url = "https://files.pythonhosted.org/packages/1a/89/843b53614b47f97fe1abc13f9a86efa5ec9e275292c457af1d4a60dc80e0/cryptography-46.0.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e", size = 3409955, upload-time = "2026-03-25T23:34:48.465Z" }, ] [[package]] @@ -678,11 +724,11 @@ wheels = [ [[package]] name = "dynaconf" -version = "3.2.12" +version = "3.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/7a6f84b68268fe1d12e709faec7d293e0c37c9c03bacaf363de41e7e7568/dynaconf-3.2.12.tar.gz", hash = "sha256:29cea583b007d890e6031fa89c0ac489b631c73dbee83bcd5e6f97602c26354e", size = 313801, upload-time = "2025-10-10T19:54:06.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/0e/05927cf459e73f8bf9a9277cbea6f2d5b7db8a5cc9dc1e20e7a5fbac1b90/dynaconf-3.2.13.tar.gz", hash = "sha256:d79e0189d97b3f226b8ebb1717e2ce05d1a05cdf6ea05de66d24625fdb5a0cbd", size = 283507, upload-time = "2026-03-17T19:38:47.632Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/68/51adede38ab2ee9ecfddb8b60a80a42b618a72f1018fcf60974e5d852831/dynaconf-3.2.12-py2.py3-none-any.whl", hash = "sha256:eb2a11865917dff8810c6098cd736b8f4d2f4e39ad914500e2dfbe064b82c499", size = 237788, upload-time = "2025-10-10T19:54:03.731Z" }, + { url = "https://files.pythonhosted.org/packages/97/43/11d6e5d2c00bf000b5329717c74563bf76a9193f4a41cb0c4ef277dde4fa/dynaconf-3.2.13-py2.py3-none-any.whl", hash = "sha256:4305527aef4834bdba3e39479b23c005186e83fb85f65bcaa4bcea58fa26759b", size = 238041, upload-time = "2026-03-17T19:38:45.337Z" }, ] [[package]] @@ -690,7 +736,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -699,11 +745,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.24.2" +version = "3.25.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/02/a8/dae62680be63cbb3ff87cfa2f51cf766269514ea5488479d42fec5aa6f3a/filelock-3.24.2.tar.gz", hash = "sha256:c22803117490f156e59fafce621f0550a7a853e2bbf4f87f112b11d469b6c81b", size = 37601, upload-time = "2026-02-16T02:50:45.614Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl", hash = "sha256:667d7dc0b7d1e1064dd5f8f8e80bdac157a6482e8d2e02cd16fd3b6b33bd6556", size = 24152, upload-time = "2026-02-16T02:50:44Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, ] [[package]] @@ -924,8 +970,14 @@ dependencies = [ { name = "pandas" }, ] +[package.optional-dependencies] +arrow = [ + { name = "pyarrow" }, +] + [package.dev-dependencies] test = [ + { name = "pyarrow" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-json-report" }, @@ -942,10 +994,13 @@ test = [ requires-dist = [ { name = "gooddata-sdk", editable = "packages/gooddata-sdk" }, { name = "pandas", specifier = ">=2.0.0,<3.0.0" }, + { name = "pyarrow", marker = "extra == 'arrow'", specifier = ">=23.0.1" }, ] +provides-extras = ["arrow"] [package.metadata.requires-dev] test = [ + { name = "pyarrow", specifier = ">=16.1.0" }, { name = "pytest", specifier = "~=8.3.4" }, { name = "pytest-cov", specifier = "~=6.0.0" }, { name = "pytest-json-report", specifier = "==1.5.0" }, @@ -1122,9 +1177,15 @@ dependencies = [ { name = "requests" }, ] +[package.optional-dependencies] +arrow = [ + { name = "pyarrow" }, +] + [package.dev-dependencies] test = [ { name = "deepdiff" }, + { name = "pyarrow" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-json-report" }, @@ -1142,16 +1203,19 @@ requires-dist = [ { name = "brotli", specifier = "==1.2.0" }, { name = "cattrs", specifier = ">=22.1.0,<=24.1.1" }, { name = "gooddata-api-client", editable = "gooddata-api-client" }, + { name = "pyarrow", marker = "extra == 'arrow'", specifier = ">=23.0.1" }, { name = "gooddata-code-convertors" }, { name = "python-dateutil", specifier = ">=2.5.3" }, { name = "python-dotenv", specifier = ">=1.0.0,<2.0.0" }, { name = "pyyaml", specifier = ">=6.0" }, { name = "requests", specifier = "~=2.32.0" }, ] +provides-extras = ["arrow"] [package.metadata.requires-dev] test = [ { name = "deepdiff", specifier = "~=8.5.0" }, + { name = "pyarrow", specifier = ">=16.1.0" }, { name = "pytest", specifier = "~=8.3.4" }, { name = "pytest-cov", specifier = "~=6.0.0" }, { name = "pytest-json-report", specifier = "==1.5.0" }, @@ -1165,46 +1229,46 @@ test = [ [[package]] name = "griffe" -version = "2.0.0" +version = "2.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "griffecli" }, { name = "griffelib" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/04/56/28a0accac339c164b52a92c6cfc45a903acc0c174caa5c1713803467b533/griffe-2.0.0.tar.gz", hash = "sha256:c68979cd8395422083a51ea7cf02f9c119d889646d99b7b656ee43725de1b80f", size = 293906, upload-time = "2026-03-23T21:06:53.402Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/49/eb6d2935e27883af92c930ed40cc4c69bcd32c402be43b8ca4ab20510f67/griffe-2.0.2.tar.gz", hash = "sha256:c5d56326d159f274492e9bf93a9895cec101155d944caa66d0fc4e0c13751b92", size = 293757, upload-time = "2026-03-27T11:34:52.205Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/94/ee21d41e7eb4f823b94603b9d40f86d3c7fde80eacc2c3c71845476dddaa/griffe-2.0.0-py3-none-any.whl", hash = "sha256:5418081135a391c3e6e757a7f3f156f1a1a746cc7b4023868ff7d5e2f9a980aa", size = 5214, upload-time = "2026-02-09T19:09:44.105Z" }, + { url = "https://files.pythonhosted.org/packages/94/c0/2bb018eecf9a83c68db9cd9fffd9dab25f102ad30ed869451046e46d1187/griffe-2.0.2-py3-none-any.whl", hash = "sha256:2b31816460aee1996af26050a1fc6927a2e5936486856707f55508e4c9b5960b", size = 5141, upload-time = "2026-03-27T11:34:47.721Z" }, ] [[package]] name = "griffecli" -version = "2.0.0" +version = "2.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, { name = "griffelib" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a4/f8/2e129fd4a86e52e58eefe664de05e7d502decf766e7316cc9e70fdec3e18/griffecli-2.0.0.tar.gz", hash = "sha256:312fa5ebb4ce6afc786356e2d0ce85b06c1c20d45abc42d74f0cda65e159f6ef", size = 56213, upload-time = "2026-03-23T21:06:54.8Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/e0/6a7d661d71bb043656a109b91d84a42b5342752542074ec83b16a6eb97f0/griffecli-2.0.2.tar.gz", hash = "sha256:40a1ad4181fc39685d025e119ae2c5b669acdc1f19b705fb9bf971f4e6f6dffb", size = 56281, upload-time = "2026-03-27T11:34:50.087Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ed/d93f7a447bbf7a935d8868e9617cbe1cadf9ee9ee6bd275d3040fbf93d60/griffecli-2.0.0-py3-none-any.whl", hash = "sha256:9f7cd9ee9b21d55e91689358978d2385ae65c22f307a63fb3269acf3f21e643d", size = 9345, upload-time = "2026-02-09T19:09:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e8/90d93356c88ac34c20cb5edffca68138df55ca9bbd1a06eccfbcec8fdbe5/griffecli-2.0.2-py3-none-any.whl", hash = "sha256:0d44d39e59afa81e288a3e1c3bf352cc4fa537483326ac06b8bb6a51fd8303a0", size = 9500, upload-time = "2026-03-27T11:34:48.81Z" }, ] [[package]] name = "griffelib" -version = "2.0.0" +version = "2.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ad/06/eccbd311c9e2b3ca45dbc063b93134c57a1ccc7607c5e545264ad092c4a9/griffelib-2.0.0.tar.gz", hash = "sha256:e504d637a089f5cab9b5daf18f7645970509bf4f53eda8d79ed71cce8bd97934", size = 166312, upload-time = "2026-03-23T21:06:55.954Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/82/74f4a3310cdabfbb10da554c3a672847f1ed33c6f61dd472681ce7f1fe67/griffelib-2.0.2.tar.gz", hash = "sha256:3cf20b3bc470e83763ffbf236e0076b1211bac1bc67de13daf494640f2de707e", size = 166461, upload-time = "2026-03-27T11:34:51.091Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-py3-none-any.whl", hash = "sha256:01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f", size = 142004, upload-time = "2026-02-09T19:09:40.561Z" }, + { url = "https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl", hash = "sha256:925c857658fb1ba40c0772c37acbc2ab650bd794d9c1b9726922e36ea4117ea1", size = 142357, upload-time = "2026-03-27T11:34:46.275Z" }, ] [[package]] name = "identify" -version = "2.6.16" +version = "2.6.18" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5b/8d/e8b97e6bd3fb6fb271346f7981362f1e04d6a7463abd0de79e1fda17c067/identify-2.6.16.tar.gz", hash = "sha256:846857203b5511bbe94d5a352a48ef2359532bc8f6727b5544077a0dcfb24980", size = 99360, upload-time = "2026-01-12T18:58:58.201Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580, upload-time = "2026-03-15T18:39:50.319Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl", hash = "sha256:391ee4d77741d994189522896270b787aed8670389bfd60f326d677d64a6dfb0", size = 99202, upload-time = "2026-01-12T18:58:56.627Z" }, + { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394, upload-time = "2026-03-15T18:39:48.915Z" }, ] [[package]] @@ -1390,7 +1454,7 @@ wheels = [ [[package]] name = "moto" -version = "5.1.21" +version = "5.1.22" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boto3" }, @@ -1403,23 +1467,23 @@ dependencies = [ { name = "werkzeug" }, { name = "xmltodict" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/f8/81e2ee90f47a6ae1e475a961bd6a1a1569b04999ba941897b87101b0d5af/moto-5.1.21.tar.gz", hash = "sha256:713dde46e71e2714fa9a29eec513ec618d35e1d84c256331b5aab3f30692feeb", size = 8441171, upload-time = "2026-02-08T21:52:39.157Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/3d/1765accbf753dc1ae52f26a2e2ed2881d78c2eb9322c178e45312472e4a0/moto-5.1.22.tar.gz", hash = "sha256:e5b2c378296e4da50ce5a3c355a1743c8d6d396ea41122f5bb2a40f9b9a8cc0e", size = 8547792, upload-time = "2026-03-08T21:06:43.731Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/c7/4b0bc06f0811caa67f7e8c3ca2e637bd8cb4317c2f8839b7d643d7ace68c/moto-5.1.21-py3-none-any.whl", hash = "sha256:311a30095b08b39dd2707f161f1440d361684fe0090b9fd0751dfd1c9b022445", size = 6514163, upload-time = "2026-02-08T21:52:36.91Z" }, + { url = "https://files.pythonhosted.org/packages/46/4f/8812a01e3e0bd6be3e13b90432fb5c696af9a720af3f00e6eba5ad748345/moto-5.1.22-py3-none-any.whl", hash = "sha256:d9f20ae3cf29c44f93c1f8f06c8f48d5560e5dc027816ef1d0d2059741ffcfbe", size = 6617400, upload-time = "2026-03-08T21:06:41.093Z" }, ] [[package]] name = "msal" -version = "1.34.0" +version = "1.35.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "pyjwt", extra = ["crypto"] }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/0e/c857c46d653e104019a84f22d4494f2119b4fe9f896c92b4b864b3b045cc/msal-1.34.0.tar.gz", hash = "sha256:76ba83b716ea5a6d75b0279c0ac353a0e05b820ca1f6682c0eb7f45190c43c2f", size = 153961, upload-time = "2025-09-22T23:05:48.989Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/aa/5a646093ac218e4a329391d5a31e5092a89db7d2ef1637a90b82cd0b6f94/msal-1.35.1.tar.gz", hash = "sha256:70cac18ab80a053bff86219ba64cfe3da1f307c74b009e2da57ef040eb1b5656", size = 165658, upload-time = "2026-03-04T23:38:51.812Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/dc/18d48843499e278538890dc709e9ee3dea8375f8be8e82682851df1b48b5/msal-1.34.0-py3-none-any.whl", hash = "sha256:f669b1644e4950115da7a176441b0e13ec2975c29528d8b9e81316023676d6e1", size = 116987, upload-time = "2025-09-22T23:05:47.294Z" }, + { url = "https://files.pythonhosted.org/packages/96/86/16815fddf056ca998853c6dc525397edf0b43559bb4073a80d2bc7fe8009/msal-1.35.1-py3-none-any.whl", hash = "sha256:8f4e82f34b10c19e326ec69f44dc6b30171f2f7098f3720ea8a9f0c11832caa3", size = 119909, upload-time = "2026-03-04T23:38:50.452Z" }, ] [[package]] @@ -1510,125 +1574,125 @@ wheels = [ [[package]] name = "numpy" -version = "2.4.2" +version = "2.4.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/44/71852273146957899753e69986246d6a176061ea183407e95418c2aa4d9a/numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825", size = 16955478, upload-time = "2026-01-31T23:10:25.623Z" }, - { url = "https://files.pythonhosted.org/packages/74/41/5d17d4058bd0cd96bcbd4d9ff0fb2e21f52702aab9a72e4a594efa18692f/numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1", size = 14965467, upload-time = "2026-01-31T23:10:28.186Z" }, - { url = "https://files.pythonhosted.org/packages/49/48/fb1ce8136c19452ed15f033f8aee91d5defe515094e330ce368a0647846f/numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7", size = 5475172, upload-time = "2026-01-31T23:10:30.848Z" }, - { url = "https://files.pythonhosted.org/packages/40/a9/3feb49f17bbd1300dd2570432961f5c8a4ffeff1db6f02c7273bd020a4c9/numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73", size = 6805145, upload-time = "2026-01-31T23:10:32.352Z" }, - { url = "https://files.pythonhosted.org/packages/3f/39/fdf35cbd6d6e2fcad42fcf85ac04a85a0d0fbfbf34b30721c98d602fd70a/numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1", size = 15966084, upload-time = "2026-01-31T23:10:34.502Z" }, - { url = "https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32", size = 16899477, upload-time = "2026-01-31T23:10:37.075Z" }, - { url = "https://files.pythonhosted.org/packages/09/a1/2a424e162b1a14a5bd860a464ab4e07513916a64ab1683fae262f735ccd2/numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390", size = 17323429, upload-time = "2026-01-31T23:10:39.704Z" }, - { url = "https://files.pythonhosted.org/packages/ce/a2/73014149ff250628df72c58204822ac01d768697913881aacf839ff78680/numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413", size = 18635109, upload-time = "2026-01-31T23:10:41.924Z" }, - { url = "https://files.pythonhosted.org/packages/6c/0c/73e8be2f1accd56df74abc1c5e18527822067dced5ec0861b5bb882c2ce0/numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda", size = 6237915, upload-time = "2026-01-31T23:10:45.26Z" }, - { url = "https://files.pythonhosted.org/packages/76/ae/e0265e0163cf127c24c3969d29f1c4c64551a1e375d95a13d32eab25d364/numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695", size = 12607972, upload-time = "2026-01-31T23:10:47.021Z" }, - { url = "https://files.pythonhosted.org/packages/29/a5/c43029af9b8014d6ea157f192652c50042e8911f4300f8f6ed3336bf437f/numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3", size = 10485763, upload-time = "2026-01-31T23:10:50.087Z" }, - { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, - { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, - { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, - { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, - { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, - { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, - { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, - { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, - { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, - { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, - { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, - { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, - { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, - { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, - { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, - { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, - { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, - { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, - { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, - { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, - { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, - { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, - { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, - { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, - { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, - { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, - { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, - { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, - { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, - { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, - { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, - { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, - { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, - { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, - { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, - { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, - { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, - { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, - { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, - { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, - { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, - { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, - { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, - { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, - { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f8/50e14d36d915ef64d8f8bc4a087fc8264d82c785eda6711f80ab7e620335/numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082", size = 16833179, upload-time = "2026-01-31T23:12:53.5Z" }, - { url = "https://files.pythonhosted.org/packages/17/17/809b5cad63812058a8189e91a1e2d55a5a18fd04611dbad244e8aeae465c/numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a", size = 14889755, upload-time = "2026-01-31T23:12:55.933Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ea/181b9bcf7627fc8371720316c24db888dcb9829b1c0270abf3d288b2e29b/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920", size = 5399500, upload-time = "2026-01-31T23:12:58.671Z" }, - { url = "https://files.pythonhosted.org/packages/33/9f/413adf3fc955541ff5536b78fcf0754680b3c6d95103230252a2c9408d23/numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821", size = 6714252, upload-time = "2026-01-31T23:13:00.518Z" }, - { url = "https://files.pythonhosted.org/packages/91/da/643aad274e29ccbdf42ecd94dafe524b81c87bcb56b83872d54827f10543/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb", size = 15797142, upload-time = "2026-01-31T23:13:02.219Z" }, - { url = "https://files.pythonhosted.org/packages/66/27/965b8525e9cb5dc16481b30a1b3c21e50c7ebf6e9dbd48d0c4d0d5089c7e/numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0", size = 16727979, upload-time = "2026-01-31T23:13:04.62Z" }, - { url = "https://files.pythonhosted.org/packages/de/e5/b7d20451657664b07986c2f6e3be564433f5dcaf3482d68eaecd79afaf03/numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0", size = 12502577, upload-time = "2026-01-31T23:13:07.08Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/c6/4218570d8c8ecc9704b5157a3348e486e84ef4be0ed3e38218ab473c83d2/numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db", size = 16976799, upload-time = "2026-03-29T13:18:15.438Z" }, + { url = "https://files.pythonhosted.org/packages/dd/92/b4d922c4a5f5dab9ed44e6153908a5c665b71acf183a83b93b690996e39b/numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0", size = 14971552, upload-time = "2026-03-29T13:18:18.606Z" }, + { url = "https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015", size = 5476566, upload-time = "2026-03-29T13:18:21.532Z" }, + { url = "https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40", size = 6806482, upload-time = "2026-03-29T13:18:23.634Z" }, + { url = "https://files.pythonhosted.org/packages/68/62/63417c13aa35d57bee1337c67446761dc25ea6543130cf868eace6e8157b/numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d", size = 15973376, upload-time = "2026-03-29T13:18:26.677Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502", size = 16925137, upload-time = "2026-03-29T13:18:30.14Z" }, + { url = "https://files.pythonhosted.org/packages/7e/43/80020edacb3f84b9efdd1591120a4296462c23fd8db0dde1666f6ef66f13/numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd", size = 17329414, upload-time = "2026-03-29T13:18:33.733Z" }, + { url = "https://files.pythonhosted.org/packages/fd/06/af0658593b18a5f73532d377188b964f239eb0894e664a6c12f484472f97/numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5", size = 18658397, upload-time = "2026-03-29T13:18:37.511Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ce/13a09ed65f5d0ce5c7dd0669250374c6e379910f97af2c08c57b0608eee4/numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e", size = 6239499, upload-time = "2026-03-29T13:18:40.372Z" }, + { url = "https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e", size = 12614257, upload-time = "2026-03-29T13:18:42.95Z" }, + { url = "https://files.pythonhosted.org/packages/87/c5/8168052f080c26fa984c413305012be54741c9d0d74abd7fbeeccae3889f/numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e", size = 10486775, upload-time = "2026-03-29T13:18:45.835Z" }, + { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272, upload-time = "2026-03-29T13:18:49.223Z" }, + { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573, upload-time = "2026-03-29T13:18:52.629Z" }, + { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782, upload-time = "2026-03-29T13:18:55.579Z" }, + { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038, upload-time = "2026-03-29T13:18:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666, upload-time = "2026-03-29T13:19:00.341Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480, upload-time = "2026-03-29T13:19:03.63Z" }, + { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036, upload-time = "2026-03-29T13:19:07.428Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643, upload-time = "2026-03-29T13:19:10.775Z" }, + { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117, upload-time = "2026-03-29T13:19:13.464Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584, upload-time = "2026-03-29T13:19:16.155Z" }, + { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450, upload-time = "2026-03-29T13:19:18.994Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933, upload-time = "2026-03-29T13:19:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532, upload-time = "2026-03-29T13:19:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661, upload-time = "2026-03-29T13:19:28.31Z" }, + { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539, upload-time = "2026-03-29T13:19:30.97Z" }, + { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806, upload-time = "2026-03-29T13:19:33.887Z" }, + { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682, upload-time = "2026-03-29T13:19:37.336Z" }, + { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810, upload-time = "2026-03-29T13:19:40.963Z" }, + { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394, upload-time = "2026-03-29T13:19:44.859Z" }, + { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556, upload-time = "2026-03-29T13:19:47.661Z" }, + { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311, upload-time = "2026-03-29T13:19:50.67Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060, upload-time = "2026-03-29T13:19:54.229Z" }, + { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302, upload-time = "2026-03-29T13:19:57.585Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407, upload-time = "2026-03-29T13:20:00.601Z" }, + { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631, upload-time = "2026-03-29T13:20:02.855Z" }, + { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691, upload-time = "2026-03-29T13:20:06.004Z" }, + { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241, upload-time = "2026-03-29T13:20:09.417Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767, upload-time = "2026-03-29T13:20:13.126Z" }, + { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169, upload-time = "2026-03-29T13:20:17.096Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477, upload-time = "2026-03-29T13:20:20.195Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487, upload-time = "2026-03-29T13:20:22.946Z" }, + { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002, upload-time = "2026-03-29T13:20:25.909Z" }, + { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353, upload-time = "2026-03-29T13:20:29.504Z" }, + { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914, upload-time = "2026-03-29T13:20:33.547Z" }, + { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005, upload-time = "2026-03-29T13:20:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974, upload-time = "2026-03-29T13:20:39.014Z" }, + { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591, upload-time = "2026-03-29T13:20:42.146Z" }, + { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700, upload-time = "2026-03-29T13:20:46.204Z" }, + { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781, upload-time = "2026-03-29T13:20:50.242Z" }, + { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959, upload-time = "2026-03-29T13:20:54.019Z" }, + { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768, upload-time = "2026-03-29T13:20:56.912Z" }, + { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181, upload-time = "2026-03-29T13:20:59.548Z" }, + { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035, upload-time = "2026-03-29T13:21:02.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958, upload-time = "2026-03-29T13:21:05.671Z" }, + { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020, upload-time = "2026-03-29T13:21:08.635Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758, upload-time = "2026-03-29T13:21:10.949Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948, upload-time = "2026-03-29T13:21:14.047Z" }, + { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325, upload-time = "2026-03-29T13:21:17.561Z" }, + { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883, upload-time = "2026-03-29T13:21:21.106Z" }, + { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474, upload-time = "2026-03-29T13:21:24.828Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500, upload-time = "2026-03-29T13:21:28.205Z" }, + { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755, upload-time = "2026-03-29T13:21:31.107Z" }, + { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643, upload-time = "2026-03-29T13:21:34.339Z" }, + { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491, upload-time = "2026-03-29T13:21:38.03Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830, upload-time = "2026-03-29T13:21:41.509Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927, upload-time = "2026-03-29T13:21:44.747Z" }, + { url = "https://files.pythonhosted.org/packages/d6/77/063baa20b08b431038c7f9ff5435540c7b7265c78cf56012a483019ca72d/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3", size = 6715557, upload-time = "2026-03-29T13:21:47.406Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a8/379542d45a14f149444c5c4c4e7714707239ce9cc1de8c2803958889da14/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7", size = 15804253, upload-time = "2026-03-29T13:21:50.753Z" }, + { url = "https://files.pythonhosted.org/packages/a2/c8/f0a45426d6d21e7ea3310a15cf90c43a14d9232c31a837702dba437f3373/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f", size = 16753552, upload-time = "2026-03-29T13:21:54.344Z" }, + { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075, upload-time = "2026-03-29T13:21:57.644Z" }, ] [[package]] name = "opentelemetry-api" -version = "1.39.1" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "importlib-metadata" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/b9/3161be15bb8e3ad01be8be5a968a9237c3027c5be504362ff800fca3e442/opentelemetry_api-1.39.1.tar.gz", hash = "sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c", size = 65767, upload-time = "2025-12-11T13:32:39.182Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/1d/4049a9e8698361cc1a1aa03a6c59e4fa4c71e0c0f94a30f988a6876a2ae6/opentelemetry_api-1.40.0.tar.gz", hash = "sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f", size = 70851, upload-time = "2026-03-04T14:17:21.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/df/d3f1ddf4bb4cb50ed9b1139cc7b1c54c34a1e7ce8fd1b9a37c0d1551a6bd/opentelemetry_api-1.39.1-py3-none-any.whl", hash = "sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950", size = 66356, upload-time = "2025-12-11T13:32:17.304Z" }, + { url = "https://files.pythonhosted.org/packages/5f/bf/93795954016c522008da367da292adceed71cca6ee1717e1d64c83089099/opentelemetry_api-1.40.0-py3-none-any.whl", hash = "sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9", size = 68676, upload-time = "2026-03-04T14:17:01.24Z" }, ] [[package]] name = "opentelemetry-sdk" -version = "1.39.1" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-api" }, { name = "opentelemetry-semantic-conventions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/fb/c76080c9ba07e1e8235d24cdcc4d125ef7aa3edf23eb4e497c2e50889adc/opentelemetry_sdk-1.39.1.tar.gz", hash = "sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6", size = 171460, upload-time = "2025-12-11T13:32:49.369Z" } +sdist = { url = "https://files.pythonhosted.org/packages/58/fd/3c3125b20ba18ce2155ba9ea74acb0ae5d25f8cd39cfd37455601b7955cc/opentelemetry_sdk-1.40.0.tar.gz", hash = "sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2", size = 184252, upload-time = "2026-03-04T14:17:31.87Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/98/e91cf858f203d86f4eccdf763dcf01cf03f1dae80c3750f7e635bfa206b6/opentelemetry_sdk-1.39.1-py3-none-any.whl", hash = "sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c", size = 132565, upload-time = "2025-12-11T13:32:35.069Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c5/6a852903d8bfac758c6dc6e9a68b015d3c33f2f1be5e9591e0f4b69c7e0a/opentelemetry_sdk-1.40.0-py3-none-any.whl", hash = "sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1", size = 141951, upload-time = "2026-03-04T14:17:17.961Z" }, ] [[package]] name = "opentelemetry-semantic-conventions" -version = "0.60b1" +version = "0.61b0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-api" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/df/553f93ed38bf22f4b999d9be9c185adb558982214f33eae539d3b5cd0858/opentelemetry_semantic_conventions-0.60b1.tar.gz", hash = "sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953", size = 137935, upload-time = "2025-12-11T13:32:50.487Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/c0/4ae7973f3c2cfd2b6e321f1675626f0dab0a97027cc7a297474c9c8f3d04/opentelemetry_semantic_conventions-0.61b0.tar.gz", hash = "sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a", size = 145755, upload-time = "2026-03-04T14:17:32.664Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/5e/5958555e09635d09b75de3c4f8b9cae7335ca545d77392ffe7331534c402/opentelemetry_semantic_conventions-0.60b1-py3-none-any.whl", hash = "sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb", size = 219982, upload-time = "2025-12-11T13:32:36.955Z" }, + { url = "https://files.pythonhosted.org/packages/b2/37/cc6a55e448deaa9b27377d087da8615a3416d8ad523d5960b78dbeadd02a/opentelemetry_semantic_conventions-0.61b0-py3-none-any.whl", hash = "sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2", size = 231621, upload-time = "2026-03-04T14:17:19.33Z" }, ] [[package]] @@ -1642,83 +1706,83 @@ wheels = [ [[package]] name = "orjson" -version = "3.11.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/45/b268004f745ede84e5798b48ee12b05129d19235d0e15267aa57dcdb400b/orjson-3.11.7.tar.gz", hash = "sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49", size = 6144992, upload-time = "2026-02-02T15:38:49.29Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1a/a373746fa6d0e116dd9e54371a7b54622c44d12296d5d0f3ad5e3ff33490/orjson-3.11.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a02c833f38f36546ba65a452127633afce4cf0dd7296b753d3bb54e55e5c0174", size = 229140, upload-time = "2026-02-02T15:37:06.082Z" }, - { url = "https://files.pythonhosted.org/packages/52/a2/fa129e749d500f9b183e8a3446a193818a25f60261e9ce143ad61e975208/orjson-3.11.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b63c6e6738d7c3470ad01601e23376aa511e50e1f3931395b9f9c722406d1a67", size = 128670, upload-time = "2026-02-02T15:37:08.002Z" }, - { url = "https://files.pythonhosted.org/packages/08/93/1e82011cd1e0bd051ef9d35bed1aa7fb4ea1f0a055dc2c841b46b43a9ebd/orjson-3.11.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:043d3006b7d32c7e233b8cfb1f01c651013ea079e08dcef7189a29abd8befe11", size = 123832, upload-time = "2026-02-02T15:37:09.191Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d8/a26b431ef962c7d55736674dddade876822f3e33223c1f47a36879350d04/orjson-3.11.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57036b27ac8a25d81112eb0cc9835cd4833c5b16e1467816adc0015f59e870dc", size = 129171, upload-time = "2026-02-02T15:37:11.112Z" }, - { url = "https://files.pythonhosted.org/packages/a7/19/f47819b84a580f490da260c3ee9ade214cf4cf78ac9ce8c1c758f80fdfc9/orjson-3.11.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:733ae23ada68b804b222c44affed76b39e30806d38660bf1eb200520d259cc16", size = 141967, upload-time = "2026-02-02T15:37:12.282Z" }, - { url = "https://files.pythonhosted.org/packages/5b/cd/37ece39a0777ba077fdcdbe4cccae3be8ed00290c14bf8afdc548befc260/orjson-3.11.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fdfad2093bdd08245f2e204d977facd5f871c88c4a71230d5bcbd0e43bf6222", size = 130991, upload-time = "2026-02-02T15:37:13.465Z" }, - { url = "https://files.pythonhosted.org/packages/8f/ed/f2b5d66aa9b6b5c02ff5f120efc7b38c7c4962b21e6be0f00fd99a5c348e/orjson-3.11.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cededd6738e1c153530793998e31c05086582b08315db48ab66649768f326baa", size = 133674, upload-time = "2026-02-02T15:37:14.694Z" }, - { url = "https://files.pythonhosted.org/packages/c4/6e/baa83e68d1aa09fa8c3e5b2c087d01d0a0bd45256de719ed7bc22c07052d/orjson-3.11.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:14f440c7268c8f8633d1b3d443a434bd70cb15686117ea6beff8fdc8f5917a1e", size = 138722, upload-time = "2026-02-02T15:37:16.501Z" }, - { url = "https://files.pythonhosted.org/packages/0c/47/7f8ef4963b772cd56999b535e553f7eb5cd27e9dd6c049baee6f18bfa05d/orjson-3.11.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3a2479753bbb95b0ebcf7969f562cdb9668e6d12416a35b0dda79febf89cdea2", size = 409056, upload-time = "2026-02-02T15:37:17.895Z" }, - { url = "https://files.pythonhosted.org/packages/38/eb/2df104dd2244b3618f25325a656f85cc3277f74bbd91224752410a78f3c7/orjson-3.11.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:71924496986275a737f38e3f22b4e0878882b3f7a310d2ff4dc96e812789120c", size = 144196, upload-time = "2026-02-02T15:37:19.349Z" }, - { url = "https://files.pythonhosted.org/packages/b6/2a/ee41de0aa3a6686598661eae2b4ebdff1340c65bfb17fcff8b87138aab21/orjson-3.11.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4a9eefdc70bf8bf9857f0290f973dec534ac84c35cd6a7f4083be43e7170a8f", size = 134979, upload-time = "2026-02-02T15:37:20.906Z" }, - { url = "https://files.pythonhosted.org/packages/4c/fa/92fc5d3d402b87a8b28277a9ed35386218a6a5287c7fe5ee9b9f02c53fb2/orjson-3.11.7-cp310-cp310-win32.whl", hash = "sha256:ae9e0b37a834cef7ce8f99de6498f8fad4a2c0bf6bfc3d02abd8ed56aa15b2de", size = 127968, upload-time = "2026-02-02T15:37:23.178Z" }, - { url = "https://files.pythonhosted.org/packages/07/29/a576bf36d73d60df06904d3844a9df08e25d59eba64363aaf8ec2f9bff41/orjson-3.11.7-cp310-cp310-win_amd64.whl", hash = "sha256:d772afdb22555f0c58cfc741bdae44180122b3616faa1ecadb595cd526e4c993", size = 125128, upload-time = "2026-02-02T15:37:24.329Z" }, - { url = "https://files.pythonhosted.org/packages/37/02/da6cb01fc6087048d7f61522c327edf4250f1683a58a839fdcc435746dd5/orjson-3.11.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9487abc2c2086e7c8eb9a211d2ce8855bae0e92586279d0d27b341d5ad76c85c", size = 228664, upload-time = "2026-02-02T15:37:25.542Z" }, - { url = "https://files.pythonhosted.org/packages/c1/c2/5885e7a5881dba9a9af51bc564e8967225a642b3e03d089289a35054e749/orjson-3.11.7-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:79cacb0b52f6004caf92405a7e1f11e6e2de8bdf9019e4f76b44ba045125cd6b", size = 125344, upload-time = "2026-02-02T15:37:26.92Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1d/4e7688de0a92d1caf600dfd5fb70b4c5bfff51dfa61ac555072ef2d0d32a/orjson-3.11.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2e85fe4698b6a56d5e2ebf7ae87544d668eb6bde1ad1226c13f44663f20ec9e", size = 128404, upload-time = "2026-02-02T15:37:28.108Z" }, - { url = "https://files.pythonhosted.org/packages/2f/b2/ec04b74ae03a125db7bd69cffd014b227b7f341e3261bf75b5eb88a1aa92/orjson-3.11.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8d14b71c0b12963fe8a62aac87119f1afdf4cb88a400f61ca5ae581449efcb5", size = 123677, upload-time = "2026-02-02T15:37:30.287Z" }, - { url = "https://files.pythonhosted.org/packages/4c/69/f95bdf960605f08f827f6e3291fe243d8aa9c5c9ff017a8d7232209184c3/orjson-3.11.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91c81ef070c8f3220054115e1ef468b1c9ce8497b4e526cb9f68ab4dc0a7ac62", size = 128950, upload-time = "2026-02-02T15:37:31.595Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1b/de59c57bae1d148ef298852abd31909ac3089cff370dfd4cd84cc99cbc42/orjson-3.11.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:411ebaf34d735e25e358a6d9e7978954a9c9d58cfb47bc6683cdc3964cd2f910", size = 141756, upload-time = "2026-02-02T15:37:32.985Z" }, - { url = "https://files.pythonhosted.org/packages/ee/9e/9decc59f4499f695f65c650f6cfa6cd4c37a3fbe8fa235a0a3614cb54386/orjson-3.11.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a16bcd08ab0bcdfc7e8801d9c4a9cc17e58418e4d48ddc6ded4e9e4b1a94062b", size = 130812, upload-time = "2026-02-02T15:37:34.204Z" }, - { url = "https://files.pythonhosted.org/packages/28/e6/59f932bcabd1eac44e334fe8e3281a92eacfcb450586e1f4bde0423728d8/orjson-3.11.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c0b51672e466fd7e56230ffbae7f1639e18d0ce023351fb75da21b71bc2c960", size = 133444, upload-time = "2026-02-02T15:37:35.446Z" }, - { url = "https://files.pythonhosted.org/packages/f1/36/b0f05c0eaa7ca30bc965e37e6a2956b0d67adb87a9872942d3568da846ae/orjson-3.11.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:136dcd6a2e796dfd9ffca9fc027d778567b0b7c9968d092842d3c323cef88aa8", size = 138609, upload-time = "2026-02-02T15:37:36.657Z" }, - { url = "https://files.pythonhosted.org/packages/b8/03/58ec7d302b8d86944c60c7b4b82975d5161fcce4c9bc8c6cb1d6741b6115/orjson-3.11.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:7ba61079379b0ae29e117db13bda5f28d939766e410d321ec1624afc6a0b0504", size = 408918, upload-time = "2026-02-02T15:37:38.076Z" }, - { url = "https://files.pythonhosted.org/packages/06/3a/868d65ef9a8b99be723bd510de491349618abd9f62c826cf206d962db295/orjson-3.11.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0527a4510c300e3b406591b0ba69b5dc50031895b0a93743526a3fc45f59d26e", size = 143998, upload-time = "2026-02-02T15:37:39.706Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c7/1e18e1c83afe3349f4f6dc9e14910f0ae5f82eac756d1412ea4018938535/orjson-3.11.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a709e881723c9b18acddcfb8ba357322491ad553e277cf467e1e7e20e2d90561", size = 134802, upload-time = "2026-02-02T15:37:41.002Z" }, - { url = "https://files.pythonhosted.org/packages/d4/0b/ccb7ee1a65b37e8eeb8b267dc953561d72370e85185e459616d4345bab34/orjson-3.11.7-cp311-cp311-win32.whl", hash = "sha256:c43b8b5bab288b6b90dac410cca7e986a4fa747a2e8f94615aea407da706980d", size = 127828, upload-time = "2026-02-02T15:37:42.241Z" }, - { url = "https://files.pythonhosted.org/packages/af/9e/55c776dffda3f381e0f07d010a4f5f3902bf48eaba1bb7684d301acd4924/orjson-3.11.7-cp311-cp311-win_amd64.whl", hash = "sha256:6543001328aa857187f905308a028935864aefe9968af3848401b6fe80dbb471", size = 124941, upload-time = "2026-02-02T15:37:43.444Z" }, - { url = "https://files.pythonhosted.org/packages/aa/8e/424a620fa7d263b880162505fb107ef5e0afaa765b5b06a88312ac291560/orjson-3.11.7-cp311-cp311-win_arm64.whl", hash = "sha256:1ee5cc7160a821dfe14f130bc8e63e7611051f964b463d9e2a3a573204446a4d", size = 126245, upload-time = "2026-02-02T15:37:45.18Z" }, - { url = "https://files.pythonhosted.org/packages/80/bf/76f4f1665f6983385938f0e2a5d7efa12a58171b8456c252f3bae8a4cf75/orjson-3.11.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f", size = 228545, upload-time = "2026-02-02T15:37:46.376Z" }, - { url = "https://files.pythonhosted.org/packages/79/53/6c72c002cb13b5a978a068add59b25a8bdf2800ac1c9c8ecdb26d6d97064/orjson-3.11.7-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b", size = 125224, upload-time = "2026-02-02T15:37:47.697Z" }, - { url = "https://files.pythonhosted.org/packages/2c/83/10e48852865e5dd151bdfe652c06f7da484578ed02c5fca938e3632cb0b8/orjson-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a", size = 128154, upload-time = "2026-02-02T15:37:48.954Z" }, - { url = "https://files.pythonhosted.org/packages/6e/52/a66e22a2b9abaa374b4a081d410edab6d1e30024707b87eab7c734afe28d/orjson-3.11.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10", size = 123548, upload-time = "2026-02-02T15:37:50.187Z" }, - { url = "https://files.pythonhosted.org/packages/de/38/605d371417021359f4910c496f764c48ceb8997605f8c25bf1dfe58c0ebe/orjson-3.11.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa", size = 129000, upload-time = "2026-02-02T15:37:51.426Z" }, - { url = "https://files.pythonhosted.org/packages/44/98/af32e842b0ffd2335c89714d48ca4e3917b42f5d6ee5537832e069a4b3ac/orjson-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8", size = 141686, upload-time = "2026-02-02T15:37:52.607Z" }, - { url = "https://files.pythonhosted.org/packages/96/0b/fc793858dfa54be6feee940c1463370ece34b3c39c1ca0aa3845f5ba9892/orjson-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f", size = 130812, upload-time = "2026-02-02T15:37:53.944Z" }, - { url = "https://files.pythonhosted.org/packages/dc/91/98a52415059db3f374757d0b7f0f16e3b5cd5976c90d1c2b56acaea039e6/orjson-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad", size = 133440, upload-time = "2026-02-02T15:37:55.615Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b6/cb540117bda61791f46381f8c26c8f93e802892830a6055748d3bb1925ab/orjson-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867", size = 138386, upload-time = "2026-02-02T15:37:56.814Z" }, - { url = "https://files.pythonhosted.org/packages/63/1a/50a3201c334a7f17c231eee5f841342190723794e3b06293f26e7cf87d31/orjson-3.11.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d", size = 408853, upload-time = "2026-02-02T15:37:58.291Z" }, - { url = "https://files.pythonhosted.org/packages/87/cd/8de1c67d0be44fdc22701e5989c0d015a2adf391498ad42c4dc589cd3013/orjson-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab", size = 144130, upload-time = "2026-02-02T15:38:00.163Z" }, - { url = "https://files.pythonhosted.org/packages/0f/fe/d605d700c35dd55f51710d159fc54516a280923cd1b7e47508982fbb387d/orjson-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2", size = 134818, upload-time = "2026-02-02T15:38:01.507Z" }, - { url = "https://files.pythonhosted.org/packages/e4/e4/15ecc67edb3ddb3e2f46ae04475f2d294e8b60c1825fbe28a428b93b3fbd/orjson-3.11.7-cp312-cp312-win32.whl", hash = "sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f", size = 127923, upload-time = "2026-02-02T15:38:02.75Z" }, - { url = "https://files.pythonhosted.org/packages/34/70/2e0855361f76198a3965273048c8e50a9695d88cd75811a5b46444895845/orjson-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74", size = 125007, upload-time = "2026-02-02T15:38:04.032Z" }, - { url = "https://files.pythonhosted.org/packages/68/40/c2051bd19fc467610fed469dc29e43ac65891571138f476834ca192bc290/orjson-3.11.7-cp312-cp312-win_arm64.whl", hash = "sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5", size = 126089, upload-time = "2026-02-02T15:38:05.297Z" }, - { url = "https://files.pythonhosted.org/packages/89/25/6e0e52cac5aab51d7b6dcd257e855e1dec1c2060f6b28566c509b4665f62/orjson-3.11.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733", size = 228390, upload-time = "2026-02-02T15:38:06.8Z" }, - { url = "https://files.pythonhosted.org/packages/a5/29/a77f48d2fc8a05bbc529e5ff481fb43d914f9e383ea2469d4f3d51df3d00/orjson-3.11.7-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4", size = 125189, upload-time = "2026-02-02T15:38:08.181Z" }, - { url = "https://files.pythonhosted.org/packages/89/25/0a16e0729a0e6a1504f9d1a13cdd365f030068aab64cec6958396b9969d7/orjson-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785", size = 128106, upload-time = "2026-02-02T15:38:09.41Z" }, - { url = "https://files.pythonhosted.org/packages/66/da/a2e505469d60666a05ab373f1a6322eb671cb2ba3a0ccfc7d4bc97196787/orjson-3.11.7-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539", size = 123363, upload-time = "2026-02-02T15:38:10.73Z" }, - { url = "https://files.pythonhosted.org/packages/23/bf/ed73f88396ea35c71b38961734ea4a4746f7ca0768bf28fd551d37e48dd0/orjson-3.11.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1", size = 129007, upload-time = "2026-02-02T15:38:12.138Z" }, - { url = "https://files.pythonhosted.org/packages/73/3c/b05d80716f0225fc9008fbf8ab22841dcc268a626aa550561743714ce3bf/orjson-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1", size = 141667, upload-time = "2026-02-02T15:38:13.398Z" }, - { url = "https://files.pythonhosted.org/packages/61/e8/0be9b0addd9bf86abfc938e97441dcd0375d494594b1c8ad10fe57479617/orjson-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705", size = 130832, upload-time = "2026-02-02T15:38:14.698Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ec/c68e3b9021a31d9ec15a94931db1410136af862955854ed5dd7e7e4f5bff/orjson-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace", size = 133373, upload-time = "2026-02-02T15:38:16.109Z" }, - { url = "https://files.pythonhosted.org/packages/d2/45/f3466739aaafa570cc8e77c6dbb853c48bf56e3b43738020e2661e08b0ac/orjson-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b", size = 138307, upload-time = "2026-02-02T15:38:17.453Z" }, - { url = "https://files.pythonhosted.org/packages/e1/84/9f7f02288da1ffb31405c1be07657afd1eecbcb4b64ee2817b6fe0f785fa/orjson-3.11.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157", size = 408695, upload-time = "2026-02-02T15:38:18.831Z" }, - { url = "https://files.pythonhosted.org/packages/18/07/9dd2f0c0104f1a0295ffbe912bc8d63307a539b900dd9e2c48ef7810d971/orjson-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3", size = 144099, upload-time = "2026-02-02T15:38:20.28Z" }, - { url = "https://files.pythonhosted.org/packages/a5/66/857a8e4a3292e1f7b1b202883bcdeb43a91566cf59a93f97c53b44bd6801/orjson-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223", size = 134806, upload-time = "2026-02-02T15:38:22.186Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5b/6ebcf3defc1aab3a338ca777214966851e92efb1f30dc7fc8285216e6d1b/orjson-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3", size = 127914, upload-time = "2026-02-02T15:38:23.511Z" }, - { url = "https://files.pythonhosted.org/packages/00/04/c6f72daca5092e3117840a1b1e88dfc809cc1470cf0734890d0366b684a1/orjson-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757", size = 124986, upload-time = "2026-02-02T15:38:24.836Z" }, - { url = "https://files.pythonhosted.org/packages/03/ba/077a0f6f1085d6b806937246860fafbd5b17f3919c70ee3f3d8d9c713f38/orjson-3.11.7-cp313-cp313-win_arm64.whl", hash = "sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539", size = 126045, upload-time = "2026-02-02T15:38:26.216Z" }, - { url = "https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0", size = 228391, upload-time = "2026-02-02T15:38:27.757Z" }, - { url = "https://files.pythonhosted.org/packages/46/19/e40f6225da4d3aa0c8dc6e5219c5e87c2063a560fe0d72a88deb59776794/orjson-3.11.7-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0", size = 125188, upload-time = "2026-02-02T15:38:29.241Z" }, - { url = "https://files.pythonhosted.org/packages/9d/7e/c4de2babef2c0817fd1f048fd176aa48c37bec8aef53d2fa932983032cce/orjson-3.11.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6", size = 128097, upload-time = "2026-02-02T15:38:30.618Z" }, - { url = "https://files.pythonhosted.org/packages/eb/74/233d360632bafd2197f217eee7fb9c9d0229eac0c18128aee5b35b0014fe/orjson-3.11.7-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf", size = 123364, upload-time = "2026-02-02T15:38:32.363Z" }, - { url = "https://files.pythonhosted.org/packages/79/51/af79504981dd31efe20a9e360eb49c15f06df2b40e7f25a0a52d9ae888e8/orjson-3.11.7-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5", size = 129076, upload-time = "2026-02-02T15:38:33.68Z" }, - { url = "https://files.pythonhosted.org/packages/67/e2/da898eb68b72304f8de05ca6715870d09d603ee98d30a27e8a9629abc64b/orjson-3.11.7-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892", size = 141705, upload-time = "2026-02-02T15:38:34.989Z" }, - { url = "https://files.pythonhosted.org/packages/c5/89/15364d92acb3d903b029e28d834edb8780c2b97404cbf7929aa6b9abdb24/orjson-3.11.7-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e", size = 130855, upload-time = "2026-02-02T15:38:36.379Z" }, - { url = "https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1", size = 133386, upload-time = "2026-02-02T15:38:37.704Z" }, - { url = "https://files.pythonhosted.org/packages/b9/0e/45e1dcf10e17d0924b7c9162f87ec7b4ca79e28a0548acf6a71788d3e108/orjson-3.11.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183", size = 138295, upload-time = "2026-02-02T15:38:39.096Z" }, - { url = "https://files.pythonhosted.org/packages/63/d7/4d2e8b03561257af0450f2845b91fbd111d7e526ccdf737267108075e0ba/orjson-3.11.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650", size = 408720, upload-time = "2026-02-02T15:38:40.634Z" }, - { url = "https://files.pythonhosted.org/packages/78/cf/d45343518282108b29c12a65892445fc51f9319dc3c552ceb51bb5905ed2/orjson-3.11.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141", size = 144152, upload-time = "2026-02-02T15:38:42.262Z" }, - { url = "https://files.pythonhosted.org/packages/a9/3a/d6001f51a7275aacd342e77b735c71fa04125a3f93c36fee4526bc8c654e/orjson-3.11.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2", size = 134814, upload-time = "2026-02-02T15:38:43.627Z" }, - { url = "https://files.pythonhosted.org/packages/1d/d3/f19b47ce16820cc2c480f7f1723e17f6d411b3a295c60c8ad3aa9ff1c96a/orjson-3.11.7-cp314-cp314-win32.whl", hash = "sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576", size = 127997, upload-time = "2026-02-02T15:38:45.06Z" }, - { url = "https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl", hash = "sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1", size = 124985, upload-time = "2026-02-02T15:38:46.388Z" }, - { url = "https://files.pythonhosted.org/packages/6f/1c/f2a8d8a1b17514660a614ce5f7aac74b934e69f5abc2700cc7ced882a009/orjson-3.11.7-cp314-cp314-win_arm64.whl", hash = "sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d", size = 126038, upload-time = "2026-02-02T15:38:47.703Z" }, +version = "3.11.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/1b/2024d06792d0779f9dbc51531b61c24f76c75b9f4ce05e6f3377a1814cea/orjson-3.11.8.tar.gz", hash = "sha256:96163d9cdc5a202703e9ad1b9ae757d5f0ca62f4fa0cc93d1f27b0e180cc404e", size = 5603832, upload-time = "2026-03-31T16:16:27.878Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/90/5d81f61fe3e4270da80c71442864c091cee3003cc8984c75f413fe742a07/orjson-3.11.8-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e6693ff90018600c72fd18d3d22fa438be26076cd3c823da5f63f7bab28c11cb", size = 229663, upload-time = "2026-03-31T16:14:30.708Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/85e06b0eb11de6fb424120fd5788a07035bd4c5e6bb7841ae9972a0526d1/orjson-3.11.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93de06bc920854552493c81f1f729fab7213b7db4b8195355db5fda02c7d1363", size = 132321, upload-time = "2026-03-31T16:14:32.317Z" }, + { url = "https://files.pythonhosted.org/packages/86/71/089338ee51b3132f050db0864a7df9bdd5e94c2a03820ab8a91e8f655618/orjson-3.11.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe0b8c83e0f36247fc9431ce5425a5d95f9b3a689133d494831bdbd6f0bceb13", size = 130658, upload-time = "2026-03-31T16:14:33.935Z" }, + { url = "https://files.pythonhosted.org/packages/10/0d/f39d8802345d0ad65f7fd4374b29b9b59f98656dc30f21ca5c773265b2f0/orjson-3.11.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d823831105c01f6c8029faf297633dbeb30271892bd430e9c24ceae3734744", size = 135708, upload-time = "2026-03-31T16:14:35.224Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b5/40aae576b3473511696dcffea84fde638b2b64774eb4dcb8b2c262729f8a/orjson-3.11.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60c0423f15abb6cf78f56dff00168a1b582f7a1c23f114036e2bfc697814d5f", size = 147047, upload-time = "2026-03-31T16:14:36.489Z" }, + { url = "https://files.pythonhosted.org/packages/7b/f0/778a84458d1fdaa634b2e572e51ce0b354232f580b2327e1f00a8d88c38c/orjson-3.11.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01928d0476b216ad2201823b0a74000440360cef4fed1912d297b8d84718f277", size = 133072, upload-time = "2026-03-31T16:14:37.715Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d3/1bbf2fc3ffcc4b829ade554b574af68cec898c9b5ad6420a923c75a073d3/orjson-3.11.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4a639049c44d36a6d1ae0f4a94b271605c745aee5647fa8ffaabcdc01b69a6", size = 133867, upload-time = "2026-03-31T16:14:39.356Z" }, + { url = "https://files.pythonhosted.org/packages/08/94/6413da22edc99a69a8d0c2e83bf42973b8aa94d83ef52a6d39ac85da00bc/orjson-3.11.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3222adff1e1ff0dce93c16146b93063a7793de6c43d52309ae321234cdaf0f4d", size = 142268, upload-time = "2026-03-31T16:14:40.972Z" }, + { url = "https://files.pythonhosted.org/packages/4a/5f/aa5dbaa6136d7ba55f5461ac2e885efc6e6349424a428927fd46d68f4396/orjson-3.11.8-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3223665349bbfb68da234acd9846955b1a0808cbe5520ff634bf253a4407009b", size = 424008, upload-time = "2026-03-31T16:14:42.637Z" }, + { url = "https://files.pythonhosted.org/packages/fa/aa/2c1962d108c7fe5e27aa03a354b378caf56d8eafdef15fd83dec081ce45a/orjson-3.11.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:61c9d357a59465736022d5d9ba06687afb7611dfb581a9d2129b77a6fcf78e59", size = 147942, upload-time = "2026-03-31T16:14:44.256Z" }, + { url = "https://files.pythonhosted.org/packages/47/d1/65f404f4c47eb1b0b4476f03ec838cac0c4aa933920ff81e5dda4dee14e7/orjson-3.11.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58fb9b17b4472c7b1dcf1a54583629e62e23779b2331052f09a9249edf81675b", size = 136640, upload-time = "2026-03-31T16:14:45.884Z" }, + { url = "https://files.pythonhosted.org/packages/90/5f/7b784aea98bdb125a2f2da7c27d6c2d2f6d943d96ef0278bae596d563f85/orjson-3.11.8-cp310-cp310-win32.whl", hash = "sha256:b43dc2a391981d36c42fa57747a49dae793ef1d2e43898b197925b5534abd10a", size = 132066, upload-time = "2026-03-31T16:14:47.397Z" }, + { url = "https://files.pythonhosted.org/packages/92/ec/2e284af8d6c9478df5ef938917743f61d68f4c70d17f1b6e82f7e3b8dba1/orjson-3.11.8-cp310-cp310-win_amd64.whl", hash = "sha256:c98121237fea2f679480765abd566f7713185897f35c9e6c2add7e3a9900eb61", size = 127609, upload-time = "2026-03-31T16:14:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/67/41/5aa7fa3b0f4dc6b47dcafc3cea909299c37e40e9972feabc8b6a74e2730d/orjson-3.11.8-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:003646067cc48b7fcab2ae0c562491c9b5d2cbd43f1e5f16d98fd118c5522d34", size = 229229, upload-time = "2026-03-31T16:14:50.424Z" }, + { url = "https://files.pythonhosted.org/packages/0a/d7/57e7f2458e0a2c41694f39fc830030a13053a84f837a5b73423dca1f0938/orjson-3.11.8-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ed193ce51d77a3830cad399a529cd4ef029968761f43ddc549e1bc62b40d88f8", size = 128871, upload-time = "2026-03-31T16:14:51.888Z" }, + { url = "https://files.pythonhosted.org/packages/53/4a/e0fdb9430983e6c46e0299559275025075568aad5d21dd606faee3703924/orjson-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30491bc4f862aa15744b9738517454f1e46e56c972a2be87d70d727d5b2a8f8", size = 132104, upload-time = "2026-03-31T16:14:53.142Z" }, + { url = "https://files.pythonhosted.org/packages/08/4a/2025a60ff3f5c8522060cda46612d9b1efa653de66ed2908591d8d82f22d/orjson-3.11.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eda5b8b6be91d3f26efb7dc6e5e68ee805bc5617f65a328587b35255f138bf4", size = 130483, upload-time = "2026-03-31T16:14:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3c/b9cde05bdc7b2385c66014e0620627da638d3d04e4954416ab48c31196c5/orjson-3.11.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee8db7bfb6fe03581bbab54d7c4124a6dd6a7f4273a38f7267197890f094675f", size = 135481, upload-time = "2026-03-31T16:14:55.901Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f2/a8238e7734de7cb589fed319857a8025d509c89dc52fdcc88f39c6d03d5a/orjson-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8b5231de76c528a46b57010bbd83fb51e056aa0220a372fd5065e978406f1c", size = 146819, upload-time = "2026-03-31T16:14:57.548Z" }, + { url = "https://files.pythonhosted.org/packages/db/10/dbf1e2a3cafea673b1b4350e371877b759060d6018a998643b7040e5de48/orjson-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58a4a208a6fbfdb7a7327b8f201c6014f189f721fd55d047cafc4157af1bc62a", size = 132846, upload-time = "2026-03-31T16:14:58.91Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c", size = 133580, upload-time = "2026-03-31T16:15:00.519Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a6/c08c589a9aad0cb46c4831d17de212a2b6901f9d976814321ff8e69e8785/orjson-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0022bb50f90da04b009ce32c512dc1885910daa7cb10b7b0cba4505b16db82a8", size = 142042, upload-time = "2026-03-31T16:15:01.906Z" }, + { url = "https://files.pythonhosted.org/packages/5c/cc/2f78ea241d52b717d2efc38878615fe80425bf2beb6e68c984dde257a766/orjson-3.11.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ff51f9d657d1afb6f410cb435792ce4e1fe427aab23d2fcd727a2876e21d4cb6", size = 423845, upload-time = "2026-03-31T16:15:03.703Z" }, + { url = "https://files.pythonhosted.org/packages/70/07/c17dcf05dd8045457538428a983bf1f1127928df5bf328cb24d2b7cddacb/orjson-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6dbe9a97bdb4d8d9d5367b52a7c32549bba70b2739c58ef74a6964a6d05ae054", size = 147729, upload-time = "2026-03-31T16:15:05.203Z" }, + { url = "https://files.pythonhosted.org/packages/90/6c/0fb6e8a24e682e0958d71711ae6f39110e4b9cd8cab1357e2a89cb8e1951/orjson-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5c370674ebabe16c6ccac33ff80c62bf8a6e59439f5e9d40c1f5ab8fd2215b7", size = 136425, upload-time = "2026-03-31T16:15:07.052Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/4d3cc3a3d616035beb51b24a09bb872942dc452cf2df0c1d11ab35046d9f/orjson-3.11.8-cp311-cp311-win32.whl", hash = "sha256:0e32f7154299f42ae66f13488963269e5eccb8d588a65bc839ed986919fc9fac", size = 131870, upload-time = "2026-03-31T16:15:08.678Z" }, + { url = "https://files.pythonhosted.org/packages/13/26/9fe70f81d16b702f8c3a775e8731b50ad91d22dacd14c7599b60a0941cd1/orjson-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:25e0c672a2e32348d2eb33057b41e754091f2835f87222e4675b796b92264f06", size = 127440, upload-time = "2026-03-31T16:15:09.994Z" }, + { url = "https://files.pythonhosted.org/packages/e8/c6/b038339f4145efd2859c1ca53097a52c0bb9cbdd24f947ebe146da1ad067/orjson-3.11.8-cp311-cp311-win_arm64.whl", hash = "sha256:9185589c1f2a944c17e26c9925dcdbc2df061cc4a145395c57f0c51f9b5dbfcd", size = 127399, upload-time = "2026-03-31T16:15:11.412Z" }, + { url = "https://files.pythonhosted.org/packages/01/f6/8d58b32ab32d9215973a1688aebd098252ee8af1766c0e4e36e7831f0295/orjson-3.11.8-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1cd0b77e77c95758f8e1100139844e99f3ccc87e71e6fc8e1c027e55807c549f", size = 229233, upload-time = "2026-03-31T16:15:12.762Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8b/2ffe35e71f6b92622e8ea4607bf33ecf7dfb51b3619dcfabfd36cbe2d0a5/orjson-3.11.8-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:6a3d159d5ffa0e3961f353c4b036540996bf8b9697ccc38261c0eac1fd3347a6", size = 128772, upload-time = "2026-03-31T16:15:14.237Z" }, + { url = "https://files.pythonhosted.org/packages/27/d2/1f8682ae50d5c6897a563cb96bc106da8c9cb5b7b6e81a52e4cc086679b9/orjson-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76070a76e9c5ae661e2d9848f216980d8d533e0f8143e6ed462807b242e3c5e8", size = 131946, upload-time = "2026-03-31T16:15:15.607Z" }, + { url = "https://files.pythonhosted.org/packages/52/4b/5500f76f0eece84226e0689cb48dcde081104c2fa6e2483d17ca13685ffb/orjson-3.11.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54153d21520a71a4c82a0dbb4523e468941d549d221dc173de0f019678cf3813", size = 130368, upload-time = "2026-03-31T16:15:17.066Z" }, + { url = "https://files.pythonhosted.org/packages/da/4e/58b927e08fbe9840e6c920d9e299b051ea667463b1f39a56e668669f8508/orjson-3.11.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:469ac2125611b7c5741a0b3798cd9e5786cbad6345f9f400c77212be89563bec", size = 135540, upload-time = "2026-03-31T16:15:18.404Z" }, + { url = "https://files.pythonhosted.org/packages/56/7c/ba7cb871cba1bcd5cd02ee34f98d894c6cea96353ad87466e5aef2429c60/orjson-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14778ffd0f6896aa613951a7fbf4690229aa7a543cb2bfbe9f358e08aafa9546", size = 146877, upload-time = "2026-03-31T16:15:19.833Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/eb9c25fc1386696c6a342cd361c306452c75e0b55e86ad602dd4827a7fd7/orjson-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea56a955056a6d6c550cf18b3348656a9d9a4f02e2d0c02cabf3c73f1055d506", size = 132837, upload-time = "2026-03-31T16:15:21.282Z" }, + { url = "https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f", size = 133624, upload-time = "2026-03-31T16:15:22.641Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/90048793db94ee4b2fcec4ac8e5ddb077367637d6650be896b3494b79bb7/orjson-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b48e274f8824567d74e2158199e269597edf00823a1b12b63d48462bbf5123e", size = 141904, upload-time = "2026-03-31T16:15:24.435Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" }, + { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" }, + { url = "https://files.pythonhosted.org/packages/be/c9/135194a02ab76b04ed9a10f68624b7ebd238bbe55548878b11ff15a0f352/orjson-3.11.8-cp312-cp312-win32.whl", hash = "sha256:e0950ed1bcb9893f4293fd5c5a7ee10934fbf82c4101c70be360db23ce24b7d2", size = 131966, upload-time = "2026-03-31T16:15:31.687Z" }, + { url = "https://files.pythonhosted.org/packages/ed/9a/9796f8fbe3cf30ce9cb696748dbb535e5c87be4bf4fe2e9ca498ef1fa8cf/orjson-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:3cf17c141617b88ced4536b2135c552490f07799f6ad565948ea07bef0dcb9a6", size = 127441, upload-time = "2026-03-31T16:15:33.333Z" }, + { url = "https://files.pythonhosted.org/packages/cc/47/5aaf54524a7a4a0dd09dd778f3fa65dd2108290615b652e23d944152bc8e/orjson-3.11.8-cp312-cp312-win_arm64.whl", hash = "sha256:48854463b0572cc87dac7d981aa72ed8bf6deedc0511853dc76b8bbd5482d36d", size = 127364, upload-time = "2026-03-31T16:15:34.748Z" }, + { url = "https://files.pythonhosted.org/packages/66/7f/95fba509bb2305fab0073558f1e8c3a2ec4b2afe58ed9fcb7d3b8beafe94/orjson-3.11.8-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3f23426851d98478c8970da5991f84784a76682213cd50eb73a1da56b95239dc", size = 229180, upload-time = "2026-03-31T16:15:36.426Z" }, + { url = "https://files.pythonhosted.org/packages/f6/9d/b237215c743ca073697d759b5503abd2cb8a0d7b9c9e21f524bcf176ab66/orjson-3.11.8-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:ebaed4cef74a045b83e23537b52ef19a367c7e3f536751e355a2a394f8648559", size = 128754, upload-time = "2026-03-31T16:15:38.049Z" }, + { url = "https://files.pythonhosted.org/packages/42/3d/27d65b6d11e63f133781425f132807aef793ed25075fec686fc8e46dd528/orjson-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97c8f5d3b62380b70c36ffacb2a356b7c6becec86099b177f73851ba095ef623", size = 131877, upload-time = "2026-03-31T16:15:39.484Z" }, + { url = "https://files.pythonhosted.org/packages/dd/cc/faee30cd8f00421999e40ef0eba7332e3a625ce91a58200a2f52c7fef235/orjson-3.11.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:436c4922968a619fb7fef1ccd4b8b3a76c13b67d607073914d675026e911a65c", size = 130361, upload-time = "2026-03-31T16:15:41.274Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bb/a6c55896197f97b6d4b4e7c7fd77e7235517c34f5d6ad5aadd43c54c6d7c/orjson-3.11.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ab359aff0436d80bfe8a23b46b5fea69f1e18aaf1760a709b4787f1318b317f", size = 135521, upload-time = "2026-03-31T16:15:42.758Z" }, + { url = "https://files.pythonhosted.org/packages/9c/7c/ca3a3525aa32ff636ebb1778e77e3587b016ab2edb1b618b36ba96f8f2c0/orjson-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f89b6d0b3a8d81e1929d3ab3d92bbc225688bd80a770c49432543928fe09ac55", size = 146862, upload-time = "2026-03-31T16:15:44.341Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0c/18a9d7f18b5edd37344d1fd5be17e94dc652c67826ab749c6e5948a78112/orjson-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c009e7a2ca9ad0ed1376ce20dd692146a5d9fe4310848904b6b4fee5c5c137", size = 132847, upload-time = "2026-03-31T16:15:46.368Z" }, + { url = "https://files.pythonhosted.org/packages/23/91/7e722f352ad67ca573cee44de2a58fb810d0f4eb4e33276c6a557979fd8a/orjson-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b895b781b3e395c067129d8551655642dfe9437273211d5404e87ac752b53", size = 133637, upload-time = "2026-03-31T16:15:48.123Z" }, + { url = "https://files.pythonhosted.org/packages/af/04/32845ce13ac5bd1046ddb02ac9432ba856cc35f6d74dde95864fe0ad5523/orjson-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:88006eda83858a9fdf73985ce3804e885c2befb2f506c9a3723cdeb5a2880e3e", size = 141906, upload-time = "2026-03-31T16:15:49.626Z" }, + { url = "https://files.pythonhosted.org/packages/02/5e/c551387ddf2d7106d9039369862245c85738b828844d13b99ccb8d61fd06/orjson-3.11.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:55120759e61309af7fcf9e961c6f6af3dde5921cdb3ee863ef63fd9db126cae6", size = 423722, upload-time = "2026-03-31T16:15:51.176Z" }, + { url = "https://files.pythonhosted.org/packages/00/a3/ecfe62434096f8a794d4976728cb59bcfc4a643977f21c2040545d37eb4c/orjson-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:98bdc6cb889d19bed01de46e67574a2eab61f5cc6b768ed50e8ac68e9d6ffab6", size = 147801, upload-time = "2026-03-31T16:15:52.939Z" }, + { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" }, + { url = "https://files.pythonhosted.org/packages/01/d6/6dde4f31842d87099238f1f07b459d24edc1a774d20687187443ab044191/orjson-3.11.8-cp313-cp313-win32.whl", hash = "sha256:01c4e5a6695dc09098f2e6468a251bc4671c50922d4d745aff1a0a33a0cf5b8d", size = 131956, upload-time = "2026-03-31T16:15:56.081Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f9/4e494a56e013db957fb77186b818b916d4695b8fa2aa612364974160e91b/orjson-3.11.8-cp313-cp313-win_amd64.whl", hash = "sha256:c154a35dd1330707450bb4d4e7dd1f17fa6f42267a40c1e8a1daa5e13719b4b8", size = 127410, upload-time = "2026-03-31T16:15:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/57/7f/803203d00d6edb6e9e7eef421d4e1adbb5ea973e40b3533f3cfd9aeb374e/orjson-3.11.8-cp313-cp313-win_arm64.whl", hash = "sha256:4861bde57f4d253ab041e374f44023460e60e71efaa121f3c5f0ed457c3a701e", size = 127338, upload-time = "2026-03-31T16:15:59.106Z" }, + { url = "https://files.pythonhosted.org/packages/6d/35/b01910c3d6b85dc882442afe5060cbf719c7d1fc85749294beda23d17873/orjson-3.11.8-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ec795530a73c269a55130498842aaa762e4a939f6ce481a7e986eeaa790e9da4", size = 229171, upload-time = "2026-03-31T16:16:00.651Z" }, + { url = "https://files.pythonhosted.org/packages/c2/56/c9ec97bd11240abef39b9e5d99a15462809c45f677420fd148a6c5e6295e/orjson-3.11.8-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:c492a0e011c0f9066e9ceaa896fbc5b068c54d365fea5f3444b697ee01bc8625", size = 128746, upload-time = "2026-03-31T16:16:02.673Z" }, + { url = "https://files.pythonhosted.org/packages/3b/e4/66d4f30a90de45e2f0cbd9623588e8ae71eef7679dbe2ae954ed6d66a41f/orjson-3.11.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:883206d55b1bd5f5679ad5e6ddd3d1a5e3cac5190482927fdb8c78fb699193b5", size = 131867, upload-time = "2026-03-31T16:16:04.342Z" }, + { url = "https://files.pythonhosted.org/packages/19/30/2a645fc9286b928675e43fa2a3a16fb7b6764aa78cc719dc82141e00f30b/orjson-3.11.8-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5774c1fdcc98b2259800b683b19599c133baeb11d60033e2095fd9d4667b82db", size = 124664, upload-time = "2026-03-31T16:16:05.837Z" }, + { url = "https://files.pythonhosted.org/packages/db/44/77b9a86d84a28d52ba3316d77737f6514e17118119ade3f91b639e859029/orjson-3.11.8-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7381c83dd3d4a6347e6635950aa448f54e7b8406a27c7ecb4a37e9f1ae08b", size = 129701, upload-time = "2026-03-31T16:16:07.407Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ea/eff3d9bfe47e9bc6969c9181c58d9f71237f923f9c86a2d2f490cd898c82/orjson-3.11.8-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14439063aebcb92401c11afc68ee4e407258d2752e62d748b6942dad20d2a70d", size = 141202, upload-time = "2026-03-31T16:16:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/52/c8/90d4b4c60c84d62068d0cf9e4d8f0a4e05e76971d133ac0c60d818d4db20/orjson-3.11.8-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa72e71977bff96567b0f500fc5bfd2fdf915f34052c782a4c6ebbdaa97aa858", size = 127194, upload-time = "2026-03-31T16:16:11.02Z" }, + { url = "https://files.pythonhosted.org/packages/8d/c7/ea9e08d1f0ba981adffb629811148b44774d935171e7b3d780ae43c4c254/orjson-3.11.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7679bc2f01bb0d219758f1a5f87bb7c8a81c0a186824a393b366876b4948e14f", size = 133639, upload-time = "2026-03-31T16:16:13.434Z" }, + { url = "https://files.pythonhosted.org/packages/6c/8c/ddbbfd6ba59453c8fc7fe1d0e5983895864e264c37481b2a791db635f046/orjson-3.11.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14f7b8fcb35ef403b42fa5ecfa4ed032332a91f3dc7368fbce4184d59e1eae0d", size = 141914, upload-time = "2026-03-31T16:16:14.955Z" }, + { url = "https://files.pythonhosted.org/packages/4e/31/dbfbefec9df060d34ef4962cd0afcb6fa7a9ec65884cb78f04a7859526c3/orjson-3.11.8-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c2bdf7b2facc80b5e34f48a2d557727d5c5c57a8a450de122ae81fa26a81c1bc", size = 423800, upload-time = "2026-03-31T16:16:16.594Z" }, + { url = "https://files.pythonhosted.org/packages/87/cf/f74e9ae9803d4ab46b163494adba636c6d7ea955af5cc23b8aaa94cfd528/orjson-3.11.8-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ccd7ba1b0605813a0715171d39ec4c314cb97a9c85893c2c5c0c3a3729df38bf", size = 147837, upload-time = "2026-03-31T16:16:18.585Z" }, + { url = "https://files.pythonhosted.org/packages/64/e6/9214f017b5db85e84e68602792f742e5dc5249e963503d1b356bee611e01/orjson-3.11.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbc8c9c02463fef4d3c53a9ba3336d05496ec8e1f1c53326a1e4acc11f5c600", size = 136441, upload-time = "2026-03-31T16:16:20.151Z" }, + { url = "https://files.pythonhosted.org/packages/24/dd/3590348818f58f837a75fb969b04cdf187ae197e14d60b5e5a794a38b79d/orjson-3.11.8-cp314-cp314-win32.whl", hash = "sha256:0b57f67710a8cd459e4e54eb96d5f77f3624eba0c661ba19a525807e42eccade", size = 131983, upload-time = "2026-03-31T16:16:21.823Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0f/b6cb692116e05d058f31ceee819c70f097fa9167c82f67fabe7516289abc/orjson-3.11.8-cp314-cp314-win_amd64.whl", hash = "sha256:735e2262363dcbe05c35e3a8869898022af78f89dde9e256924dc02e99fe69ca", size = 127396, upload-time = "2026-03-31T16:16:23.685Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d1/facb5b5051fabb0ef9d26c6544d87ef19a939a9a001198655d0d891062dd/orjson-3.11.8-cp314-cp314-win_arm64.whl", hash = "sha256:6ccdea2c213cf9f3d9490cbd5d427693c870753df41e6cb375bd79bcbafc8817", size = 127330, upload-time = "2026-03-31T16:16:25.496Z" }, ] [[package]] @@ -1736,7 +1800,7 @@ version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, @@ -1794,11 +1858,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.9.2" +version = "4.9.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/04/fea538adf7dbbd6d186f551d595961e564a3b6715bdf276b477460858672/platformdirs-4.9.2.tar.gz", hash = "sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291", size = 28394, upload-time = "2026-02-16T03:56:10.574Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737, upload-time = "2026-03-05T18:34:13.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl", hash = "sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd", size = 21168, upload-time = "2026-02-16T03:56:08.891Z" }, + { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216, upload-time = "2026-03-05T18:34:12.172Z" }, ] [[package]] @@ -2036,11 +2100,14 @@ wheels = [ [[package]] name = "pyjwt" -version = "2.11.0" +version = "2.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5c/5a/b46fa56bf322901eee5b0454a34343cdbdae202cd421775a8ee4e42fd519/pyjwt-2.11.0.tar.gz", hash = "sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623", size = 98019, upload-time = "2026-01-30T19:59:55.694Z" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl", hash = "sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469", size = 28224, upload-time = "2026-01-30T19:59:54.539Z" }, + { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, ] [package.optional-dependencies] @@ -2164,6 +2231,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] +[[package]] +name = "python-discovery" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/88/815e53084c5079a59df912825a279f41dd2e0df82281770eadc732f5352c/python_discovery-1.2.1.tar.gz", hash = "sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e", size = 58457, upload-time = "2026-03-26T22:30:44.496Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl", hash = "sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502", size = 31674, upload-time = "2026-03-26T22:30:43.396Z" }, +] + [[package]] name = "python-dotenv" version = "1.0.1" @@ -2175,11 +2255,11 @@ wheels = [ [[package]] name = "pytz" -version = "2025.2" +version = "2026.1.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, + { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" }, ] [[package]] @@ -2289,16 +2369,16 @@ wheels = [ [[package]] name = "responses" -version = "0.25.8" +version = "0.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, { name = "requests" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/95/89c054ad70bfef6da605338b009b2e283485835351a9935c7bfbfaca7ffc/responses-0.25.8.tar.gz", hash = "sha256:9374d047a575c8f781b94454db5cab590b6029505f488d12899ddb10a4af1cf4", size = 79320, upload-time = "2025-08-08T19:01:46.709Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/b4/b7e040379838cc71bf5aabdb26998dfbe5ee73904c92c1c161faf5de8866/responses-0.26.0.tar.gz", hash = "sha256:c7f6923e6343ef3682816ba421c006626777893cb0d5e1434f674b649bac9eb4", size = 81303, upload-time = "2026-02-19T14:38:05.574Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/4c/cc276ce57e572c102d9542d383b2cfd551276581dc60004cb94fe8774c11/responses-0.25.8-py3-none-any.whl", hash = "sha256:0c710af92def29c8352ceadff0c3fe340ace27cf5af1bbe46fb71275bcd2831c", size = 34769, upload-time = "2025-08-08T19:01:45.018Z" }, + { url = "https://files.pythonhosted.org/packages/ce/04/7f73d05b556da048923e31a0cc878f03be7c5425ed1f268082255c75d872/responses-0.26.0-py3-none-any.whl", hash = "sha256:03ec4409088cd5c66b71ecbbbd27fe2c58ddfad801c66203457b3e6a04868c37", size = 35099, upload-time = "2026-02-19T14:38:03.847Z" }, ] [[package]] @@ -2425,27 +2505,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/dc/4e6ac71b511b141cf626357a3946679abeba4cf67bc7cc5a17920f31e10d/ruff-0.15.1.tar.gz", hash = "sha256:c590fe13fb57c97141ae975c03a1aedb3d3156030cabd740d6ff0b0d601e203f", size = 4540855, upload-time = "2026-02-12T23:09:09.998Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/23/bf/e6e4324238c17f9d9120a9d60aa99a7daaa21204c07fcd84e2ef03bb5fd1/ruff-0.15.1-py3-none-linux_armv6l.whl", hash = "sha256:b101ed7cf4615bda6ffe65bdb59f964e9f4a0d3f85cbf0e54f0ab76d7b90228a", size = 10367819, upload-time = "2026-02-12T23:09:03.598Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:939c995e9277e63ea632cc8d3fae17aa758526f49a9a850d2e7e758bfef46602", size = 10798618, upload-time = "2026-02-12T23:09:22.928Z" }, - { url = "https://files.pythonhosted.org/packages/5e/0f/1d0d88bc862624247d82c20c10d4c0f6bb2f346559d8af281674cf327f15/ruff-0.15.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1d83466455fdefe60b8d9c8df81d3c1bbb2115cede53549d3b522ce2bc703899", size = 10148518, upload-time = "2026-02-12T23:08:58.339Z" }, - { url = "https://files.pythonhosted.org/packages/f5/c8/291c49cefaa4a9248e986256df2ade7add79388fe179e0691be06fae6f37/ruff-0.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9457e3c3291024866222b96108ab2d8265b477e5b1534c7ddb1810904858d16", size = 10518811, upload-time = "2026-02-12T23:09:31.865Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1a/f5707440e5ae43ffa5365cac8bbb91e9665f4a883f560893829cf16a606b/ruff-0.15.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92c92b003e9d4f7fbd33b1867bb15a1b785b1735069108dfc23821ba045b29bc", size = 10196169, upload-time = "2026-02-12T23:09:17.306Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ff/26ddc8c4da04c8fd3ee65a89c9fb99eaa5c30394269d424461467be2271f/ruff-0.15.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe5c41ab43e3a06778844c586251eb5a510f67125427625f9eb2b9526535779", size = 10990491, upload-time = "2026-02-12T23:09:25.503Z" }, - { url = "https://files.pythonhosted.org/packages/fc/00/50920cb385b89413f7cdb4bb9bc8fc59c1b0f30028d8bccc294189a54955/ruff-0.15.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66a6dd6df4d80dc382c6484f8ce1bcceb55c32e9f27a8b94c32f6c7331bf14fb", size = 11843280, upload-time = "2026-02-12T23:09:19.88Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6d/2f5cad8380caf5632a15460c323ae326f1e1a2b5b90a6ee7519017a017ca/ruff-0.15.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a4a42cbb8af0bda9bcd7606b064d7c0bc311a88d141d02f78920be6acb5aa83", size = 11274336, upload-time = "2026-02-12T23:09:14.907Z" }, - { url = "https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ab064052c31dddada35079901592dfba2e05f5b1e43af3954aafcbc1096a5b2", size = 11137288, upload-time = "2026-02-12T23:09:07.475Z" }, - { url = "https://files.pythonhosted.org/packages/cd/20/6f8d7d8f768c93b0382b33b9306b3b999918816da46537d5a61635514635/ruff-0.15.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5631c940fe9fe91f817a4c2ea4e81f47bee3ca4aa646134a24374f3c19ad9454", size = 11070681, upload-time = "2026-02-12T23:08:55.43Z" }, - { url = "https://files.pythonhosted.org/packages/9a/67/d640ac76069f64cdea59dba02af2e00b1fa30e2103c7f8d049c0cff4cafd/ruff-0.15.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:68138a4ba184b4691ccdc39f7795c66b3c68160c586519e7e8444cf5a53e1b4c", size = 10486401, upload-time = "2026-02-12T23:09:27.927Z" }, - { url = "https://files.pythonhosted.org/packages/65/3d/e1429f64a3ff89297497916b88c32a5cc88eeca7e9c787072d0e7f1d3e1e/ruff-0.15.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:518f9af03bfc33c03bdb4cb63fabc935341bb7f54af500f92ac309ecfbba6330", size = 10197452, upload-time = "2026-02-12T23:09:12.147Z" }, - { url = "https://files.pythonhosted.org/packages/78/83/e2c3bade17dad63bf1e1c2ffaf11490603b760be149e1419b07049b36ef2/ruff-0.15.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:da79f4d6a826caaea95de0237a67e33b81e6ec2e25fc7e1993a4015dffca7c61", size = 10693900, upload-time = "2026-02-12T23:09:34.418Z" }, - { url = "https://files.pythonhosted.org/packages/a1/27/fdc0e11a813e6338e0706e8b39bb7a1d61ea5b36873b351acee7e524a72a/ruff-0.15.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3dd86dccb83cd7d4dcfac303ffc277e6048600dfc22e38158afa208e8bf94a1f", size = 11227302, upload-time = "2026-02-12T23:09:36.536Z" }, - { url = "https://files.pythonhosted.org/packages/f6/58/ac864a75067dcbd3b95be5ab4eb2b601d7fbc3d3d736a27e391a4f92a5c1/ruff-0.15.1-py3-none-win32.whl", hash = "sha256:660975d9cb49b5d5278b12b03bb9951d554543a90b74ed5d366b20e2c57c2098", size = 10462555, upload-time = "2026-02-12T23:09:29.899Z" }, - { url = "https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl", hash = "sha256:c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336", size = 11599956, upload-time = "2026-02-12T23:09:01.157Z" }, - { url = "https://files.pythonhosted.org/packages/2a/07/5bda6a85b220c64c65686bc85bd0bbb23b29c62b3a9f9433fa55f17cda93/ruff-0.15.1-py3-none-win_arm64.whl", hash = "sha256:5ff7d5f0f88567850f45081fac8f4ec212be8d0b963e385c3f7d0d2eb4899416", size = 10874604, upload-time = "2026-02-12T23:09:05.515Z" }, +version = "0.15.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/b0/73cf7550861e2b4824950b8b52eebdcc5adc792a00c514406556c5b80817/ruff-0.15.8.tar.gz", hash = "sha256:995f11f63597ee362130d1d5a327a87cb6f3f5eae3094c620bcc632329a4d26e", size = 4610921, upload-time = "2026-03-26T18:39:38.675Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/92/c445b0cd6da6e7ae51e954939cb69f97e008dbe750cfca89b8cedc081be7/ruff-0.15.8-py3-none-linux_armv6l.whl", hash = "sha256:cbe05adeba76d58162762d6b239c9056f1a15a55bd4b346cfd21e26cd6ad7bc7", size = 10527394, upload-time = "2026-03-26T18:39:41.566Z" }, + { url = "https://files.pythonhosted.org/packages/eb/92/f1c662784d149ad1414cae450b082cf736430c12ca78367f20f5ed569d65/ruff-0.15.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d3e3d0b6ba8dca1b7ef9ab80a28e840a20070c4b62e56d675c24f366ef330570", size = 10905693, upload-time = "2026-03-26T18:39:30.364Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f2/7a631a8af6d88bcef997eb1bf87cc3da158294c57044aafd3e17030613de/ruff-0.15.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6ee3ae5c65a42f273f126686353f2e08ff29927b7b7e203b711514370d500de3", size = 10323044, upload-time = "2026-03-26T18:39:33.37Z" }, + { url = "https://files.pythonhosted.org/packages/67/18/1bf38e20914a05e72ef3b9569b1d5c70a7ef26cd188d69e9ca8ef588d5bf/ruff-0.15.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdce027ada77baa448077ccc6ebb2fa9c3c62fd110d8659d601cf2f475858d94", size = 10629135, upload-time = "2026-03-26T18:39:44.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/e9/138c150ff9af60556121623d41aba18b7b57d95ac032e177b6a53789d279/ruff-0.15.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12e617fc01a95e5821648a6df341d80456bd627bfab8a829f7cfc26a14a4b4a3", size = 10348041, upload-time = "2026-03-26T18:39:52.178Z" }, + { url = "https://files.pythonhosted.org/packages/02/f1/5bfb9298d9c323f842c5ddeb85f1f10ef51516ac7a34ba446c9347d898df/ruff-0.15.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:432701303b26416d22ba696c39f2c6f12499b89093b61360abc34bcc9bf07762", size = 11121987, upload-time = "2026-03-26T18:39:55.195Z" }, + { url = "https://files.pythonhosted.org/packages/10/11/6da2e538704e753c04e8d86b1fc55712fdbdcc266af1a1ece7a51fff0d10/ruff-0.15.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d910ae974b7a06a33a057cb87d2a10792a3b2b3b35e33d2699fdf63ec8f6b17a", size = 11951057, upload-time = "2026-03-26T18:39:19.18Z" }, + { url = "https://files.pythonhosted.org/packages/83/f0/c9208c5fd5101bf87002fed774ff25a96eea313d305f1e5d5744698dc314/ruff-0.15.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2033f963c43949d51e6fdccd3946633c6b37c484f5f98c3035f49c27395a8ab8", size = 11464613, upload-time = "2026-03-26T18:40:06.301Z" }, + { url = "https://files.pythonhosted.org/packages/f8/22/d7f2fabdba4fae9f3b570e5605d5eb4500dcb7b770d3217dca4428484b17/ruff-0.15.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f29b989a55572fb885b77464cf24af05500806ab4edf9a0fd8977f9759d85b1", size = 11257557, upload-time = "2026-03-26T18:39:57.972Z" }, + { url = "https://files.pythonhosted.org/packages/71/8c/382a9620038cf6906446b23ce8632ab8c0811b8f9d3e764f58bedd0c9a6f/ruff-0.15.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:ac51d486bf457cdc985a412fb1801b2dfd1bd8838372fc55de64b1510eff4bec", size = 11169440, upload-time = "2026-03-26T18:39:22.205Z" }, + { url = "https://files.pythonhosted.org/packages/4d/0d/0994c802a7eaaf99380085e4e40c845f8e32a562e20a38ec06174b52ef24/ruff-0.15.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c9861eb959edab053c10ad62c278835ee69ca527b6dcd72b47d5c1e5648964f6", size = 10605963, upload-time = "2026-03-26T18:39:46.682Z" }, + { url = "https://files.pythonhosted.org/packages/19/aa/d624b86f5b0aad7cef6bbf9cd47a6a02dfdc4f72c92a337d724e39c9d14b/ruff-0.15.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8d9a5b8ea13f26ae90838afc33f91b547e61b794865374f114f349e9036835fb", size = 10357484, upload-time = "2026-03-26T18:39:49.176Z" }, + { url = "https://files.pythonhosted.org/packages/35/c3/e0b7835d23001f7d999f3895c6b569927c4d39912286897f625736e1fd04/ruff-0.15.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c2a33a529fb3cbc23a7124b5c6ff121e4d6228029cba374777bd7649cc8598b8", size = 10830426, upload-time = "2026-03-26T18:40:03.702Z" }, + { url = "https://files.pythonhosted.org/packages/f0/51/ab20b322f637b369383adc341d761eaaa0f0203d6b9a7421cd6e783d81b9/ruff-0.15.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:75e5cd06b1cf3f47a3996cfc999226b19aa92e7cce682dcd62f80d7035f98f49", size = 11345125, upload-time = "2026-03-26T18:39:27.799Z" }, + { url = "https://files.pythonhosted.org/packages/37/e6/90b2b33419f59d0f2c4c8a48a4b74b460709a557e8e0064cf33ad894f983/ruff-0.15.8-py3-none-win32.whl", hash = "sha256:bc1f0a51254ba21767bfa9a8b5013ca8149dcf38092e6a9eb704d876de94dc34", size = 10571959, upload-time = "2026-03-26T18:39:36.117Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a2/ef467cb77099062317154c63f234b8a7baf7cb690b99af760c5b68b9ee7f/ruff-0.15.8-py3-none-win_amd64.whl", hash = "sha256:04f79eff02a72db209d47d665ba7ebcad609d8918a134f86cb13dd132159fc89", size = 11743893, upload-time = "2026-03-26T18:39:25.01Z" }, + { url = "https://files.pythonhosted.org/packages/15/e2/77be4fff062fa78d9b2a4dea85d14785dac5f1d0c1fb58ed52331f0ebe28/ruff-0.15.8-py3-none-win_arm64.whl", hash = "sha256:cf891fa8e3bb430c0e7fac93851a5978fc99c8fa2c053b57b118972866f8e5f2", size = 11048175, upload-time = "2026-03-26T18:40:01.06Z" }, ] [[package]] @@ -2543,56 +2623,56 @@ wheels = [ [[package]] name = "tomli" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/30/31573e9457673ab10aa432461bee537ce6cef177667deca369efb79df071/tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c", size = 17477, upload-time = "2026-01-11T11:22:38.165Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/d9/3dc2289e1f3b32eb19b9785b6a006b28ee99acb37d1d47f78d4c10e28bf8/tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867", size = 153663, upload-time = "2026-01-11T11:21:45.27Z" }, - { url = "https://files.pythonhosted.org/packages/51/32/ef9f6845e6b9ca392cd3f64f9ec185cc6f09f0a2df3db08cbe8809d1d435/tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9", size = 148469, upload-time = "2026-01-11T11:21:46.873Z" }, - { url = "https://files.pythonhosted.org/packages/d6/c2/506e44cce89a8b1b1e047d64bd495c22c9f71f21e05f380f1a950dd9c217/tomli-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95", size = 236039, upload-time = "2026-01-11T11:21:48.503Z" }, - { url = "https://files.pythonhosted.org/packages/b3/40/e1b65986dbc861b7e986e8ec394598187fa8aee85b1650b01dd925ca0be8/tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76", size = 243007, upload-time = "2026-01-11T11:21:49.456Z" }, - { url = "https://files.pythonhosted.org/packages/9c/6f/6e39ce66b58a5b7ae572a0f4352ff40c71e8573633deda43f6a379d56b3e/tomli-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d", size = 240875, upload-time = "2026-01-11T11:21:50.755Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ad/cb089cb190487caa80204d503c7fd0f4d443f90b95cf4ef5cf5aa0f439b0/tomli-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576", size = 246271, upload-time = "2026-01-11T11:21:51.81Z" }, - { url = "https://files.pythonhosted.org/packages/0b/63/69125220e47fd7a3a27fd0de0c6398c89432fec41bc739823bcc66506af6/tomli-2.4.0-cp311-cp311-win32.whl", hash = "sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a", size = 96770, upload-time = "2026-01-11T11:21:52.647Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0d/a22bb6c83f83386b0008425a6cd1fa1c14b5f3dd4bad05e98cf3dbbf4a64/tomli-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa", size = 107626, upload-time = "2026-01-11T11:21:53.459Z" }, - { url = "https://files.pythonhosted.org/packages/2f/6d/77be674a3485e75cacbf2ddba2b146911477bd887dda9d8c9dfb2f15e871/tomli-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614", size = 94842, upload-time = "2026-01-11T11:21:54.831Z" }, - { url = "https://files.pythonhosted.org/packages/3c/43/7389a1869f2f26dba52404e1ef13b4784b6b37dac93bac53457e3ff24ca3/tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1", size = 154894, upload-time = "2026-01-11T11:21:56.07Z" }, - { url = "https://files.pythonhosted.org/packages/e9/05/2f9bf110b5294132b2edf13fe6ca6ae456204f3d749f623307cbb7a946f2/tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8", size = 149053, upload-time = "2026-01-11T11:21:57.467Z" }, - { url = "https://files.pythonhosted.org/packages/e8/41/1eda3ca1abc6f6154a8db4d714a4d35c4ad90adc0bcf700657291593fbf3/tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a", size = 243481, upload-time = "2026-01-11T11:21:58.661Z" }, - { url = "https://files.pythonhosted.org/packages/d2/6d/02ff5ab6c8868b41e7d4b987ce2b5f6a51d3335a70aa144edd999e055a01/tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1", size = 251720, upload-time = "2026-01-11T11:22:00.178Z" }, - { url = "https://files.pythonhosted.org/packages/7b/57/0405c59a909c45d5b6f146107c6d997825aa87568b042042f7a9c0afed34/tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b", size = 247014, upload-time = "2026-01-11T11:22:01.238Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0e/2e37568edd944b4165735687cbaf2fe3648129e440c26d02223672ee0630/tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51", size = 251820, upload-time = "2026-01-11T11:22:02.727Z" }, - { url = "https://files.pythonhosted.org/packages/5a/1c/ee3b707fdac82aeeb92d1a113f803cf6d0f37bdca0849cb489553e1f417a/tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729", size = 97712, upload-time = "2026-01-11T11:22:03.777Z" }, - { url = "https://files.pythonhosted.org/packages/69/13/c07a9177d0b3bab7913299b9278845fc6eaaca14a02667c6be0b0a2270c8/tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da", size = 108296, upload-time = "2026-01-11T11:22:04.86Z" }, - { url = "https://files.pythonhosted.org/packages/18/27/e267a60bbeeee343bcc279bb9e8fbed0cbe224bc7b2a3dc2975f22809a09/tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3", size = 94553, upload-time = "2026-01-11T11:22:05.854Z" }, - { url = "https://files.pythonhosted.org/packages/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0", size = 154915, upload-time = "2026-01-11T11:22:06.703Z" }, - { url = "https://files.pythonhosted.org/packages/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e", size = 149038, upload-time = "2026-01-11T11:22:07.56Z" }, - { url = "https://files.pythonhosted.org/packages/9e/8a/6d38870bd3d52c8d1505ce054469a73f73a0fe62c0eaf5dddf61447e32fa/tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4", size = 242245, upload-time = "2026-01-11T11:22:08.344Z" }, - { url = "https://files.pythonhosted.org/packages/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e", size = 250335, upload-time = "2026-01-11T11:22:09.951Z" }, - { url = "https://files.pythonhosted.org/packages/a5/3d/4cdb6f791682b2ea916af2de96121b3cb1284d7c203d97d92d6003e91c8d/tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c", size = 245962, upload-time = "2026-01-11T11:22:11.27Z" }, - { url = "https://files.pythonhosted.org/packages/f2/4a/5f25789f9a460bd858ba9756ff52d0830d825b458e13f754952dd15fb7bb/tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f", size = 250396, upload-time = "2026-01-11T11:22:12.325Z" }, - { url = "https://files.pythonhosted.org/packages/aa/2f/b73a36fea58dfa08e8b3a268750e6853a6aac2a349241a905ebd86f3047a/tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86", size = 97530, upload-time = "2026-01-11T11:22:13.865Z" }, - { url = "https://files.pythonhosted.org/packages/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87", size = 108227, upload-time = "2026-01-11T11:22:15.224Z" }, - { url = "https://files.pythonhosted.org/packages/22/c3/b386b832f209fee8073c8138ec50f27b4460db2fdae9ffe022df89a57f9b/tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132", size = 94748, upload-time = "2026-01-11T11:22:16.009Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c4/84047a97eb1004418bc10bdbcfebda209fca6338002eba2dc27cc6d13563/tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6", size = 154725, upload-time = "2026-01-11T11:22:17.269Z" }, - { url = "https://files.pythonhosted.org/packages/a8/5d/d39038e646060b9d76274078cddf146ced86dc2b9e8bbf737ad5983609a0/tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc", size = 148901, upload-time = "2026-01-11T11:22:18.287Z" }, - { url = "https://files.pythonhosted.org/packages/73/e5/383be1724cb30f4ce44983d249645684a48c435e1cd4f8b5cded8a816d3c/tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66", size = 243375, upload-time = "2026-01-11T11:22:19.154Z" }, - { url = "https://files.pythonhosted.org/packages/31/f0/bea80c17971c8d16d3cc109dc3585b0f2ce1036b5f4a8a183789023574f2/tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d", size = 250639, upload-time = "2026-01-11T11:22:20.168Z" }, - { url = "https://files.pythonhosted.org/packages/2c/8f/2853c36abbb7608e3f945d8a74e32ed3a74ee3a1f468f1ffc7d1cb3abba6/tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702", size = 246897, upload-time = "2026-01-11T11:22:21.544Z" }, - { url = "https://files.pythonhosted.org/packages/49/f0/6c05e3196ed5337b9fe7ea003e95fd3819a840b7a0f2bf5a408ef1dad8ed/tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8", size = 254697, upload-time = "2026-01-11T11:22:23.058Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f5/2922ef29c9f2951883525def7429967fc4d8208494e5ab524234f06b688b/tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776", size = 98567, upload-time = "2026-01-11T11:22:24.033Z" }, - { url = "https://files.pythonhosted.org/packages/7b/31/22b52e2e06dd2a5fdbc3ee73226d763b184ff21fc24e20316a44ccc4d96b/tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475", size = 108556, upload-time = "2026-01-11T11:22:25.378Z" }, - { url = "https://files.pythonhosted.org/packages/48/3d/5058dff3255a3d01b705413f64f4306a141a8fd7a251e5a495e3f192a998/tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2", size = 96014, upload-time = "2026-01-11T11:22:26.138Z" }, - { url = "https://files.pythonhosted.org/packages/b8/4e/75dab8586e268424202d3a1997ef6014919c941b50642a1682df43204c22/tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9", size = 163339, upload-time = "2026-01-11T11:22:27.143Z" }, - { url = "https://files.pythonhosted.org/packages/06/e3/b904d9ab1016829a776d97f163f183a48be6a4deb87304d1e0116a349519/tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0", size = 159490, upload-time = "2026-01-11T11:22:28.399Z" }, - { url = "https://files.pythonhosted.org/packages/e3/5a/fc3622c8b1ad823e8ea98a35e3c632ee316d48f66f80f9708ceb4f2a0322/tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df", size = 269398, upload-time = "2026-01-11T11:22:29.345Z" }, - { url = "https://files.pythonhosted.org/packages/fd/33/62bd6152c8bdd4c305ad9faca48f51d3acb2df1f8791b1477d46ff86e7f8/tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d", size = 276515, upload-time = "2026-01-11T11:22:30.327Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ff/ae53619499f5235ee4211e62a8d7982ba9e439a0fb4f2f351a93d67c1dd2/tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f", size = 273806, upload-time = "2026-01-11T11:22:32.56Z" }, - { url = "https://files.pythonhosted.org/packages/47/71/cbca7787fa68d4d0a9f7072821980b39fbb1b6faeb5f5cf02f4a5559fa28/tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b", size = 281340, upload-time = "2026-01-11T11:22:33.505Z" }, - { url = "https://files.pythonhosted.org/packages/f5/00/d595c120963ad42474cf6ee7771ad0d0e8a49d0f01e29576ee9195d9ecdf/tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087", size = 108106, upload-time = "2026-01-11T11:22:34.451Z" }, - { url = "https://files.pythonhosted.org/packages/de/69/9aa0c6a505c2f80e519b43764f8b4ba93b5a0bbd2d9a9de6e2b24271b9a5/tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd", size = 120504, upload-time = "2026-01-11T11:22:35.764Z" }, - { url = "https://files.pythonhosted.org/packages/b3/9f/f1668c281c58cfae01482f7114a4b88d345e4c140386241a1a24dcc9e7bc/tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4", size = 99561, upload-time = "2026-01-11T11:22:36.624Z" }, - { url = "https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a", size = 14477, upload-time = "2026-01-11T11:22:37.446Z" }, +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] @@ -2643,35 +2723,35 @@ wheels = [ [[package]] name = "ty" -version = "0.0.17" +version = "0.0.27" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/c3/41ae6346443eedb65b96761abfab890a48ce2aa5a8a27af69c5c5d99064d/ty-0.0.17.tar.gz", hash = "sha256:847ed6c120913e280bf9b54d8eaa7a1049708acb8824ad234e71498e8ad09f97", size = 5167209, upload-time = "2026-02-13T13:26:36.835Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/de/e5cf1f151cf52fe1189e42d03d90909d7d1354fdc0c1847cbb63a0baa3da/ty-0.0.27.tar.gz", hash = "sha256:d7a8de3421d92420b40c94fe7e7d4816037560621903964dd035cf9bd0204a73", size = 5424130, upload-time = "2026-03-31T19:07:20.806Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/01/0ef15c22a1c54b0f728ceff3f62d478dbf8b0dcf8ff7b80b954f79584f3e/ty-0.0.17-py3-none-linux_armv6l.whl", hash = "sha256:64a9a16555cc8867d35c2647c2f1afbd3cae55f68fd95283a574d1bb04fe93e0", size = 10192793, upload-time = "2026-02-13T13:27:13.943Z" }, - { url = "https://files.pythonhosted.org/packages/0f/2c/f4c322d9cded56edc016b1092c14b95cf58c8a33b4787316ea752bb9418e/ty-0.0.17-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:eb2dbd8acd5c5a55f4af0d479523e7c7265a88542efe73ed3d696eb1ba7b6454", size = 10051977, upload-time = "2026-02-13T13:26:57.741Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a5/43746c1ff81e784f5fc303afc61fe5bcd85d0fcf3ef65cb2cef78c7486c7/ty-0.0.17-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f18f5fd927bc628deb9ea2df40f06b5f79c5ccf355db732025a3e8e7152801f6", size = 9564639, upload-time = "2026-02-13T13:26:42.781Z" }, - { url = "https://files.pythonhosted.org/packages/d6/b8/280b04e14a9c0474af574f929fba2398b5e1c123c1e7735893b4cd73d13c/ty-0.0.17-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5383814d1d7a5cc53b3b07661856bab04bb2aac7a677c8d33c55169acdaa83df", size = 10061204, upload-time = "2026-02-13T13:27:00.152Z" }, - { url = "https://files.pythonhosted.org/packages/2a/d7/493e1607d8dfe48288d8a768a2adc38ee27ef50e57f0af41ff273987cda0/ty-0.0.17-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c20423b8744b484f93e7bf2ef8a9724bca2657873593f9f41d08bd9f83444c9", size = 10013116, upload-time = "2026-02-13T13:26:34.543Z" }, - { url = "https://files.pythonhosted.org/packages/80/ef/22f3ed401520afac90dbdf1f9b8b7755d85b0d5c35c1cb35cf5bd11b59c2/ty-0.0.17-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6f5b1aba97db9af86517b911674b02f5bc310750485dc47603a105bd0e83ddd", size = 10533623, upload-time = "2026-02-13T13:26:31.449Z" }, - { url = "https://files.pythonhosted.org/packages/75/ce/744b15279a11ac7138832e3a55595706b4a8a209c9f878e3ab8e571d9032/ty-0.0.17-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:488bce1a9bea80b851a97cd34c4d2ffcd69593d6c3f54a72ae02e5c6e47f3d0c", size = 11069750, upload-time = "2026-02-13T13:26:48.638Z" }, - { url = "https://files.pythonhosted.org/packages/f2/be/1133c91f15a0e00d466c24f80df486d630d95d1b2af63296941f7473812f/ty-0.0.17-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8df66b91ec84239420985ec215e7f7549bfda2ac036a3b3c065f119d1c06825a", size = 10870862, upload-time = "2026-02-13T13:26:54.715Z" }, - { url = "https://files.pythonhosted.org/packages/3e/4a/a2ed209ef215b62b2d3246e07e833081e07d913adf7e0448fc204be443d6/ty-0.0.17-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:002139e807c53002790dfefe6e2f45ab0e04012e76db3d7c8286f96ec121af8f", size = 10628118, upload-time = "2026-02-13T13:26:45.439Z" }, - { url = "https://files.pythonhosted.org/packages/b3/0c/87476004cb5228e9719b98afffad82c3ef1f84334bde8527bcacba7b18cb/ty-0.0.17-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6c4e01f05ce82e5d489ab3900ca0899a56c4ccb52659453780c83e5b19e2b64c", size = 10038185, upload-time = "2026-02-13T13:27:02.693Z" }, - { url = "https://files.pythonhosted.org/packages/46/4b/98f0b3ba9aef53c1f0305519536967a4aa793a69ed72677b0a625c5313ac/ty-0.0.17-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2b226dd1e99c0d2152d218c7e440150d1a47ce3c431871f0efa073bbf899e881", size = 10047644, upload-time = "2026-02-13T13:27:05.474Z" }, - { url = "https://files.pythonhosted.org/packages/93/e0/06737bb80aa1a9103b8651d2eb691a7e53f1ed54111152be25f4a02745db/ty-0.0.17-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8b11f1da7859e0ad69e84b3c5ef9a7b055ceed376a432fad44231bdfc48061c2", size = 10231140, upload-time = "2026-02-13T13:27:10.844Z" }, - { url = "https://files.pythonhosted.org/packages/7c/79/e2a606bd8852383ba9abfdd578f4a227bd18504145381a10a5f886b4e751/ty-0.0.17-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c04e196809ff570559054d3e011425fd7c04161529eb551b3625654e5f2434cb", size = 10718344, upload-time = "2026-02-13T13:26:51.66Z" }, - { url = "https://files.pythonhosted.org/packages/c5/2d/2663984ac11de6d78f74432b8b14ba64d170b45194312852b7543cf7fd56/ty-0.0.17-py3-none-win32.whl", hash = "sha256:305b6ed150b2740d00a817b193373d21f0767e10f94ac47abfc3b2e5a5aec809", size = 9672932, upload-time = "2026-02-13T13:27:08.522Z" }, - { url = "https://files.pythonhosted.org/packages/de/b5/39be78f30b31ee9f5a585969930c7248354db90494ff5e3d0756560fb731/ty-0.0.17-py3-none-win_amd64.whl", hash = "sha256:531828267527aee7a63e972f54e5eee21d9281b72baf18e5c2850c6b862add83", size = 10542138, upload-time = "2026-02-13T13:27:17.084Z" }, - { url = "https://files.pythonhosted.org/packages/40/b7/f875c729c5d0079640c75bad2c7e5d43edc90f16ba242f28a11966df8f65/ty-0.0.17-py3-none-win_arm64.whl", hash = "sha256:de9810234c0c8d75073457e10a84825b9cd72e6629826b7f01c7a0b266ae25b1", size = 10023068, upload-time = "2026-02-13T13:26:39.637Z" }, + { url = "https://files.pythonhosted.org/packages/fa/20/2a9ea661758bd67f2bfd54ce9daacb5a26c56c5f8b49fbd9a43b365a8a7d/ty-0.0.27-py3-none-linux_armv6l.whl", hash = "sha256:eb14456b8611c9e8287aa9b633f4d2a0d9f3082a31796969e0b50bdda8930281", size = 10571211, upload-time = "2026-03-31T19:07:23.28Z" }, + { url = "https://files.pythonhosted.org/packages/da/b2/8887a51f705d075ddbe78ae7f0d4755ef48d0a90235f67aee289e9cee950/ty-0.0.27-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:02e662184703db7586118df611cf24a000d35dae38d950053d1dd7b6736fd2c4", size = 10427576, upload-time = "2026-03-31T19:07:15.499Z" }, + { url = "https://files.pythonhosted.org/packages/1d/c3/79d88163f508fb709ce19bc0b0a66c7c64b53d372d4caa56172c3d9b3ae8/ty-0.0.27-py3-none-macosx_11_0_arm64.whl", hash = "sha256:be5fc2899441f7f8f7ef40f9ffd006075a5ff6b06c44e8d2aa30e1b900c12f51", size = 9870359, upload-time = "2026-03-31T19:07:36.852Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4d/ed1b0db0e1e46b5ed4976bbfe0d1825faf003b4e3774ef28c785ed73e4bb/ty-0.0.27-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30231e652b14742a76b64755e54bf0cb1cd4c128bcaf625222e0ca92a2094887", size = 10380488, upload-time = "2026-03-31T19:07:31.268Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f2/20372f6d510b01570028433064880adec2f8abe68bf0c4603be61a560bef/ty-0.0.27-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a119b1168f64261b3205a37e40b5b6c4aac8fd58e4587988f4e4b22c3c79847", size = 10390248, upload-time = "2026-03-31T19:07:28.345Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/46b31a7311306be1a560f7f20fdc37b5bf718787f60626cd265d9b637554/ty-0.0.27-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e38f4e187b6975d2cbebf0f1eb1221f8f64f6e509bad14d7bb2a91afc97e4956", size = 10878479, upload-time = "2026-03-31T19:07:39.393Z" }, + { url = "https://files.pythonhosted.org/packages/42/ba/5231a2a1fb1cebe053a25de8fded95e1a30a1e77d3628a9e58487297bafc/ty-0.0.27-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a07b1a8fbb23844f6d22091275430d9ac617175f34aa99159b268193de210389", size = 11461232, upload-time = "2026-03-31T19:07:02.518Z" }, + { url = "https://files.pythonhosted.org/packages/c3/37/558abab3e1f6670493524f61280b4dfcc3219555f13889223e733381dfab/ty-0.0.27-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3ec4033031f240836bb0337274bac5c49dde312c7c6d7575451ed719bf8ffa3", size = 11133002, upload-time = "2026-03-31T19:07:18.371Z" }, + { url = "https://files.pythonhosted.org/packages/32/38/188c14a57f52160407ce62c6abb556011718fd0bcbe1dca690529ce84c46/ty-0.0.27-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:924a8849afd500d260bf5b7296165a05b7424fbb6b19113f30f3b999d682873f", size = 10986624, upload-time = "2026-03-31T19:07:13.066Z" }, + { url = "https://files.pythonhosted.org/packages/9f/f1/667a71393f47d2cd6ba9ed07541b8df3eb63aab1f2ee658e77d91b8362fa/ty-0.0.27-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d8270026c07e7423a1b3a3fd065b46ed1478748f0662518b523b57744f3fa025", size = 10366721, upload-time = "2026-03-31T19:07:00.131Z" }, + { url = "https://files.pythonhosted.org/packages/8b/aa/8edafe41be898bda774249abc5be6edd733e53fb1777d59ea9331e38537d/ty-0.0.27-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e26e9735d3bdfd95d881111ad1cf570eab8188d8c3be36d6bcaad044d38984d8", size = 10412239, upload-time = "2026-03-31T19:07:05.297Z" }, + { url = "https://files.pythonhosted.org/packages/53/ff/8bafaed4a18d38264f46bdfc427de7ea2974cf9064e4e0bdb1b6e6c724e3/ty-0.0.27-py3-none-musllinux_1_2_i686.whl", hash = "sha256:7c09cc9a699810609acc0090af8d0db68adaee6e60a7c3e05ab80cc954a83db7", size = 10573507, upload-time = "2026-03-31T19:06:57.064Z" }, + { url = "https://files.pythonhosted.org/packages/16/2e/63a8284a2fefd08ab56ecbad0fde7dd4b2d4045a31cf24c1d1fcd9643227/ty-0.0.27-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2d3e02853bb037221a456e034b1898aaa573e6374fbb53884e33cb7513ccb85a", size = 11090233, upload-time = "2026-03-31T19:07:34.139Z" }, + { url = "https://files.pythonhosted.org/packages/14/d3/d6fa1cafdfa2b34dbfa304fc6833af8e1669fc34e24d214fa76d2a2e5a25/ty-0.0.27-py3-none-win32.whl", hash = "sha256:34e7377f2047c14dbbb7bf5322e84114db7a5f2cb470db6bee63f8f3550cfc1e", size = 9984415, upload-time = "2026-03-31T19:07:07.98Z" }, + { url = "https://files.pythonhosted.org/packages/85/e6/dd4e27da9632b3472d5711ca49dbd3709dbd3e8c73f3af6db9c254235ca9/ty-0.0.27-py3-none-win_amd64.whl", hash = "sha256:3f7e4145aad8b815ed69b324c93b5b773eb864dda366ca16ab8693ff88ce6f36", size = 10961535, upload-time = "2026-03-31T19:07:10.566Z" }, + { url = "https://files.pythonhosted.org/packages/0e/1a/824b3496d66852ed7d5d68d9787711131552b68dce8835ce9410db32e618/ty-0.0.27-py3-none-win_arm64.whl", hash = "sha256:95bf8d01eb96bb2ba3ffc39faff19da595176448e80871a7b362f4d2de58476c", size = 10376689, upload-time = "2026-03-31T19:07:25.732Z" }, ] [[package]] name = "types-awscrt" -version = "0.31.2" +version = "0.31.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/24/5497a611f32cbaf4b9e1af35f56463e8f02e198ec513b68cb59a63f5a446/types_awscrt-0.31.2.tar.gz", hash = "sha256:dc79705acd24094656b8105b8d799d7e273c8eac37c69137df580cd84beb54f6", size = 18190, upload-time = "2026-02-16T02:33:53.135Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/26/0aa563e229c269c528a3b8c709fc671ac2a5c564732fab0852ac6ee006cf/types_awscrt-0.31.3.tar.gz", hash = "sha256:09d3eaf00231e0f47e101bd9867e430873bc57040050e2a3bd8305cb4fc30865", size = 18178, upload-time = "2026-03-08T02:31:14.569Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/3d/21a2212b5fcef9e8e9f368403885dc567b7d31e50b2ce393efad3cd83572/types_awscrt-0.31.2-py3-none-any.whl", hash = "sha256:3d6a29c1cca894b191be408f4d985a8e3a14d919785652dd3fa4ee558143e4bf", size = 43340, upload-time = "2026-02-16T02:33:52.109Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e5/47a573bbbd0a790f8f9fe452f7188ea72b212d21c9be57d5fc0cbc442075/types_awscrt-0.31.3-py3-none-any.whl", hash = "sha256:e5ce65a00a2ab4f35eacc1e3d700d792338d56e4823ee7b4dbe017f94cfc4458", size = 43340, upload-time = "2026-03-08T02:31:13.38Z" }, ] [[package]] @@ -2685,14 +2765,14 @@ wheels = [ [[package]] name = "types-requests" -version = "2.32.4.20260107" +version = "2.33.0.20260327" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0f/f3/a0663907082280664d745929205a89d41dffb29e89a50f753af7d57d0a96/types_requests-2.32.4.20260107.tar.gz", hash = "sha256:018a11ac158f801bfa84857ddec1650750e393df8a004a8a9ae2a9bec6fcb24f", size = 23165, upload-time = "2026-01-07T03:20:54.091Z" } +sdist = { url = "https://files.pythonhosted.org/packages/02/5f/2e3dbae6e21be6ae026563bad96cbf76602d73aa85ea09f13419ddbdabb4/types_requests-2.33.0.20260327.tar.gz", hash = "sha256:f4f74f0b44f059e3db420ff17bd1966e3587cdd34062fe38a23cda97868f8dd8", size = 23804, upload-time = "2026-03-27T04:23:38.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/12/709ea261f2bf91ef0a26a9eed20f2623227a8ed85610c1e54c5805692ecb/types_requests-2.32.4.20260107-py3-none-any.whl", hash = "sha256:b703fe72f8ce5b31ef031264fe9395cac8f46a04661a79f7ed31a80fb308730d", size = 20676, upload-time = "2026-01-07T03:20:52.929Z" }, + { url = "https://files.pythonhosted.org/packages/8c/55/951e733616c92cb96b57554746d2f65f4464d080cc2cc093605f897aba89/types_requests-2.33.0.20260327-py3-none-any.whl", hash = "sha256:fde0712be6d7c9a4d490042d6323115baf872d9a71a22900809d0432de15776e", size = 20737, upload-time = "2026-03-27T04:23:37.813Z" }, ] [[package]] @@ -2793,17 +2873,18 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.38.0" +version = "21.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, + { name = "python-discovery" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d2/03/a94d404ca09a89a7301a7008467aed525d4cdeb9186d262154dd23208709/virtualenv-20.38.0.tar.gz", hash = "sha256:94f39b1abaea5185bf7ea5a46702b56f1d0c9aa2f41a6c2b8b0af4ddc74c10a7", size = 5864558, upload-time = "2026-02-19T07:48:02.385Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/92/58199fe10049f9703c2666e809c4f686c54ef0a68b0f6afccf518c0b1eb9/virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098", size = 5840618, upload-time = "2026-03-09T17:24:38.013Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/394801755d4c8684b655d35c665aea7836ec68320304f62ab3c94395b442/virtualenv-20.38.0-py3-none-any.whl", hash = "sha256:d6e78e5889de3a4742df2d3d44e779366325a90cf356f15621fddace82431794", size = 5837778, upload-time = "2026-02-19T07:47:59.778Z" }, + { url = "https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f", size = 5825084, upload-time = "2026-03-09T17:24:35.378Z" }, ] [[package]] @@ -2825,95 +2906,109 @@ wheels = [ [[package]] name = "werkzeug" -version = "3.1.5" +version = "3.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/70/1469ef1d3542ae7c2c7b72bd5e3a4e6ee69d7978fa8a3af05a38eca5becf/werkzeug-3.1.5.tar.gz", hash = "sha256:6a548b0e88955dd07ccb25539d7d0cc97417ee9e179677d22c7041c8f078ce67", size = 864754, upload-time = "2026-01-08T17:49:23.247Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/43/76ded108b296a49f52de6bac5192ca1c4be84e886f9b5c9ba8427d9694fd/werkzeug-3.1.7.tar.gz", hash = "sha256:fb8c01fe6ab13b9b7cdb46892b99b1d66754e1d7ab8e542e865ec13f526b5351", size = 875700, upload-time = "2026-03-24T01:08:07.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/e4/8d97cca767bcc1be76d16fb76951608305561c6e056811587f36cb1316a8/werkzeug-3.1.5-py3-none-any.whl", hash = "sha256:5111e36e91086ece91f93268bb39b4a35c1e6f1feac762c9c822ded0a4e322dc", size = 225025, upload-time = "2026-01-08T17:49:21.859Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b2/0bba9bbb4596d2d2f285a16c2ab04118f6b957d8441566e1abb892e6a6b2/werkzeug-3.1.7-py3-none-any.whl", hash = "sha256:4b314d81163a3e1a169b6a0be2a000a0e204e8873c5de6586f453c55688d422f", size = 226295, upload-time = "2026-03-24T01:08:06.133Z" }, ] [[package]] name = "wrapt" -version = "2.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/37/ae31f40bec90de2f88d9597d0b5281e23ffe85b893a47ca5d9c05c63a4f6/wrapt-2.1.1.tar.gz", hash = "sha256:5fdcb09bf6db023d88f312bd0767594b414655d58090fc1c46b3414415f67fac", size = 81329, upload-time = "2026-02-03T02:12:13.786Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/21/293b657a27accfbbbb6007ebd78af0efa2083dac83e8f523272ea09b4638/wrapt-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e927375e43fd5a985b27a8992327c22541b6dede1362fc79df337d26e23604f", size = 60554, upload-time = "2026-02-03T02:11:17.362Z" }, - { url = "https://files.pythonhosted.org/packages/25/e9/96dd77728b54a899d4ce2798d7b1296989ce687ed3c0cb917d6b3154bf5d/wrapt-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c99544b6a7d40ca22195563b6d8bc3986ee8bb82f272f31f0670fe9440c869", size = 61496, upload-time = "2026-02-03T02:12:54.732Z" }, - { url = "https://files.pythonhosted.org/packages/44/79/4c755b45df6ef30c0dd628ecfaa0c808854be147ca438429da70a162833c/wrapt-2.1.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b2be3fa5f4efaf16ee7c77d0556abca35f5a18ad4ac06f0ef3904c3399010ce9", size = 113528, upload-time = "2026-02-03T02:12:26.405Z" }, - { url = "https://files.pythonhosted.org/packages/9f/63/23ce28f7b841217d9a6337a340fbb8d4a7fbd67a89d47f377c8550fa34aa/wrapt-2.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67c90c1ae6489a6cb1a82058902caa8006706f7b4e8ff766f943e9d2c8e608d0", size = 115536, upload-time = "2026-02-03T02:11:54.397Z" }, - { url = "https://files.pythonhosted.org/packages/23/7b/5ca8d3b12768670d16c8329e29960eedd56212770365a02a8de8bf73dc01/wrapt-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:05c0db35ccffd7480143e62df1e829d101c7b86944ae3be7e4869a7efa621f53", size = 114716, upload-time = "2026-02-03T02:12:20.771Z" }, - { url = "https://files.pythonhosted.org/packages/c7/3a/9789ccb14a096d30bb847bf3ee137bf682cc9750c2ce155f4c5ae1962abf/wrapt-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0c2ec9f616755b2e1e0bf4d0961f59bb5c2e7a77407e7e2c38ef4f7d2fdde12c", size = 113200, upload-time = "2026-02-03T02:12:07.688Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e5/4ec3526ce6ce920b267c8d35d2c2f0874d3fad2744c8b7259353f1132baa/wrapt-2.1.1-cp310-cp310-win32.whl", hash = "sha256:203ba6b3f89e410e27dbd30ff7dccaf54dcf30fda0b22aa1b82d560c7f9fe9a1", size = 57876, upload-time = "2026-02-03T02:11:42.61Z" }, - { url = "https://files.pythonhosted.org/packages/d1/4e/661c7c76ecd85375b2bc03488941a3a1078642af481db24949e2b9de01f4/wrapt-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:6f9426d9cfc2f8732922fc96198052e55c09bb9db3ddaa4323a18e055807410e", size = 60224, upload-time = "2026-02-03T02:11:19.096Z" }, - { url = "https://files.pythonhosted.org/packages/5f/b7/53c7252d371efada4cb119e72e774fa2c6b3011fc33e3e552cdf48fb9488/wrapt-2.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:69c26f51b67076b40714cff81bdd5826c0b10c077fb6b0678393a6a2f952a5fc", size = 58645, upload-time = "2026-02-03T02:12:10.396Z" }, - { url = "https://files.pythonhosted.org/packages/b8/a8/9254e4da74b30a105935197015b18b31b7a298bf046e67d8952ef74967bd/wrapt-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6c366434a7fb914c7a5de508ed735ef9c133367114e1a7cb91dfb5cd806a1549", size = 60554, upload-time = "2026-02-03T02:11:13.038Z" }, - { url = "https://files.pythonhosted.org/packages/9e/a1/378579880cc7af226354054a2c255f69615b379d8adad482bfe2f22a0dc2/wrapt-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d6a2068bd2e1e19e5a317c8c0b288267eec4e7347c36bc68a6e378a39f19ee7", size = 61491, upload-time = "2026-02-03T02:12:56.077Z" }, - { url = "https://files.pythonhosted.org/packages/dc/72/957b51c56acca35701665878ad31626182199fc4afecfe67dea072210f95/wrapt-2.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:891ab4713419217b2aed7dd106c9200f64e6a82226775a0d2ebd6bef2ebd1747", size = 113949, upload-time = "2026-02-03T02:11:04.516Z" }, - { url = "https://files.pythonhosted.org/packages/cd/74/36bbebb4a3d2ae9c3e6929639721f8606cd0710a82a777c371aa69e36504/wrapt-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8ef36a0df38d2dc9d907f6617f89e113c5892e0a35f58f45f75901af0ce7d81", size = 115989, upload-time = "2026-02-03T02:12:19.398Z" }, - { url = "https://files.pythonhosted.org/packages/ae/0d/f1177245a083c7be284bc90bddfe5aece32cdd5b858049cb69ce001a0e8d/wrapt-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76e9af3ebd86f19973143d4d592cbf3e970cf3f66ddee30b16278c26ae34b8ab", size = 115242, upload-time = "2026-02-03T02:11:08.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/3e/3b7cf5da27e59df61b1eae2d07dd03ff5d6f75b5408d694873cca7a8e33c/wrapt-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ff562067485ebdeaef2fa3fe9b1876bc4e7b73762e0a01406ad81e2076edcebf", size = 113676, upload-time = "2026-02-03T02:12:41.026Z" }, - { url = "https://files.pythonhosted.org/packages/f7/65/8248d3912c705f2c66f81cb97c77436f37abcbedb16d633b5ab0d795d8cd/wrapt-2.1.1-cp311-cp311-win32.whl", hash = "sha256:9e60a30aa0909435ec4ea2a3c53e8e1b50ac9f640c0e9fe3f21fd248a22f06c5", size = 57863, upload-time = "2026-02-03T02:12:18.112Z" }, - { url = "https://files.pythonhosted.org/packages/6b/31/d29310ab335f71f00c50466153b3dc985aaf4a9fc03263e543e136859541/wrapt-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:7d79954f51fcf84e5ec4878ab4aea32610d70145c5bbc84b3370eabfb1e096c2", size = 60224, upload-time = "2026-02-03T02:12:29.289Z" }, - { url = "https://files.pythonhosted.org/packages/0c/90/a6ec319affa6e2894962a0cb9d73c67f88af1a726d15314bfb5c88b8a08d/wrapt-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:d3ffc6b0efe79e08fd947605fd598515aebefe45e50432dc3b5cd437df8b1ada", size = 58643, upload-time = "2026-02-03T02:12:43.022Z" }, - { url = "https://files.pythonhosted.org/packages/df/cb/4d5255d19bbd12be7f8ee2c1fb4269dddec9cef777ef17174d357468efaa/wrapt-2.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab8e3793b239db021a18782a5823fcdea63b9fe75d0e340957f5828ef55fcc02", size = 61143, upload-time = "2026-02-03T02:11:46.313Z" }, - { url = "https://files.pythonhosted.org/packages/6f/07/7ed02daa35542023464e3c8b7cb937fa61f6c61c0361ecf8f5fecf8ad8da/wrapt-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c0300007836373d1c2df105b40777986accb738053a92fe09b615a7a4547e9f", size = 61740, upload-time = "2026-02-03T02:12:51.966Z" }, - { url = "https://files.pythonhosted.org/packages/c4/60/a237a4e4a36f6d966061ccc9b017627d448161b19e0a3ab80a7c7c97f859/wrapt-2.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2b27c070fd1132ab23957bcd4ee3ba707a91e653a9268dc1afbd39b77b2799f7", size = 121327, upload-time = "2026-02-03T02:11:06.796Z" }, - { url = "https://files.pythonhosted.org/packages/ae/fe/9139058a3daa8818fc67e6460a2340e8bbcf3aef8b15d0301338bbe181ca/wrapt-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b0e36d845e8b6f50949b6b65fc6cd279f47a1944582ed4ec8258cd136d89a64", size = 122903, upload-time = "2026-02-03T02:12:48.657Z" }, - { url = "https://files.pythonhosted.org/packages/91/10/b8479202b4164649675846a531763531f0a6608339558b5a0a718fc49a8d/wrapt-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4aeea04a9889370fcfb1ef828c4cc583f36a875061505cd6cd9ba24d8b43cc36", size = 121333, upload-time = "2026-02-03T02:11:32.148Z" }, - { url = "https://files.pythonhosted.org/packages/5f/75/75fc793b791d79444aca2c03ccde64e8b99eda321b003f267d570b7b0985/wrapt-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d88b46bb0dce9f74b6817bc1758ff2125e1ca9e1377d62ea35b6896142ab6825", size = 120458, upload-time = "2026-02-03T02:11:16.039Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3f30d511082ca6d947c405f9d8f6c8eaf83cfde527c439ec2c9a30eb5ea/wrapt-2.1.1-cp312-cp312-win32.whl", hash = "sha256:63decff76ca685b5c557082dfbea865f3f5f6d45766a89bff8dc61d336348833", size = 58086, upload-time = "2026-02-03T02:12:35.041Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c8/37625b643eea2849f10c3b90f69c7462faa4134448d4443234adaf122ae5/wrapt-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b828235d26c1e35aca4107039802ae4b1411be0fe0367dd5b7e4d90e562fcbcd", size = 60328, upload-time = "2026-02-03T02:12:45.808Z" }, - { url = "https://files.pythonhosted.org/packages/ce/79/56242f07572d5682ba8065a9d4d9c2218313f576e3c3471873c2a5355ffd/wrapt-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:75128507413a9f1bcbe2db88fd18fbdbf80f264b82fa33a6996cdeaf01c52352", size = 58722, upload-time = "2026-02-03T02:12:27.949Z" }, - { url = "https://files.pythonhosted.org/packages/f7/ca/3cf290212855b19af9fcc41b725b5620b32f470d6aad970c2593500817eb/wrapt-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9646e17fa7c3e2e7a87e696c7de66512c2b4f789a8db95c613588985a2e139", size = 61150, upload-time = "2026-02-03T02:12:50.575Z" }, - { url = "https://files.pythonhosted.org/packages/9d/33/5b8f89a82a9859ce82da4870c799ad11ce15648b6e1c820fec3e23f4a19f/wrapt-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:428cfc801925454395aa468ba7ddb3ed63dc0d881df7b81626cdd433b4e2b11b", size = 61743, upload-time = "2026-02-03T02:11:55.733Z" }, - { url = "https://files.pythonhosted.org/packages/1e/2f/60c51304fbdf47ce992d9eefa61fbd2c0e64feee60aaa439baf42ea6f40b/wrapt-2.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5797f65e4d58065a49088c3b32af5410751cd485e83ba89e5a45e2aa8905af98", size = 121341, upload-time = "2026-02-03T02:11:20.461Z" }, - { url = "https://files.pythonhosted.org/packages/ad/03/ce5256e66dd94e521ad5e753c78185c01b6eddbed3147be541f4d38c0cb7/wrapt-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a2db44a71202c5ae4bb5f27c6d3afbc5b23053f2e7e78aa29704541b5dad789", size = 122947, upload-time = "2026-02-03T02:11:33.596Z" }, - { url = "https://files.pythonhosted.org/packages/eb/ae/50ca8854b81b946a11a36fcd6ead32336e6db2c14b6e4a8b092b80741178/wrapt-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8d5350c3590af09c1703dd60ec78a7370c0186e11eaafb9dda025a30eee6492d", size = 121370, upload-time = "2026-02-03T02:11:09.886Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d9/d6a7c654e0043319b4cc137a4caaf7aa16b46b51ee8df98d1060254705b7/wrapt-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d9b076411bed964e752c01b49fd224cc385f3a96f520c797d38412d70d08359", size = 120465, upload-time = "2026-02-03T02:11:37.592Z" }, - { url = "https://files.pythonhosted.org/packages/55/90/65be41e40845d951f714b5a77e84f377a3787b1e8eee6555a680da6d0db5/wrapt-2.1.1-cp313-cp313-win32.whl", hash = "sha256:0bb7207130ce6486727baa85373503bf3334cc28016f6928a0fa7e19d7ecdc06", size = 58090, upload-time = "2026-02-03T02:12:53.342Z" }, - { url = "https://files.pythonhosted.org/packages/5f/66/6a09e0294c4fc8c26028a03a15191721c9271672467cc33e6617ee0d91d2/wrapt-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:cbfee35c711046b15147b0ae7db9b976f01c9520e6636d992cd9e69e5e2b03b1", size = 60341, upload-time = "2026-02-03T02:12:36.384Z" }, - { url = "https://files.pythonhosted.org/packages/7a/f0/20ceb8b701e9a71555c87a5ddecbed76ec16742cf1e4b87bbaf26735f998/wrapt-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:7d2756061022aebbf57ba14af9c16e8044e055c22d38de7bf40d92b565ecd2b0", size = 58731, upload-time = "2026-02-03T02:12:01.328Z" }, - { url = "https://files.pythonhosted.org/packages/80/b4/fe95beb8946700b3db371f6ce25115217e7075ca063663b8cca2888ba55c/wrapt-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4814a3e58bc6971e46baa910ecee69699110a2bf06c201e24277c65115a20c20", size = 62969, upload-time = "2026-02-03T02:11:51.245Z" }, - { url = "https://files.pythonhosted.org/packages/b8/89/477b0bdc784e3299edf69c279697372b8bd4c31d9c6966eae405442899df/wrapt-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:106c5123232ab9b9f4903692e1fa0bdc231510098f04c13c3081f8ad71c3d612", size = 63606, upload-time = "2026-02-03T02:12:02.64Z" }, - { url = "https://files.pythonhosted.org/packages/ed/55/9d0c1269ab76de87715b3b905df54dd25d55bbffd0b98696893eb613469f/wrapt-2.1.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1a40b83ff2535e6e56f190aff123821eea89a24c589f7af33413b9c19eb2c738", size = 152536, upload-time = "2026-02-03T02:11:24.492Z" }, - { url = "https://files.pythonhosted.org/packages/44/18/2004766030462f79ad86efaa62000b5e39b1ff001dcce86650e1625f40ae/wrapt-2.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:789cea26e740d71cf1882e3a42bb29052bc4ada15770c90072cb47bf73fb3dbf", size = 158697, upload-time = "2026-02-03T02:12:32.214Z" }, - { url = "https://files.pythonhosted.org/packages/e1/bb/0a880fa0f35e94ee843df4ee4dd52a699c9263f36881311cfb412c09c3e5/wrapt-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ba49c14222d5e5c0ee394495a8655e991dc06cbca5398153aefa5ac08cd6ccd7", size = 155563, upload-time = "2026-02-03T02:11:49.737Z" }, - { url = "https://files.pythonhosted.org/packages/42/ff/cd1b7c4846c8678fac359a6eb975dc7ab5bd606030adb22acc8b4a9f53f1/wrapt-2.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ac8cda531fe55be838a17c62c806824472bb962b3afa47ecbd59b27b78496f4e", size = 150161, upload-time = "2026-02-03T02:12:33.613Z" }, - { url = "https://files.pythonhosted.org/packages/38/ec/67c90a7082f452964b4621e4890e9a490f1add23cdeb7483cc1706743291/wrapt-2.1.1-cp313-cp313t-win32.whl", hash = "sha256:b8af75fe20d381dd5bcc9db2e86a86d7fcfbf615383a7147b85da97c1182225b", size = 59783, upload-time = "2026-02-03T02:11:39.863Z" }, - { url = "https://files.pythonhosted.org/packages/ec/08/466afe4855847d8febdfa2c57c87e991fc5820afbdef01a273683dfd15a0/wrapt-2.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:45c5631c9b6c792b78be2d7352129f776dd72c605be2c3a4e9be346be8376d83", size = 63082, upload-time = "2026-02-03T02:12:09.075Z" }, - { url = "https://files.pythonhosted.org/packages/9a/62/60b629463c28b15b1eeadb3a0691e17568622b12aa5bfa7ebe9b514bfbeb/wrapt-2.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:da815b9263947ac98d088b6414ac83507809a1d385e4632d9489867228d6d81c", size = 60251, upload-time = "2026-02-03T02:11:21.794Z" }, - { url = "https://files.pythonhosted.org/packages/95/a0/1c2396e272f91efe6b16a6a8bce7ad53856c8f9ae4f34ceaa711d63ec9e1/wrapt-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9aa1765054245bb01a37f615503290d4e207e3fd59226e78341afb587e9c1236", size = 61311, upload-time = "2026-02-03T02:12:44.41Z" }, - { url = "https://files.pythonhosted.org/packages/b0/9a/d2faba7e61072a7507b5722db63562fdb22f5a24e237d460d18755627f15/wrapt-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:feff14b63a6d86c1eee33a57f77573649f2550935981625be7ff3cb7342efe05", size = 61805, upload-time = "2026-02-03T02:11:59.905Z" }, - { url = "https://files.pythonhosted.org/packages/db/56/073989deb4b5d7d6e7ea424476a4ae4bda02140f2dbeaafb14ba4864dd60/wrapt-2.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:81fc5f22d5fcfdbabde96bb3f5379b9f4476d05c6d524d7259dc5dfb501d3281", size = 120308, upload-time = "2026-02-03T02:12:04.46Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b6/84f37261295e38167a29eb82affaf1dc15948dc416925fe2091beee8e4ac/wrapt-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:951b228ecf66def855d22e006ab9a1fc12535111ae7db2ec576c728f8ddb39e8", size = 122688, upload-time = "2026-02-03T02:11:23.148Z" }, - { url = "https://files.pythonhosted.org/packages/ea/80/32db2eec6671f80c65b7ff175be61bc73d7f5223f6910b0c921bbc4bd11c/wrapt-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ddf582a95641b9a8c8bd643e83f34ecbbfe1b68bc3850093605e469ab680ae3", size = 121115, upload-time = "2026-02-03T02:12:39.068Z" }, - { url = "https://files.pythonhosted.org/packages/49/ef/dcd00383df0cd696614127902153bf067971a5aabcd3c9dcb2d8ef354b2a/wrapt-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fc5c500966bf48913f795f1984704e6d452ba2414207b15e1f8c339a059d5b16", size = 119484, upload-time = "2026-02-03T02:11:48.419Z" }, - { url = "https://files.pythonhosted.org/packages/76/29/0630280cdd2bd8f86f35cb6854abee1c9d6d1a28a0c6b6417cd15d378325/wrapt-2.1.1-cp314-cp314-win32.whl", hash = "sha256:4aa4baadb1f94b71151b8e44a0c044f6af37396c3b8bcd474b78b49e2130a23b", size = 58514, upload-time = "2026-02-03T02:11:58.616Z" }, - { url = "https://files.pythonhosted.org/packages/db/19/5bed84f9089ed2065f6aeda5dfc4f043743f642bc871454b261c3d7d322b/wrapt-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:860e9d3fd81816a9f4e40812f28be4439ab01f260603c749d14be3c0a1170d19", size = 60763, upload-time = "2026-02-03T02:12:24.553Z" }, - { url = "https://files.pythonhosted.org/packages/e4/cb/b967f2f9669e4249b4fe82e630d2a01bc6b9e362b9b12ed91bbe23ae8df4/wrapt-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3c59e103017a2c1ea0ddf589cbefd63f91081d7ce9d491d69ff2512bb1157e23", size = 59051, upload-time = "2026-02-03T02:11:29.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/19/6fed62be29f97eb8a56aff236c3f960a4b4a86e8379dc7046a8005901a97/wrapt-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9fa7c7e1bee9278fc4f5dd8275bc8d25493281a8ec6c61959e37cc46acf02007", size = 63059, upload-time = "2026-02-03T02:12:06.368Z" }, - { url = "https://files.pythonhosted.org/packages/0a/1c/b757fd0adb53d91547ed8fad76ba14a5932d83dde4c994846a2804596378/wrapt-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:39c35e12e8215628984248bd9c8897ce0a474be2a773db207eb93414219d8469", size = 63618, upload-time = "2026-02-03T02:12:23.197Z" }, - { url = "https://files.pythonhosted.org/packages/10/fe/e5ae17b1480957c7988d991b93df9f2425fc51f128cf88144d6a18d0eb12/wrapt-2.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:94ded4540cac9125eaa8ddf5f651a7ec0da6f5b9f248fe0347b597098f8ec14c", size = 152544, upload-time = "2026-02-03T02:11:43.915Z" }, - { url = "https://files.pythonhosted.org/packages/3e/cc/99aed210c6b547b8a6e4cb9d1425e4466727158a6aeb833aa7997e9e08dd/wrapt-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da0af328373f97ed9bdfea24549ac1b944096a5a71b30e41c9b8b53ab3eec04a", size = 158700, upload-time = "2026-02-03T02:12:30.684Z" }, - { url = "https://files.pythonhosted.org/packages/81/0e/d442f745f4957944d5f8ad38bc3a96620bfff3562533b87e486e979f3d99/wrapt-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4ad839b55f0bf235f8e337ce060572d7a06592592f600f3a3029168e838469d3", size = 155561, upload-time = "2026-02-03T02:11:28.164Z" }, - { url = "https://files.pythonhosted.org/packages/51/ac/9891816280e0018c48f8dfd61b136af7b0dcb4a088895db2531acde5631b/wrapt-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0d89c49356e5e2a50fa86b40e0510082abcd0530f926cbd71cf25bee6b9d82d7", size = 150188, upload-time = "2026-02-03T02:11:57.053Z" }, - { url = "https://files.pythonhosted.org/packages/24/98/e2f273b6d70d41f98d0739aa9a269d0b633684a5fb17b9229709375748d4/wrapt-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:f4c7dd22cf7f36aafe772f3d88656559205c3af1b7900adfccb70edeb0d2abc4", size = 60425, upload-time = "2026-02-03T02:11:35.007Z" }, - { url = "https://files.pythonhosted.org/packages/1e/06/b500bfc38a4f82d89f34a13069e748c82c5430d365d9e6b75afb3ab74457/wrapt-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f76bc12c583ab01e73ba0ea585465a41e48d968f6d1311b4daec4f8654e356e3", size = 63855, upload-time = "2026-02-03T02:12:15.47Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cc/5f6193c32166faee1d2a613f278608e6f3b95b96589d020f0088459c46c9/wrapt-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:7ea74fc0bec172f1ae5f3505b6655c541786a5cabe4bbc0d9723a56ac32eb9b9", size = 60443, upload-time = "2026-02-03T02:11:30.869Z" }, - { url = "https://files.pythonhosted.org/packages/c4/da/5a086bf4c22a41995312db104ec2ffeee2cf6accca9faaee5315c790377d/wrapt-2.1.1-py3-none-any.whl", hash = "sha256:3b0f4629eb954394a3d7c7a1c8cca25f0b07cefe6aa8545e862e9778152de5b7", size = 43886, upload-time = "2026-02-03T02:11:45.048Z" }, +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/64/925f213fdcbb9baeb1530449ac71a4d57fc361c053d06bf78d0c5c7cd80c/wrapt-2.1.2.tar.gz", hash = "sha256:3996a67eecc2c68fd47b4e3c564405a5777367adfd9b8abb58387b63ee83b21e", size = 81678, upload-time = "2026-03-06T02:53:25.134Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/d2/387594fb592d027366645f3d7cc9b4d7ca7be93845fbaba6d835a912ef3c/wrapt-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a86d99a14f76facb269dc148590c01aaf47584071809a70da30555228158c", size = 60669, upload-time = "2026-03-06T02:52:40.671Z" }, + { url = "https://files.pythonhosted.org/packages/c9/18/3f373935bc5509e7ac444c8026a56762e50c1183e7061797437ca96c12ce/wrapt-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a819e39017f95bf7aede768f75915635aa8f671f2993c036991b8d3bfe8dbb6f", size = 61603, upload-time = "2026-03-06T02:54:21.032Z" }, + { url = "https://files.pythonhosted.org/packages/c2/7a/32758ca2853b07a887a4574b74e28843919103194bb47001a304e24af62f/wrapt-2.1.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5681123e60aed0e64c7d44f72bbf8b4ce45f79d81467e2c4c728629f5baf06eb", size = 113632, upload-time = "2026-03-06T02:53:54.121Z" }, + { url = "https://files.pythonhosted.org/packages/1d/d5/eeaa38f670d462e97d978b3b0d9ce06d5b91e54bebac6fbed867809216e7/wrapt-2.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b8b28e97a44d21836259739ae76284e180b18abbb4dcfdff07a415cf1016c3e", size = 115644, upload-time = "2026-03-06T02:54:53.33Z" }, + { url = "https://files.pythonhosted.org/packages/e3/09/2a41506cb17affb0bdf9d5e2129c8c19e192b388c4c01d05e1b14db23c00/wrapt-2.1.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cef91c95a50596fcdc31397eb6955476f82ae8a3f5a8eabdc13611b60ee380ba", size = 112016, upload-time = "2026-03-06T02:54:43.274Z" }, + { url = "https://files.pythonhosted.org/packages/64/15/0e6c3f5e87caadc43db279724ee36979246d5194fa32fed489c73643ba59/wrapt-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dad63212b168de8569b1c512f4eac4b57f2c6934b30df32d6ee9534a79f1493f", size = 114823, upload-time = "2026-03-06T02:54:29.392Z" }, + { url = "https://files.pythonhosted.org/packages/56/b2/0ad17c8248f4e57bedf44938c26ec3ee194715f812d2dbbd9d7ff4be6c06/wrapt-2.1.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d307aa6888d5efab2c1cde09843d48c843990be13069003184b67d426d145394", size = 111244, upload-time = "2026-03-06T02:54:02.149Z" }, + { url = "https://files.pythonhosted.org/packages/ff/04/bcdba98c26f2c6522c7c09a726d5d9229120163493620205b2f76bd13c01/wrapt-2.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c87cf3f0c85e27b3ac7d9ad95da166bf8739ca215a8b171e8404a2d739897a45", size = 113307, upload-time = "2026-03-06T02:54:12.428Z" }, + { url = "https://files.pythonhosted.org/packages/0e/1b/5e2883c6bc14143924e465a6fc5a92d09eeabe35310842a481fb0581f832/wrapt-2.1.2-cp310-cp310-win32.whl", hash = "sha256:d1c5fea4f9fe3762e2b905fdd67df51e4be7a73b7674957af2d2ade71a5c075d", size = 57986, upload-time = "2026-03-06T02:54:26.823Z" }, + { url = "https://files.pythonhosted.org/packages/42/5a/4efc997bccadd3af5749c250b49412793bc41e13a83a486b2b54a33e240c/wrapt-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:d8f7740e1af13dff2684e4d56fe604a7e04d6c94e737a60568d8d4238b9a0c71", size = 60336, upload-time = "2026-03-06T02:54:18Z" }, + { url = "https://files.pythonhosted.org/packages/c1/f5/a2bb833e20181b937e87c242645ed5d5aa9c373006b0467bfe1a35c727d0/wrapt-2.1.2-cp310-cp310-win_arm64.whl", hash = "sha256:1c6cc827c00dc839350155f316f1f8b4b0c370f52b6a19e782e2bda89600c7dc", size = 58757, upload-time = "2026-03-06T02:53:51.545Z" }, + { url = "https://files.pythonhosted.org/packages/c7/81/60c4471fce95afa5922ca09b88a25f03c93343f759aae0f31fb4412a85c7/wrapt-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96159a0ee2b0277d44201c3b5be479a9979cf154e8c82fa5df49586a8e7679bb", size = 60666, upload-time = "2026-03-06T02:52:58.934Z" }, + { url = "https://files.pythonhosted.org/packages/6b/be/80e80e39e7cb90b006a0eaf11c73ac3a62bbfb3068469aec15cc0bc795de/wrapt-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98ba61833a77b747901e9012072f038795de7fc77849f1faa965464f3f87ff2d", size = 61601, upload-time = "2026-03-06T02:53:00.487Z" }, + { url = "https://files.pythonhosted.org/packages/b0/be/d7c88cd9293c859fc74b232abdc65a229bb953997995d6912fc85af18323/wrapt-2.1.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:767c0dbbe76cae2a60dd2b235ac0c87c9cccf4898aef8062e57bead46b5f6894", size = 114057, upload-time = "2026-03-06T02:52:44.08Z" }, + { url = "https://files.pythonhosted.org/packages/ea/25/36c04602831a4d685d45a93b3abea61eca7fe35dab6c842d6f5d570ef94a/wrapt-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c691a6bc752c0cc4711cc0c00896fcd0f116abc253609ef64ef930032821842", size = 116099, upload-time = "2026-03-06T02:54:56.74Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4e/98a6eb417ef551dc277bec1253d5246b25003cf36fdf3913b65cb7657a56/wrapt-2.1.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f3b7d73012ea75aee5844de58c88f44cf62d0d62711e39da5a82824a7c4626a8", size = 112457, upload-time = "2026-03-06T02:53:52.842Z" }, + { url = "https://files.pythonhosted.org/packages/cb/a6/a6f7186a5297cad8ec53fd7578533b28f795fdf5372368c74bd7e6e9841c/wrapt-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:577dff354e7acd9d411eaf4bfe76b724c89c89c8fc9b7e127ee28c5f7bcb25b6", size = 115351, upload-time = "2026-03-06T02:53:32.684Z" }, + { url = "https://files.pythonhosted.org/packages/97/6f/06e66189e721dbebd5cf20e138acc4d1150288ce118462f2fcbff92d38db/wrapt-2.1.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3d7b6fd105f8b24e5bd23ccf41cb1d1099796524bcc6f7fbb8fe576c44befbc9", size = 111748, upload-time = "2026-03-06T02:53:08.455Z" }, + { url = "https://files.pythonhosted.org/packages/ef/43/4808b86f499a51370fbdbdfa6cb91e9b9169e762716456471b619fca7a70/wrapt-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:866abdbf4612e0b34764922ef8b1c5668867610a718d3053d59e24a5e5fcfc15", size = 113783, upload-time = "2026-03-06T02:53:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/91/2c/a3f28b8fa7ac2cefa01cfcaca3471f9b0460608d012b693998cd61ef43df/wrapt-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5a0a0a3a882393095573344075189eb2d566e0fd205a2b6414e9997b1b800a8b", size = 57977, upload-time = "2026-03-06T02:53:27.844Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c3/2b1c7bd07a27b1db885a2fab469b707bdd35bddf30a113b4917a7e2139d2/wrapt-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:64a07a71d2730ba56f11d1a4b91f7817dc79bc134c11516b75d1921a7c6fcda1", size = 60336, upload-time = "2026-03-06T02:54:28.104Z" }, + { url = "https://files.pythonhosted.org/packages/ec/5c/76ece7b401b088daa6503d6264dd80f9a727df3e6042802de9a223084ea2/wrapt-2.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:b89f095fe98bc12107f82a9f7d570dc83a0870291aeb6b1d7a7d35575f55d98a", size = 58756, upload-time = "2026-03-06T02:53:16.319Z" }, + { url = "https://files.pythonhosted.org/packages/4c/b6/1db817582c49c7fcbb7df6809d0f515af29d7c2fbf57eb44c36e98fb1492/wrapt-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ff2aad9c4cda28a8f0653fc2d487596458c2a3f475e56ba02909e950a9efa6a9", size = 61255, upload-time = "2026-03-06T02:52:45.663Z" }, + { url = "https://files.pythonhosted.org/packages/a2/16/9b02a6b99c09227c93cd4b73acc3678114154ec38da53043c0ddc1fba0dc/wrapt-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6433ea84e1cfacf32021d2a4ee909554ade7fd392caa6f7c13f1f4bf7b8e8748", size = 61848, upload-time = "2026-03-06T02:53:48.728Z" }, + { url = "https://files.pythonhosted.org/packages/af/aa/ead46a88f9ec3a432a4832dfedb84092fc35af2d0ba40cd04aea3889f247/wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c20b757c268d30d6215916a5fa8461048d023865d888e437fab451139cad6c8e", size = 121433, upload-time = "2026-03-06T02:54:40.328Z" }, + { url = "https://files.pythonhosted.org/packages/3a/9f/742c7c7cdf58b59085a1ee4b6c37b013f66ac33673a7ef4aaed5e992bc33/wrapt-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79847b83eb38e70d93dc392c7c5b587efe65b3e7afcc167aa8abd5d60e8761c8", size = 123013, upload-time = "2026-03-06T02:53:26.58Z" }, + { url = "https://files.pythonhosted.org/packages/e8/44/2c3dd45d53236b7ed7c646fcf212251dc19e48e599debd3926b52310fafb/wrapt-2.1.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f8fba1bae256186a83d1875b2b1f4e2d1242e8fac0f58ec0d7e41b26967b965c", size = 117326, upload-time = "2026-03-06T02:53:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/74/e2/b17d66abc26bd96f89dec0ecd0ef03da4a1286e6ff793839ec431b9fae57/wrapt-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3d3b35eedcf5f7d022291ecd7533321c4775f7b9cd0050a31a68499ba45757c", size = 121444, upload-time = "2026-03-06T02:54:09.5Z" }, + { url = "https://files.pythonhosted.org/packages/3c/62/e2977843fdf9f03daf1586a0ff49060b1b2fc7ff85a7ea82b6217c1ae36e/wrapt-2.1.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:6f2c5390460de57fa9582bc8a1b7a6c86e1a41dfad74c5225fc07044c15cc8d1", size = 116237, upload-time = "2026-03-06T02:54:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/27fc67914e68d740bce512f11734aec08696e6b17641fef8867c00c949fc/wrapt-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7dfa9f2cf65d027b951d05c662cc99ee3bd01f6e4691ed39848a7a5fffc902b2", size = 120563, upload-time = "2026-03-06T02:53:20.412Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9f/b750b3692ed2ef4705cb305bd68858e73010492b80e43d2a4faa5573cbe7/wrapt-2.1.2-cp312-cp312-win32.whl", hash = "sha256:eba8155747eb2cae4a0b913d9ebd12a1db4d860fc4c829d7578c7b989bd3f2f0", size = 58198, upload-time = "2026-03-06T02:53:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/8e/b2/feecfe29f28483d888d76a48f03c4c4d8afea944dbee2b0cd3380f9df032/wrapt-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1c51c738d7d9faa0b3601708e7e2eda9bf779e1b601dce6c77411f2a1b324a63", size = 60441, upload-time = "2026-03-06T02:52:47.138Z" }, + { url = "https://files.pythonhosted.org/packages/44/e1/e328f605d6e208547ea9fd120804fcdec68536ac748987a68c47c606eea8/wrapt-2.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:c8e46ae8e4032792eb2f677dbd0d557170a8e5524d22acc55199f43efedd39bf", size = 58836, upload-time = "2026-03-06T02:53:22.053Z" }, + { url = "https://files.pythonhosted.org/packages/4c/7a/d936840735c828b38d26a854e85d5338894cda544cb7a85a9d5b8b9c4df7/wrapt-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787fd6f4d67befa6fe2abdffcbd3de2d82dfc6fb8a6d850407c53332709d030b", size = 61259, upload-time = "2026-03-06T02:53:41.922Z" }, + { url = "https://files.pythonhosted.org/packages/5e/88/9a9b9a90ac8ca11c2fdb6a286cb3a1fc7dd774c00ed70929a6434f6bc634/wrapt-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4bdf26e03e6d0da3f0e9422fd36bcebf7bc0eeb55fdf9c727a09abc6b9fe472e", size = 61851, upload-time = "2026-03-06T02:52:48.672Z" }, + { url = "https://files.pythonhosted.org/packages/03/a9/5b7d6a16fd6533fed2756900fc8fc923f678179aea62ada6d65c92718c00/wrapt-2.1.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bbac24d879aa22998e87f6b3f481a5216311e7d53c7db87f189a7a0266dafffb", size = 121446, upload-time = "2026-03-06T02:54:14.013Z" }, + { url = "https://files.pythonhosted.org/packages/45/bb/34c443690c847835cfe9f892be78c533d4f32366ad2888972c094a897e39/wrapt-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:16997dfb9d67addc2e3f41b62a104341e80cac52f91110dece393923c0ebd5ca", size = 123056, upload-time = "2026-03-06T02:54:10.829Z" }, + { url = "https://files.pythonhosted.org/packages/93/b9/ff205f391cb708f67f41ea148545f2b53ff543a7ac293b30d178af4d2271/wrapt-2.1.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:162e4e2ba7542da9027821cb6e7c5e068d64f9a10b5f15512ea28e954893a267", size = 117359, upload-time = "2026-03-06T02:53:03.623Z" }, + { url = "https://files.pythonhosted.org/packages/1f/3d/1ea04d7747825119c3c9a5e0874a40b33594ada92e5649347c457d982805/wrapt-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f29c827a8d9936ac320746747a016c4bc66ef639f5cd0d32df24f5eacbf9c69f", size = 121479, upload-time = "2026-03-06T02:53:45.844Z" }, + { url = "https://files.pythonhosted.org/packages/78/cc/ee3a011920c7a023b25e8df26f306b2484a531ab84ca5c96260a73de76c0/wrapt-2.1.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:a9dd9813825f7ecb018c17fd147a01845eb330254dff86d3b5816f20f4d6aaf8", size = 116271, upload-time = "2026-03-06T02:54:46.356Z" }, + { url = "https://files.pythonhosted.org/packages/98/fd/e5ff7ded41b76d802cf1191288473e850d24ba2e39a6ec540f21ae3b57cb/wrapt-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f8dbdd3719e534860d6a78526aafc220e0241f981367018c2875178cf83a413", size = 120573, upload-time = "2026-03-06T02:52:50.163Z" }, + { url = "https://files.pythonhosted.org/packages/47/c5/242cae3b5b080cd09bacef0591691ba1879739050cc7c801ff35c8886b66/wrapt-2.1.2-cp313-cp313-win32.whl", hash = "sha256:5c35b5d82b16a3bc6e0a04349b606a0582bc29f573786aebe98e0c159bc48db6", size = 58205, upload-time = "2026-03-06T02:53:47.494Z" }, + { url = "https://files.pythonhosted.org/packages/12/69/c358c61e7a50f290958809b3c61ebe8b3838ea3e070d7aac9814f95a0528/wrapt-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f8bc1c264d8d1cf5b3560a87bbdd31131573eb25f9f9447bb6252b8d4c44a3a1", size = 60452, upload-time = "2026-03-06T02:53:30.038Z" }, + { url = "https://files.pythonhosted.org/packages/8e/66/c8a6fcfe321295fd8c0ab1bd685b5a01462a9b3aa2f597254462fc2bc975/wrapt-2.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:3beb22f674550d5634642c645aba4c72a2c66fb185ae1aebe1e955fae5a13baf", size = 58842, upload-time = "2026-03-06T02:52:52.114Z" }, + { url = "https://files.pythonhosted.org/packages/da/55/9c7052c349106e0b3f17ae8db4b23a691a963c334de7f9dbd60f8f74a831/wrapt-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fc04bc8664a8bc4c8e00b37b5355cffca2535209fba1abb09ae2b7c76ddf82b", size = 63075, upload-time = "2026-03-06T02:53:19.108Z" }, + { url = "https://files.pythonhosted.org/packages/09/a8/ce7b4006f7218248dd71b7b2b732d0710845a0e49213b18faef64811ffef/wrapt-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a9b9d50c9af998875a1482a038eb05755dfd6fe303a313f6a940bb53a83c3f18", size = 63719, upload-time = "2026-03-06T02:54:33.452Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e5/2ca472e80b9e2b7a17f106bb8f9df1db11e62101652ce210f66935c6af67/wrapt-2.1.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2d3ff4f0024dd224290c0eabf0240f1bfc1f26363431505fb1b0283d3b08f11d", size = 152643, upload-time = "2026-03-06T02:52:42.721Z" }, + { url = "https://files.pythonhosted.org/packages/36/42/30f0f2cefca9d9cbf6835f544d825064570203c3e70aa873d8ae12e23791/wrapt-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3278c471f4468ad544a691b31bb856374fbdefb7fee1a152153e64019379f015", size = 158805, upload-time = "2026-03-06T02:54:25.441Z" }, + { url = "https://files.pythonhosted.org/packages/bb/67/d08672f801f604889dcf58f1a0b424fe3808860ede9e03affc1876b295af/wrapt-2.1.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8914c754d3134a3032601c6984db1c576e6abaf3fc68094bb8ab1379d75ff92", size = 145990, upload-time = "2026-03-06T02:53:57.456Z" }, + { url = "https://files.pythonhosted.org/packages/68/a7/fd371b02e73babec1de6ade596e8cd9691051058cfdadbfd62a5898f3295/wrapt-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ff95d4264e55839be37bafe1536db2ab2de19da6b65f9244f01f332b5286cfbf", size = 155670, upload-time = "2026-03-06T02:54:55.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/9fe0095dfdb621009f40117dcebf41d7396c2c22dca6eac779f4c007b86c/wrapt-2.1.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:76405518ca4e1b76fbb1b9f686cff93aebae03920cc55ceeec48ff9f719c5f67", size = 144357, upload-time = "2026-03-06T02:54:24.092Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b6/ec7b4a254abbe4cde9fa15c5d2cca4518f6b07d0f1b77d4ee9655e30280e/wrapt-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c0be8b5a74c5824e9359b53e7e58bef71a729bacc82e16587db1c4ebc91f7c5a", size = 150269, upload-time = "2026-03-06T02:53:31.268Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6b/2fabe8ebf148f4ee3c782aae86a795cc68ffe7d432ef550f234025ce0cfa/wrapt-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:f01277d9a5fc1862f26f7626da9cf443bebc0abd2f303f41c5e995b15887dabd", size = 59894, upload-time = "2026-03-06T02:54:15.391Z" }, + { url = "https://files.pythonhosted.org/packages/ca/fb/9ba66fc2dedc936de5f8073c0217b5d4484e966d87723415cc8262c5d9c2/wrapt-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:84ce8f1c2104d2f6daa912b1b5b039f331febfeee74f8042ad4e04992bd95c8f", size = 63197, upload-time = "2026-03-06T02:54:41.943Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1c/012d7423c95d0e337117723eb8ecf73c622ce15a97847e84cf3f8f26cd7e/wrapt-2.1.2-cp313-cp313t-win_arm64.whl", hash = "sha256:a93cd767e37faeddbe07d8fc4212d5cba660af59bdb0f6372c93faaa13e6e679", size = 60363, upload-time = "2026-03-06T02:54:48.093Z" }, + { url = "https://files.pythonhosted.org/packages/39/25/e7ea0b417db02bb796182a5316398a75792cd9a22528783d868755e1f669/wrapt-2.1.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1370e516598854e5b4366e09ce81e08bfe94d42b0fd569b88ec46cc56d9164a9", size = 61418, upload-time = "2026-03-06T02:53:55.706Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0f/fa539e2f6a770249907757eaeb9a5ff4deb41c026f8466c1c6d799088a9b/wrapt-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6de1a3851c27e0bd6a04ca993ea6f80fc53e6c742ee1601f486c08e9f9b900a9", size = 61914, upload-time = "2026-03-06T02:52:53.37Z" }, + { url = "https://files.pythonhosted.org/packages/53/37/02af1867f5b1441aaeda9c82deed061b7cd1372572ddcd717f6df90b5e93/wrapt-2.1.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:de9f1a2bbc5ac7f6012ec24525bdd444765a2ff64b5985ac6e0692144838542e", size = 120417, upload-time = "2026-03-06T02:54:30.74Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b7/0138a6238c8ba7476c77cf786a807f871672b37f37a422970342308276e7/wrapt-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:970d57ed83fa040d8b20c52fe74a6ae7e3775ae8cff5efd6a81e06b19078484c", size = 122797, upload-time = "2026-03-06T02:54:51.539Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ad/819ae558036d6a15b7ed290d5b14e209ca795dd4da9c58e50c067d5927b0/wrapt-2.1.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3969c56e4563c375861c8df14fa55146e81ac11c8db49ea6fb7f2ba58bc1ff9a", size = 117350, upload-time = "2026-03-06T02:54:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/8b/2d/afc18dc57a4600a6e594f77a9ae09db54f55ba455440a54886694a84c71b/wrapt-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:57d7c0c980abdc5f1d98b11a2aa3bb159790add80258c717fa49a99921456d90", size = 121223, upload-time = "2026-03-06T02:54:35.221Z" }, + { url = "https://files.pythonhosted.org/packages/b9/5b/5ec189b22205697bc56eb3b62aed87a1e0423e9c8285d0781c7a83170d15/wrapt-2.1.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:776867878e83130c7a04237010463372e877c1c994d449ca6aaafeab6aab2586", size = 116287, upload-time = "2026-03-06T02:54:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/f7/2d/f84939a7c9b5e6cdd8a8d0f6a26cabf36a0f7e468b967720e8b0cd2bdf69/wrapt-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fab036efe5464ec3291411fabb80a7a39e2dd80bae9bcbeeca5087fdfa891e19", size = 119593, upload-time = "2026-03-06T02:54:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/0b/fe/ccd22a1263159c4ac811ab9374c061bcb4a702773f6e06e38de5f81a1bdc/wrapt-2.1.2-cp314-cp314-win32.whl", hash = "sha256:e6ed62c82ddf58d001096ae84ce7f833db97ae2263bff31c9b336ba8cfe3f508", size = 58631, upload-time = "2026-03-06T02:53:06.498Z" }, + { url = "https://files.pythonhosted.org/packages/65/0a/6bd83be7bff2e7efaac7b4ac9748da9d75a34634bbbbc8ad077d527146df/wrapt-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:467e7c76315390331c67073073d00662015bb730c566820c9ca9b54e4d67fd04", size = 60875, upload-time = "2026-03-06T02:53:50.252Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c0/0b3056397fe02ff80e5a5d72d627c11eb885d1ca78e71b1a5c1e8c7d45de/wrapt-2.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:da1f00a557c66225d53b095a97eace0fc5349e3bfda28fa34ffae238978ee575", size = 59164, upload-time = "2026-03-06T02:53:59.128Z" }, + { url = "https://files.pythonhosted.org/packages/71/ed/5d89c798741993b2371396eb9d4634f009ff1ad8a6c78d366fe2883ea7a6/wrapt-2.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:62503ffbc2d3a69891cf29beeaccdb4d5e0a126e2b6a851688d4777e01428dbb", size = 63163, upload-time = "2026-03-06T02:52:54.873Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8c/05d277d182bf36b0a13d6bd393ed1dec3468a25b59d01fba2dd70fe4d6ae/wrapt-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c7e6cd120ef837d5b6f860a6ea3745f8763805c418bb2f12eeb1fa6e25f22d22", size = 63723, upload-time = "2026-03-06T02:52:56.374Z" }, + { url = "https://files.pythonhosted.org/packages/f4/27/6c51ec1eff4413c57e72d6106bb8dec6f0c7cdba6503d78f0fa98767bcc9/wrapt-2.1.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3769a77df8e756d65fbc050333f423c01ae012b4f6731aaf70cf2bef61b34596", size = 152652, upload-time = "2026-03-06T02:53:23.79Z" }, + { url = "https://files.pythonhosted.org/packages/db/4c/d7dd662d6963fc7335bfe29d512b02b71cdfa23eeca7ab3ac74a67505deb/wrapt-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a76d61a2e851996150ba0f80582dd92a870643fa481f3b3846f229de88caf044", size = 158807, upload-time = "2026-03-06T02:53:35.742Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4d/1e5eea1a78d539d346765727422976676615814029522c76b87a95f6bcdd/wrapt-2.1.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6f97edc9842cf215312b75fe737ee7c8adda75a89979f8e11558dfff6343cc4b", size = 146061, upload-time = "2026-03-06T02:52:57.574Z" }, + { url = "https://files.pythonhosted.org/packages/89/bc/62cabea7695cd12a288023251eeefdcb8465056ddaab6227cb78a2de005b/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4006c351de6d5007aa33a551f600404ba44228a89e833d2fadc5caa5de8edfbf", size = 155667, upload-time = "2026-03-06T02:53:39.422Z" }, + { url = "https://files.pythonhosted.org/packages/e9/99/6f2888cd68588f24df3a76572c69c2de28287acb9e1972bf0c83ce97dbc1/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a9372fc3639a878c8e7d87e1556fa209091b0a66e912c611e3f833e2c4202be2", size = 144392, upload-time = "2026-03-06T02:54:22.41Z" }, + { url = "https://files.pythonhosted.org/packages/40/51/1dfc783a6c57971614c48e361a82ca3b6da9055879952587bc99fe1a7171/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3144b027ff30cbd2fca07c0a87e67011adb717eb5f5bd8496325c17e454257a3", size = 150296, upload-time = "2026-03-06T02:54:07.848Z" }, + { url = "https://files.pythonhosted.org/packages/6c/38/cbb8b933a0201076c1f64fc42883b0023002bdc14a4964219154e6ff3350/wrapt-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:3b8d15e52e195813efe5db8cec156eebe339aaf84222f4f4f051a6c01f237ed7", size = 60539, upload-time = "2026-03-06T02:54:00.594Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/e5176e4b241c9f528402cebb238a36785a628179d7d8b71091154b3e4c9e/wrapt-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:08ffa54146a7559f5b8df4b289b46d963a8e74ed16ba3687f99896101a3990c5", size = 63969, upload-time = "2026-03-06T02:54:39Z" }, + { url = "https://files.pythonhosted.org/packages/5c/99/79f17046cf67e4a95b9987ea129632ba8bcec0bc81f3fb3d19bdb0bd60cd/wrapt-2.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:72aaa9d0d8e4ed0e2e98019cea47a21f823c9dd4b43c7b77bba6679ffcca6a00", size = 60554, upload-time = "2026-03-06T02:53:14.132Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c7/8528ac2dfa2c1e6708f647df7ae144ead13f0a31146f43c7264b4942bf12/wrapt-2.1.2-py3-none-any.whl", hash = "sha256:b8fd6fa2b2c4e7621808f8c62e8317f4aae56e59721ad933bac5239d913cf0e8", size = 43993, upload-time = "2026-03-06T02:53:12.905Z" }, ] [[package]] name = "xmltodict" -version = "1.0.3" +version = "1.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/66/d1242ce8748c698e0036837dfbb530480e31f11d3ecf7101cd4e30d29913/xmltodict-1.0.3.tar.gz", hash = "sha256:3bf1f49c7836df34cf6d9cc7e690c4351f7dfff2ab0b8a1988bba4a9b9474909", size = 25170, upload-time = "2026-02-15T04:05:05.728Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/70/80f3b7c10d2630aa66414bf23d210386700aa390547278c789afa994fd7e/xmltodict-1.0.4.tar.gz", hash = "sha256:6d94c9f834dd9e44514162799d344d815a3a4faec913717a9ecbfa5be1bb8e61", size = 26124, upload-time = "2026-02-22T02:21:22.074Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/df/5c50d5bfc886cf61e665f34925e70c7d5ab1d39db0bcc4a03f6fdae3cd76/xmltodict-1.0.3-py3-none-any.whl", hash = "sha256:35d65d5c08f2a1121df338a0c4e49ca638480fa7c1b899ded45e0759bf32e40e", size = 13295, upload-time = "2026-02-15T04:05:04.407Z" }, + { url = "https://files.pythonhosted.org/packages/38/34/98a2f52245f4d47be93b580dae5f9861ef58977d73a79eb47c58f1ad1f3a/xmltodict-1.0.4-py3-none-any.whl", hash = "sha256:a4a00d300b0e1c59fc2bfccb53d7b2e88c32f200df138a0dd2229f842497026a", size = 13580, upload-time = "2026-02-22T02:21:21.039Z" }, ] [[package]] From 6a20f1cfcc869102ef990cd089621e337b7e91fa Mon Sep 17 00:00:00 2001 From: mikezelenskyy Date: Wed, 1 Apr 2026 15:20:10 +0200 Subject: [PATCH 2/4] fix(gooddata-sdk): update type annotations for ty 0.0.27 and fix Arrow result reading --- .../gooddata-fdw/src/gooddata_fdw/executor.py | 7 +++- .../data_source/entity_model/data_source.py | 2 +- .../src/gooddata_sdk/catalog/entity.py | 6 +-- .../gooddata_sdk/compute/model/execution.py | 37 ++++++++++++++++++- .../src/gooddata_sdk/compute/model/filter.py | 2 +- .../src/gooddata_sdk/type_converter.py | 2 +- 6 files changed, 47 insertions(+), 9 deletions(-) diff --git a/packages/gooddata-fdw/src/gooddata_fdw/executor.py b/packages/gooddata-fdw/src/gooddata_fdw/executor.py index f884a377c..41dcb6168 100644 --- a/packages/gooddata-fdw/src/gooddata_fdw/executor.py +++ b/packages/gooddata-fdw/src/gooddata_fdw/executor.py @@ -2,7 +2,7 @@ from __future__ import annotations from collections.abc import Generator -from typing import Any, NamedTuple +from typing import Any, ClassVar, NamedTuple from gooddata_sdk import GoodDataSdk @@ -43,7 +43,10 @@ def execute( class InsightExecutor(Executor): - _COLUMN_VALIDATORS = [col_val.LocalIdOptionValidator(), col_val.IdOptionValidator(mandatory=False)] + _COLUMN_VALIDATORS: ClassVar[list[col_val.ColumnValidator]] = [ + col_val.LocalIdOptionValidator(), + col_val.IdOptionValidator(mandatory=False), + ] def __init__(self, inputs: InitData) -> None: super().__init__(inputs, self._COLUMN_VALIDATORS) diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/data_source/entity_model/data_source.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/data_source/entity_model/data_source.py index d3a92a038..43b0163fb 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/catalog/data_source/entity_model/data_source.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/data_source/entity_model/data_source.py @@ -62,7 +62,7 @@ class CatalogDataSourceBase(Base): credentials: Credentials = field(repr=False) alternative_data_source_id: str | None = None - @type.validator # type: ignore[attr-defined] + @type.validator # type: ignore def _check_allowed_values(self, attribute: Attribute, value: str) -> None: value_in_allowed(self.__class__, attribute, value, JsonApiDataSourceInAttributes) diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/entity.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/entity.py index 88efa82d5..111c61c5a 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/catalog/entity.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/entity.py @@ -256,7 +256,7 @@ def is_part_of_api(cls, entity: dict[str, Any]) -> bool: return cls.USER_KEY in entity @classmethod - def from_api(cls, attributes: dict[str, Any]) -> BasicCredentials: # type: ignore[override] + def from_api(cls, attributes: dict[str, Any]) -> BasicCredentials: # type: ignore # Credentials are not returned from security reasons return cls( username=attributes[cls.USER_KEY], @@ -277,7 +277,7 @@ def is_part_of_api(cls, entity: dict[str, Any]) -> bool: return cls.USER_KEY in entity and cls.PRIVATE_KEY in entity @classmethod - def from_api(cls, attributes: dict[str, Any]) -> KeyPairCredentials: # type: ignore[override] + def from_api(cls, attributes: dict[str, Any]) -> KeyPairCredentials: # type: ignore # Credentials are not returned for security reasons return cls( username=attributes[cls.USER_KEY], @@ -297,7 +297,7 @@ def is_part_of_api(cls, entity: dict[str, Any]) -> bool: return cls.CLIENT_ID in entity and cls.CLIENT_SECRET in entity @classmethod - def from_api(cls, attributes: dict[str, Any]) -> ClientSecretCredentials: # type: ignore[override] + def from_api(cls, attributes: dict[str, Any]) -> ClientSecretCredentials: # type: ignore # Credentials are not returned for security reasons return cls( client_id=attributes[cls.CLIENT_ID], diff --git a/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py b/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py index a81b807ac..4063a6c56 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py @@ -2,7 +2,10 @@ from __future__ import annotations import logging -from typing import Any, Union +from typing import TYPE_CHECKING, Any, Union + +if TYPE_CHECKING: + import pyarrow from attrs import define, field from attrs.setters import frozen as frozen_attr @@ -11,6 +14,13 @@ from gooddata_api_client.model.afm_cancel_tokens import AfmCancelTokens from gooddata_api_client.model.result_spec import ResultSpec +try: + import pyarrow as _pyarrow + from pyarrow import ipc as _ipc +except ImportError: + _pyarrow = None # type: ignore + _ipc = None # type: ignore + from gooddata_sdk.client import GoodDataApiClient from gooddata_sdk.compute.model.attribute import Attribute from gooddata_sdk.compute.model.filter import Filter @@ -372,6 +382,31 @@ def read_result( ) return ExecutionResult(execution_result) + def read_result_arrow(self) -> pyarrow.Table: + """ + Reads the full execution result as a pyarrow Table. + + The binary endpoint returns the complete result in one shot (no paging). + Requires pyarrow to be installed (pip install gooddata-sdk[arrow]). + """ + if _ipc is None: + raise ImportError( + "pyarrow is required to use read_result_arrow(). Install it with: pip install gooddata-sdk[arrow]" + ) + import io + + response = self._actions_api.retrieve_result_binary( + workspace_id=self._workspace_id, + result_id=self.result_id, + _preload_content=False, + **({"x_gdc_cancel_token": self.cancel_token} if self.cancel_token else {}), + ) + try: + buf = io.BytesIO(response.read()) + finally: + response.release_conn() + return _ipc.open_file(buf).read_all() + def cancel(self) -> None: """ Cancels the execution backing this execution result. diff --git a/packages/gooddata-sdk/src/gooddata_sdk/compute/model/filter.py b/packages/gooddata-sdk/src/gooddata_sdk/compute/model/filter.py index 12e35e811..94171f156 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/compute/model/filter.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/compute/model/filter.py @@ -9,7 +9,7 @@ from gooddata_api_client.model.inline_filter_definition_inline import InlineFilterDefinitionInline if find_spec("icu") is not None: - from icu import Locale, SimpleDateFormat # type: ignore[import-not-found] + from icu import Locale, SimpleDateFormat # type: ignore import gooddata_api_client.models as afm_models from gooddata_api_client.model_utils import OpenApiModel diff --git a/packages/gooddata-sdk/src/gooddata_sdk/type_converter.py b/packages/gooddata-sdk/src/gooddata_sdk/type_converter.py index 4d3e3ee08..0e0e70444 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/type_converter.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/type_converter.py @@ -27,7 +27,7 @@ def to_type(self, value: str) -> Any: def to_external_type(self, value: str) -> Any: typed_value = self.to_type(value) if self._EXTERNAL_CONVERSION_FNC: - return self._EXTERNAL_CONVERSION_FNC(typed_value) + return self._EXTERNAL_CONVERSION_FNC(typed_value) # type: ignore else: return typed_value From 8d961f8026f9d0f04aed0cd277e5d233aa86473d Mon Sep 17 00:00:00 2001 From: mikezelenskyy Date: Wed, 1 Apr 2026 15:46:01 +0200 Subject: [PATCH 3/4] fix(gooddata-sdk): stream Arrow IPC response directly, no BytesIO Switch read_result_arrow to explicitly request application/vnd.apache.arrow.stream via Accept header and pipe the HTTP response directly into ipc.open_stream(), eliminating the intermediate BytesIO buffer. Update tests accordingly. --- .../gooddata_sdk/compute/model/execution.py | 19 +-- .../compute/test_bare_execution_response.py | 110 ++++++++++++++++++ 2 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 packages/gooddata-sdk/tests/compute/test_bare_execution_response.py diff --git a/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py b/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py index 4063a6c56..d947bad60 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/compute/model/execution.py @@ -393,19 +393,24 @@ def read_result_arrow(self) -> pyarrow.Table: raise ImportError( "pyarrow is required to use read_result_arrow(). Install it with: pip install gooddata-sdk[arrow]" ) - import io - response = self._actions_api.retrieve_result_binary( - workspace_id=self._workspace_id, - result_id=self.result_id, + header_params: dict = {"Accept": "application/vnd.apache.arrow.stream"} + if self.cancel_token: + header_params["X-GDC-CANCEL-TOKEN"] = self.cancel_token + + response = self._actions_api.api_client.call_api( + resource_path="/api/v1/actions/workspaces/{workspaceId}/execution/afm/execute/result/{resultId}/binary", + method="GET", + path_params={"workspaceId": self._workspace_id, "resultId": self.result_id}, + header_params=header_params, + response_type=None, _preload_content=False, - **({"x_gdc_cancel_token": self.cancel_token} if self.cancel_token else {}), + _return_http_data_only=True, ) try: - buf = io.BytesIO(response.read()) + return _ipc.open_stream(response).read_all() finally: response.release_conn() - return _ipc.open_file(buf).read_all() def cancel(self) -> None: """ diff --git a/packages/gooddata-sdk/tests/compute/test_bare_execution_response.py b/packages/gooddata-sdk/tests/compute/test_bare_execution_response.py new file mode 100644 index 000000000..463086331 --- /dev/null +++ b/packages/gooddata-sdk/tests/compute/test_bare_execution_response.py @@ -0,0 +1,110 @@ +# (C) 2026 GoodData Corporation +from __future__ import annotations + +import io +from unittest.mock import MagicMock, patch + +import pytest + +pyarrow = pytest.importorskip("pyarrow") + + +def _make_ipc_stream_bytes() -> bytes: + """Return minimal Arrow IPC stream bytes for a one-row table.""" + import pyarrow as pa + from pyarrow import ipc + + table = pa.table({"x": pa.array([1.0])}) + buf = io.BytesIO() + with ipc.new_stream(buf, table.schema) as writer: + writer.write_table(table) + return buf.getvalue() + + +class _FakeResponse(io.RawIOBase): + """Minimal file-like with release_conn to simulate a urllib3 HTTPResponse.""" + + def __init__(self, data: bytes) -> None: + super().__init__() + self._buf = io.BytesIO(data) + self.release_conn = MagicMock() + + def read(self, n: int = -1) -> bytes: + return self._buf.read(n) + + def readable(self) -> bool: + return True + + def readinto(self, b: bytearray) -> int: + data = self._buf.read(len(b)) + n = len(data) + b[:n] = data + return n + + +def _make_bare(ipc_bytes: bytes): + """Return a BareExecutionResponse backed by a mock API client.""" + from gooddata_sdk.compute.model.execution import BareExecutionResponse + + mock_api_client = MagicMock() + mock_response = _FakeResponse(ipc_bytes) + mock_api_client.actions_api.api_client.call_api.return_value = mock_response + + afm_exec_response = { + "execution_response": { + "links": {"executionResult": "result-id-123"}, + "dimensions": [], + } + } + bare = BareExecutionResponse( + api_client=mock_api_client, + workspace_id="ws-id", + execution_response=afm_exec_response, + ) + return bare, mock_response + + +def test_read_result_arrow_returns_table() -> None: + """read_result_arrow reads the stream from the binary endpoint and returns a pa.Table.""" + import pyarrow as pa + + ipc_bytes = _make_ipc_stream_bytes() + bare, mock_response = _make_bare(ipc_bytes) + + result = bare.read_result_arrow() + + assert isinstance(result, pa.Table) + mock_response.release_conn.assert_called_once() + + +def test_read_result_arrow_requests_stream_format() -> None: + """read_result_arrow sets Accept: application/vnd.apache.arrow.stream explicitly.""" + ipc_bytes = _make_ipc_stream_bytes() + bare, _ = _make_bare(ipc_bytes) + + bare.read_result_arrow() + + call_kwargs = bare._actions_api.api_client.call_api.call_args.kwargs + assert call_kwargs["header_params"]["Accept"] == "application/vnd.apache.arrow.stream" + + +def test_read_result_arrow_without_cancel_token() -> None: + """Without a cancel_token the call omits the cancel header.""" + ipc_bytes = _make_ipc_stream_bytes() + bare, _ = _make_bare(ipc_bytes) + + bare.read_result_arrow() + + call_kwargs = bare._actions_api.api_client.call_api.call_args.kwargs + assert "X-GDC-CANCEL-TOKEN" not in call_kwargs["header_params"] + + +def test_read_result_arrow_no_pyarrow_raises() -> None: + """When pyarrow is not installed, read_result_arrow raises ImportError.""" + from gooddata_sdk.compute.model import execution as _exec_mod + + ipc_bytes = _make_ipc_stream_bytes() + bare, _ = _make_bare(ipc_bytes) + + with patch.object(_exec_mod, "_ipc", None), pytest.raises(ImportError, match="pyarrow is required"): + bare.read_result_arrow() From 7dddd3a60475ccecaf40cb1cebefc32cc464a75d Mon Sep 17 00:00:00 2001 From: mikezelenskyy Date: Wed, 1 Apr 2026 15:50:10 +0200 Subject: [PATCH 4/4] docs(export): fix get_raw_export_bytes docstring to be format-agnostic --- .../src/gooddata_sdk/catalog/export/service.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py index 43609f8b0..64a594693 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/service.py @@ -338,10 +338,12 @@ def get_raw_export_bytes( max_retry: float = 5.0, ) -> bytes: """ - Poll the raw export endpoint for an already-submitted export and return the Arrow IPC bytes. + Poll the raw export endpoint for an already-submitted export and return its bytes. - The caller is responsible for submitting the AFM execution and the export request - (via ``actions_api.create_raw_export``), then passing the resulting ``export_id`` here. + Low-level building block: the caller is responsible for submitting the export request + (via ``actions_api.create_raw_export``) and passing the resulting ``export_id`` here. + The returned bytes reflect whatever format was requested at creation time + (``ARROW_FILE``, ``ARROW_STREAM``, or ``CSV``). Args: workspace_id (str): The ID of the target workspace. @@ -351,7 +353,7 @@ def get_raw_export_bytes( max_retry (float): Maximum wait between retries in seconds. Defaults to 5.0. Returns: - bytes: Arrow IPC bytes that can be read with ``pyarrow.ipc.open_file``. + bytes: Raw export bytes in the format requested at submission time. """ return self._get_exported_content( workspace_id=workspace_id,